From 6606104725aec959b0a472f30243cd8848c8131f Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 18 May 2023 11:14:22 +0200 Subject: [PATCH 01/94] First implementation of MEC011 v3.1.1 TCs based on the corresponding TPs --- MEC011/SRV/REGAPPS/README.md | 0 MEC011/SRV/REGAPPS/RegApps.robot | 269 ++++++++++++++++++ MEC011/SRV/REGAPPS/environment/variables.txt | 16 ++ MEC011/SRV/REGAPPS/jsons/AppInfo.json | 3 + MEC011/SRV/REGAPPS/jsons/AppInfo2.json | 4 + MEC011/SRV/REGAPPS/jsons/AppInfo3.json | 5 + MEC011/SRV/REGAPPS/jsons/AppInfoBR1.json | 4 + MEC011/SRV/REGAPPS/jsons/AppInfoBR2.json | 5 + MEC011/SRV/REGAPPS/jsons/AppInfoBR3.json | 9 + MEC011/SRV/REGAPPS/jsons/AppInfoBR4.json | 9 + MEC011/SRV/REGAPPS/jsons/AppInfoBR5.json | 8 + MEC011/SRV/REGAPPS/jsons/AppInfoBR6.json | 8 + MEC011/SRV/REGAPPS/jsons/AppInfoUpdate.json | 3 + .../SRV/REGAPPS/schemas/AppInfo.schema.json | 18 ++ 14 files changed, 361 insertions(+) create mode 100644 MEC011/SRV/REGAPPS/README.md create mode 100644 MEC011/SRV/REGAPPS/RegApps.robot create mode 100644 MEC011/SRV/REGAPPS/environment/variables.txt create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfo.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfo2.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfo3.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfoBR1.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfoBR2.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfoBR3.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfoBR4.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfoBR5.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfoBR6.json create mode 100644 MEC011/SRV/REGAPPS/jsons/AppInfoUpdate.json create mode 100644 MEC011/SRV/REGAPPS/schemas/AppInfo.schema.json diff --git a/MEC011/SRV/REGAPPS/README.md b/MEC011/SRV/REGAPPS/README.md new file mode 100644 index 0000000..e69de29 diff --git a/MEC011/SRV/REGAPPS/RegApps.robot b/MEC011/SRV/REGAPPS/RegApps.robot new file mode 100644 index 0000000..6efdd88 --- /dev/null +++ b/MEC011/SRV/REGAPPS/RegApps.robot @@ -0,0 +1,269 @@ +*** Settings *** + +Documentation +... A test suite for validating Registration applications (REGAPPS) operations. + +Resource ../../../GenericKeywords.robot +Resource environment/variables.txt +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false + +Default Tags TC_MEC_SRV_REGAPPS + + + +*** Test Cases *** + +TP_MEC_MEC011_SRV_REGAPPS_001_OK_01 + [Documentation] + ... Check that the IUT acknowledges the registration + ... by a MEC Application to the MEC platform + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfo + Check HTTP Response Status Code Is 201 + Check HTTP Response Header Contains Location + Check HTTP Response Body Json Schema Is AppInfo + Check Response Contains ${response['body']} appName ${APP_NAME} + + + +TP_MEC_MEC011_SRV_REGAPPS_001_OK_02 + [Documentation] + ... Check that the IUT acknowledges the registration + ... by a MEC Application to the MEC platform + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfo2 + Check HTTP Response Status Code Is 201 + Check HTTP Response Header Contains Location + Check HTTP Response Body Json Schema Is AppInfo + Check Response Contains ${response['body']} appName ${APP_NAME} + Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID} + + +TP_MEC_MEC011_SRV_REGAPPS_001_OK_03 + [Documentation] + ... Check that the IUT acknowledges the registration + ... by a MEC Application to the MEC platform + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfo3 + Check HTTP Response Status Code Is 201 + Check HTTP Response Header Contains Location + Check HTTP Response Body Json Schema Is AppInfo + Check Response Contains ${response['body']} appName ${APP_NAME} + Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID} + Check Response Contains ${response['body']} appDId ${APPD_ID} + + +TP_MEC_MEC011_SRV_REGAPPS_001_BR_01 + [Documentation] + ... Check that the IUT responds with an error message when the IUT received a registration with + ... missing fields from a MEC Application instantiated by the MEC platform + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfoBR1 + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC011_SRV_REGAPPS_001_BR_02 + [Documentation] + ... Check that the IUT responds with an error message + ... when the IUT received by a MEC Application registration with missing endpoint + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfoBR2 + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC011_SRV_REGAPPS_001_BR_03 + [Documentation] + ... Check that the IUT responds with an error message when the IUT received by a + ... MEC Application registration with unexpected appServiceRequired + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfoBR3 + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC011_SRV_REGAPPS_001_BR_04 + [Documentation] + ... Check that the IUT responds with an error message when the IUT received by a + ... MEC Application registration with unexpected appServiceRequired + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfoBR4 + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC011_SRV_REGAPPS_001_BR_05 + [Documentation] + ... Check that the IUT responds with an error message when the IUT received by a + ... MEC Application registration with unexpected appFeatureRequired + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfoBR5 + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC011_SRV_REGAPPS_001_BR_06 + [Documentation] + ... Check that the IUT responds with an error message when the IUT received by a + ... MEC Application registration with unexpected appFeatureOptional + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a new MEC application instance profile AppInfoBR6 + Check HTTP Response Status Code Is 400 + + + +TP_MEC_MEC011_SRV_REGAPPS_002_OK + [Documentation] + ... Check that the IUT responds with the AppInfo description + ... when queried by a MEC Application + ... + ... ETSI GS MEC 011 3.1.1, clause 7.2.14.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get MEC application instance profile ${APP_INSTANCE_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AppInfo + Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID} + + +TP_MEC_MEC011_SRV_REGAPPS_002_NF + [Documentation] + ... Check that the IUT responds with an error + ... when it receives a request for returning an AppInfo with a wrong ID + ... + ... ETSI GS MEC 011 3.1.1, clause 7.2.14.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} + Check HTTP Response Status Code Is 404 + + + +TP_MEC_MEC011_SRV_REGAPPS_003_OK + [Documentation] + ... Check that the IUT responds with 204 No Content + ... when queried to update MEC Application registration + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.2 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Update MEC application registration ${APP_INSTANCE_ID} AppInfoUpdate + Check HTTP Response Status Code Is 204 + + + +TP_MEC_MEC011_SRV_REGAPPS_003_NF + [Documentation] + ... Check that the IUT responds with 204 No Content + ... when queried to update MEC Application registration + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.2 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Update MEC application registration ${NOT_EXISTING_APP_INSTANCE_ID} AppInfoUpdate + Check HTTP Response Status Code Is 404 + + + +TP_MEC_MEC011_SRV_REGAPPS_004_OK + [Documentation] + ... Check that the IUT responds with 204 No Content + ... when queried to delete an existing MEC Application registration + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.5 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Delete MEC application instance profile ${APP_INSTANCE_ID} + Check HTTP Response Status Code Is 204 + + + +TP_MEC_MEC011_SRV_REGAPPS_004_NF + [Documentation] + ... Check that the IUT responds with an error when queried to + ... delete an unknown MEC Application registration + ... + ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.5 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Delete MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} + Check HTTP Response Status Code Is 404 + + + + +*** Keywords *** +Create a new MEC application instance profile + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/registrations ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get MEC application instance profile + [Arguments] ${app_instance_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/registrations/${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + + +Update MEC application registration + [Arguments] ${app_instance_id} ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Put ${apiRoot}/${apiName}/${apiVersion}/registrations/${app_instance_id} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + + +Delete MEC application instance profile + [Arguments] ${app_instance_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/registrations/${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/environment/variables.txt b/MEC011/SRV/REGAPPS/environment/variables.txt new file mode 100644 index 0000000..27fe68f --- /dev/null +++ b/MEC011/SRV/REGAPPS/environment/variables.txt @@ -0,0 +1,16 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} mec_app_support +${apiVersion} v2 + +# Specific variables +${APP_NAME} appName +${APP_INSTANCE_ID} appInstanceId +${NOT_EXISTING_APP_INSTANCE_ID} notExistingAppInstanceId +${APPD_ID} appDId \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfo.json b/MEC011/SRV/REGAPPS/jsons/AppInfo.json new file mode 100644 index 0000000..31c9053 --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfo.json @@ -0,0 +1,3 @@ +{ + "appName": "sampleAppName" +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfo2.json b/MEC011/SRV/REGAPPS/jsons/AppInfo2.json new file mode 100644 index 0000000..88f988d --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfo2.json @@ -0,0 +1,4 @@ +{ + "appName": "sampleAppName", + "appInstanceId": "appInstanceId" +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfo3.json b/MEC011/SRV/REGAPPS/jsons/AppInfo3.json new file mode 100644 index 0000000..c6c461a --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfo3.json @@ -0,0 +1,5 @@ +{ + "appName": "sampleAppName", + "appInstanceId": "appInstanceId", + "appDId": "appDId" +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfoBR1.json b/MEC011/SRV/REGAPPS/jsons/AppInfoBR1.json new file mode 100644 index 0000000..6e6098c --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfoBR1.json @@ -0,0 +1,4 @@ +{ + "appName": "appNameWithoutAppDId", + "appInstanceId": "appInstanceIdWithoutAppDId" +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfoBR2.json b/MEC011/SRV/REGAPPS/jsons/AppInfoBR2.json new file mode 100644 index 0000000..ab43a52 --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfoBR2.json @@ -0,0 +1,5 @@ +{ + "appName": "appNameWithoutAppDId", + "appInstanceId": "appInstanceIdWithoutAppDId", + "isInsByMec": false +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfoBR3.json b/MEC011/SRV/REGAPPS/jsons/AppInfoBR3.json new file mode 100644 index 0000000..a0b0820 --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfoBR3.json @@ -0,0 +1,9 @@ +{ + "appName": "appNameWithoutAppDId", + "appIappServiceRequirednstanceID": "appInstanceIdWithoutAppDId", + "appServiceRequired": [{ + "serName": "serviceName", + "version": "0.1" + }] + +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfoBR4.json b/MEC011/SRV/REGAPPS/jsons/AppInfoBR4.json new file mode 100644 index 0000000..acefd4e --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfoBR4.json @@ -0,0 +1,9 @@ +{ + "appName": "appNameWithoutAppDId", + "appIappServiceRequirednstanceID": "appInstanceIdWithoutAppDId", + "appServiceOptional": [{ + "serName": "notExpectedAppServiceOptional", + "version": "0.1" + }] + +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfoBR5.json b/MEC011/SRV/REGAPPS/jsons/AppInfoBR5.json new file mode 100644 index 0000000..c93aa5d --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfoBR5.json @@ -0,0 +1,8 @@ +{ + "appName": "appNameWithoutAppDId", + "appIappServiceRequirednstanceID": "appInstanceIdWithoutAppDId", + "appFeatureRequired": [{ + "featureName": "featureName", + "version": "0.1" + }] +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfoBR6.json b/MEC011/SRV/REGAPPS/jsons/AppInfoBR6.json new file mode 100644 index 0000000..1213d05 --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfoBR6.json @@ -0,0 +1,8 @@ +{ + "appName": "appNameWithoutAppDId", + "appIappServiceRequirednstanceID": "appInstanceIdWithoutAppDId", + "appFeatureOptional": [{ + "featureName": "appFeatureOptinalName", + "version": "0.1" + }] +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/jsons/AppInfoUpdate.json b/MEC011/SRV/REGAPPS/jsons/AppInfoUpdate.json new file mode 100644 index 0000000..31c9053 --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/AppInfoUpdate.json @@ -0,0 +1,3 @@ +{ + "appName": "sampleAppName" +} \ No newline at end of file diff --git a/MEC011/SRV/REGAPPS/schemas/AppInfo.schema.json b/MEC011/SRV/REGAPPS/schemas/AppInfo.schema.json new file mode 100644 index 0000000..8dd41cb --- /dev/null +++ b/MEC011/SRV/REGAPPS/schemas/AppInfo.schema.json @@ -0,0 +1,18 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "appName": { + "type": "string" + }, + "appInstanceId": { + "type": "string" + }, + "appDId": { + "type": "string" + } + }, + "required": [ + "appName" + ] + } \ No newline at end of file -- GitLab From 946d0cfa72fb9d958c61b1a5025eedb20bfe17c9 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 29 May 2023 21:38:23 +0200 Subject: [PATCH 02/94] Updated MEC011 SAQ to for MEC011v3.2.1 --- MEC011/SRV/SAQ/PlatServices.robot | 20 ++++++++++++-------- MEC011/SRV/SAQ/environment/variables.txt | 2 +- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/MEC011/SRV/SAQ/PlatServices.robot b/MEC011/SRV/SAQ/PlatServices.robot index 8843f5f..c699340 100644 --- a/MEC011/SRV/SAQ/PlatServices.robot +++ b/MEC011/SRV/SAQ/PlatServices.robot @@ -19,8 +19,9 @@ TP_MEC_MEC011_SRV_SAQ_001_OK ... Check that the IUT responds with a list of available MEC services ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.3.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfoList + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of available MEC services @@ -33,7 +34,9 @@ TP_MEC_MEC011_SRV_SAQ_001_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.3.3.1 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of available MEC services with parameters instance_id ${INVALID_VALUE} @@ -45,9 +48,9 @@ TP_MEC_MEC011_SRV_SAQ_002_OK ... Check that the IUT responds with the information on a specific service ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.4.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfoList - + ... "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get specific MEC service ${SERVICE_ID} Check HTTP Response Status Code Is 200 @@ -60,8 +63,9 @@ TP_MEC_MEC011_SRV_SAQ_002_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.4.3.1 - + ... "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get specific MEC service ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 diff --git a/MEC011/SRV/SAQ/environment/variables.txt b/MEC011/SRV/SAQ/environment/variables.txt index 3678581..f7395c2 100644 --- a/MEC011/SRV/SAQ/environment/variables.txt +++ b/MEC011/SRV/SAQ/environment/variables.txt @@ -19,7 +19,7 @@ ${NON_EXISTENT_SERVICE_ID} NON_EXISTENT_SERVICE_ID -${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${INSTANCE_ID} instance_id ${FAKE_INSTANCE_ID_VALUE} 5 ${NON_EXISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID -- GitLab From 30734352505a5d54b524e4954001b331e183a9e1 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 1 Jun 2023 15:27:24 +0200 Subject: [PATCH 03/94] Updated MEC011 APPSAQ TCs from relying on MEC011 v3.2.1 --- MEC011/SRV/APPSAQ/PlatAppServices.robot | 59 +++++++++++-------- MEC011/SRV/APPSAQ/environment/variables.txt | 2 +- MEC011/SRV/APPSAQ/jsons/ServiceInfo.json | 46 ++------------- MEC011/SRV/APPSAQ/jsons/ServiceInfoError.json | 46 ++------------- .../SRV/APPSAQ/jsons/ServiceInfoUpdated.json | 45 ++------------ .../APPSAQ/jsons/ServiceInfoUpdatedError.json | 45 ++------------ 6 files changed, 56 insertions(+), 187 deletions(-) diff --git a/MEC011/SRV/APPSAQ/PlatAppServices.robot b/MEC011/SRV/APPSAQ/PlatAppServices.robot index 8e4e3ac..9f31e11 100644 --- a/MEC011/SRV/APPSAQ/PlatAppServices.robot +++ b/MEC011/SRV/APPSAQ/PlatAppServices.robot @@ -18,8 +18,9 @@ TP_MEC_MEC011_SRV_APPSAQ_001_OK ... Check that the IUT responds with a list of available MEC services ... for a given application instance when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.6.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5 + ... Reference ETSI GS MEC 011 3.2.1, clause 8.1.2.2 + ... Reference ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -33,8 +34,9 @@ TP_MEC_MEC011_SRV_APPSAQ_001_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.6.3.1 - + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5 + ... Reference ETSI GS MEC 011 3.2.1, clause 8.1.2.2 + ... Reference ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES # Wrong query parameter name should trigger an error response. @@ -47,8 +49,9 @@ TP_MEC_MEC011_SRV_APPSAQ_002_OK ... Check that the IUT notifies the authorised relevant (subscribed) application ... instances when a new service for a given application instance is registered ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.6.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create new service ServiceInfo ${APP_INSTANCE_ID} @@ -56,15 +59,16 @@ TP_MEC_MEC011_SRV_APPSAQ_002_OK Check HTTP Response Body Json Schema Is ServiceInfo Check HTTP Response Header Contains Location Check Response Contains ${response['body']} serName ${NEW_SERVICE_NAME} - + TP_MEC_MEC011_SRV_APPSAQ_002_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.6.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create new service ServiceInfoError ${APP_INSTANCE_ID} @@ -76,7 +80,9 @@ TP_MEC_MEC011_SRV_APPSAQ_002_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.6.3.4 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -89,8 +95,9 @@ TP_MEC_MEC011_SRV_APPSAQ_003_OK ... Check that the IUT responds with the information on a specific service ... for a given application instance when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.7.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual service ${APP_INSTANCE_ID} ${SERVICE_ID} @@ -104,8 +111,9 @@ TP_MEC_MEC011_SRV_APPSAQ_003_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.7.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 @@ -116,9 +124,9 @@ TP_MEC_MEC011_SRV_APPSAQ_004_OK ... Check that the IUT updates a service information for a given ... application instance when commanded by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.7.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated Check HTTP Response Status Code Is 200 @@ -131,9 +139,9 @@ TP_MEC_MEC011_SRV_APPSAQ_004_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.7.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdatedError Check HTTP Response Status Code Is 400 @@ -144,9 +152,9 @@ TP_MEC_MEC011_SRV_APPSAQ_004_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.7.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES Update service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} ServiceInfoUpdated Check HTTP Response Status Code Is 404 @@ -157,8 +165,7 @@ TP_MEC_MEC011_SRV_APPSAQ_005_OK ... Check that the IUT executes the deletion of a service ... for a given application instance when requested by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.7.3.5 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} @@ -170,7 +177,7 @@ TP_MEC_MEC011_SRV_APPSAQ_005_NF ... Check that the IUT responds with an error when ... a request for deletion of a unknown service is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.7.3.5 + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES Remove individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 diff --git a/MEC011/SRV/APPSAQ/environment/variables.txt b/MEC011/SRV/APPSAQ/environment/variables.txt index e2331ca..a2c53ef 100644 --- a/MEC011/SRV/APPSAQ/environment/variables.txt +++ b/MEC011/SRV/APPSAQ/environment/variables.txt @@ -13,7 +13,7 @@ ${apiVersion} v1 ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${INSTANCE_ID} instance_id ${FAKE_INSTANCE_ID_VALUE} 5 -${NON_EXISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID +${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID ${SERVICE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NON_EXISTENT_SERVICE_ID} NON_EXISTENT_SERVICE_ID ${INVALID_ETAG} INVALID_ETAG diff --git a/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json index a7962fa..1cc5adf 100644 --- a/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json +++ b/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json @@ -1,42 +1,8 @@ { - "serName": "NEW_SERVICE_NAME", - "version": "reprehenderit Ut non commodo", - "state": "INACTIVE", - "transportInfo": { - "id": "labore ut Excepteur sunt ipsum", - "name": "in minim enim", - "type": "MB_ROUTING", - "protocol": "veniam aliqua cillum in", - "version": "exercitation pariatur", - "endpoint": { - "addresses": [ - { - "host": "sint culpa laboris", - "port": 10968 - } - ] - }, - "security": { - "oAuth2Info": { - "grantTypes": [ - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_CLIENT_CREDENTIALS" - ], - "tokenEndpoint": "https://RXjkuoqKaR.nskcJZJsyoIFJ0k86hJdxq.eTHEGqxAybM3DEZlUlYQpZ47s6RR+O9gyFrLbO92,9" - } - }, - "description": "dolor occaecat pariatur ex do" - }, - "serializer": "XML", - "serInstanceId": "cillum nostrud minim consectetur proident", - "serCategory": { - "href": "http://VWwswcAtAylGx.usasPjZ+bqQIHCMc7FfToVvk2M.SYAWYvSDKGSRL7Z.rxyfC0goFNZtoGJrlFc89,", - "id": "consectetur et eiusmod", - "name": "ea ipsum irure mollit et", - "version": "et" - }, - "scopeOfLocality": "ZONE", - "consumedLocalOnly": true, - "isLocal": false + "serName": "serviceName", + "version": "0.1", + "state": "INACTIVE", + "serializer": "XML", + "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", + "transportId": "transportId" } \ No newline at end of file diff --git a/MEC011/SRV/APPSAQ/jsons/ServiceInfoError.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfoError.json index 672c8a0..148a2fb 100644 --- a/MEC011/SRV/APPSAQ/jsons/ServiceInfoError.json +++ b/MEC011/SRV/APPSAQ/jsons/ServiceInfoError.json @@ -1,42 +1,8 @@ { - "Name": "WRONG_PARAMETER_NAME", - "version": "reprehenderit Ut non commodo", - "state": "INACTIVE", - "transportInfo": { - "id": "labore ut Excepteur sunt ipsum", - "name": "in minim enim", - "type": "MB_ROUTING", - "protocol": "veniam aliqua cillum in", - "version": "exercitation pariatur", - "endpoint": { - "addresses": [ - { - "host": "sint culpa laboris", - "port": 10968 - } - ] - }, - "security": { - "oAuth2Info": { - "grantTypes": [ - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_CLIENT_CREDENTIALS" - ], - "tokenEndpoint": "https://RXjkuoqKaR.nskcJZJsyoIFJ0k86hJdxq.eTHEGqxAybM3DEZlUlYQpZ47s6RR+O9gyFrLbO92,9" - } - }, - "description": "dolor occaecat pariatur ex do" - }, - "serializer": "XML", - "serInstanceId": "cillum nostrud minim consectetur proident", - "serCategory": { - "href": "http://VWwswcAtAylGx.usasPjZ+bqQIHCMc7FfToVvk2M.SYAWYvSDKGSRL7Z.rxyfC0goFNZtoGJrlFc89,", - "id": "consectetur et eiusmod", - "name": "ea ipsum irure mollit et", - "version": "et" - }, - "scopeOfLocality": "ZONE", - "consumedLocalOnly": true, - "isLocal": false + "Name": "WRONG_PARAM_NAME", + "version": "0.1", + "state": "INACTIVE", + "serializer": "XML", + "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", + "transportId": "transportId" } \ No newline at end of file diff --git a/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdated.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdated.json index afee85a..f64e481 100644 --- a/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdated.json +++ b/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdated.json @@ -1,42 +1,7 @@ { - "serName": "NEW_SERVICE_NAME", - "version": "v2.0", - "state": "INACTIVE", - "transportInfo": { - "id": "labore ut Excepteur sunt ipsum", - "name": "in minim enim", - "type": "MB_ROUTING", - "protocol": "veniam aliqua cillum in", - "version": "exercitation pariatur", - "endpoint": { - "addresses": [ - { - "host": "sint culpa laboris", - "port": 10968 - } - ] - }, - "security": { - "oAuth2Info": { - "grantTypes": [ - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_CLIENT_CREDENTIALS" - ], - "tokenEndpoint": "https://RXjkuoqKaR.nskcJZJsyoIFJ0k86hJdxq.eTHEGqxAybM3DEZlUlYQpZ47s6RR+O9gyFrLbO92,9" - } - }, - "description": "dolor occaecat pariatur ex do" - }, - "serializer": "XML", - "serInstanceId": "cillum nostrud minim consectetur proident", - "serCategory": { - "href": "http://VWwswcAtAylGx.usasPjZ+bqQIHCMc7FfToVvk2M.SYAWYvSDKGSRL7Z.rxyfC0goFNZtoGJrlFc89,", - "id": "consectetur et eiusmod", - "name": "ea ipsum irure mollit et", - "version": "et" - }, - "scopeOfLocality": "ZONE", - "consumedLocalOnly": true, - "isLocal": false + "serName": "NEW_SERVICE_NAME", + "version": "0.1", + "state": "INACTIVE", + "serializer": "XML", + "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD" } \ No newline at end of file diff --git a/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json index 6794471..44b5016 100644 --- a/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json +++ b/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json @@ -1,42 +1,7 @@ { - "serName": "NEW_SERVICE_NAME", - "a_version": "v2.0", - "state": "INACTIVE", - "transportInfo": { - "id": "labore ut Excepteur sunt ipsum", - "name": "in minim enim", - "type": "MB_ROUTING", - "protocol": "veniam aliqua cillum in", - "version": "exercitation pariatur", - "endpoint": { - "addresses": [ - { - "host": "sint culpa laboris", - "port": 10968 - } - ] - }, - "security": { - "oAuth2Info": { - "grantTypes": [ - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_CLIENT_CREDENTIALS" - ], - "tokenEndpoint": "https://RXjkuoqKaR.nskcJZJsyoIFJ0k86hJdxq.eTHEGqxAybM3DEZlUlYQpZ47s6RR+O9gyFrLbO92,9" - } - }, - "description": "dolor occaecat pariatur ex do" - }, - "serializer": "XML", - "serInstanceId": "cillum nostrud minim consectetur proident", - "serCategory": { - "href": "http://VWwswcAtAylGx.usasPjZ+bqQIHCMc7FfToVvk2M.SYAWYvSDKGSRL7Z.rxyfC0goFNZtoGJrlFc89,", - "id": "consectetur et eiusmod", - "name": "ea ipsum irure mollit et", - "version": "et" - }, - "scopeOfLocality": "ZONE", - "consumedLocalOnly": true, - "isLocal": false + "serName": "NEW_SERVICE_NAME", + "a_version": "v2.0", + "state": "INACTIVE", + "serializer": "XML", + "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD" } \ No newline at end of file -- GitLab From e9bdd1197de2dc0d75ee973afef7f8d05df0bda2 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 1 Jun 2023 15:41:36 +0200 Subject: [PATCH 04/94] Minor. --- MEC011/SRV/APPSAQ/environment/variables.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/MEC011/SRV/APPSAQ/environment/variables.txt b/MEC011/SRV/APPSAQ/environment/variables.txt index a2c53ef..3122626 100644 --- a/MEC011/SRV/APPSAQ/environment/variables.txt +++ b/MEC011/SRV/APPSAQ/environment/variables.txt @@ -16,7 +16,6 @@ ${FAKE_INSTANCE_ID_VALUE} 5 ${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID ${SERVICE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NON_EXISTENT_SERVICE_ID} NON_EXISTENT_SERVICE_ID -${INVALID_ETAG} INVALID_ETAG ## this parameter should be the same as in jsons/ServiceInfo.json on param serName ${NEW_SERVICE_NAME} NEW_SERVICE_NAME -- GitLab From 2157cff7643fd262d33e2f75e4672ee4d3f8d8c5 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 1 Jun 2023 17:10:49 +0200 Subject: [PATCH 05/94] Updated APPSUB TCs for MEC011 v3.2.1 --- MEC011/SRV/APPSUB/PlatAppSubscriptions.robot | 44 ++++++++----------- ...ppTerminationNotificationSubscription.json | 2 +- ...TerminationNotificationSubscriptionBR.json | 10 +++++ 3 files changed, 30 insertions(+), 26 deletions(-) create mode 100644 MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscriptionBR.json diff --git a/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot index 3154e0f..9ba0238 100644 --- a/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot +++ b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot @@ -18,9 +18,8 @@ TP_MEC_MEC011_SRV_APPSUB_001_OK ... Check that the IUT responds with a list of subscriptions for notifications ... on services availability when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.3.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/MecAppSuptApiSubscriptionLinkList - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get Subscriptions list ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 @@ -32,8 +31,8 @@ TP_MEC_MEC011_SRV_APPSUB_001_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.3.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get Subscriptions list ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 @@ -44,9 +43,8 @@ TP_MEC_MEC011_SRV_APPSUB_002_OK ... Check that the IUT acknowledges the subscription by a MEC Application ... to notifications on service availability events ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.3.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/AppTerminationNotificationSubscription - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription Check HTTP Response Status Code Is 201 @@ -61,15 +59,11 @@ TP_MEC_MEC011_SRV_APPSUB_002_BR ... Check that the IUT responds with the information on a specific subscription ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.3.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/AppTerminationNotificationSubscription - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES - Get individual subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppTerminationNotificationSubscription - Check Response Contains ${response['body']} subscriptionType AppTerminationNotificationSubscription - + Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscriptionBR + Check HTTP Response Status Code Is 400 TP_MEC_MEC011_SRV_APPSUB_003_OK @@ -77,8 +71,8 @@ TP_MEC_MEC011_SRV_APPSUB_003_OK ... Check that the IUT responds with the information on a specific subscription ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.4.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 200 @@ -90,8 +84,8 @@ TP_MEC_MEC011_SRV_APPSUB_003_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.4.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual subscription ${APP_INSTANCE_ID} ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 @@ -102,8 +96,8 @@ TP_MEC_MEC011_SRV_APPSUB_004_OK ... Check that the IUT acknowledges the unsubscribe from service availability event notifications ... when commanded by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.4.3.5 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES Remove subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 @@ -114,8 +108,8 @@ TP_MEC_MEC011_SRV_APPSUB_004_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.4.3.5 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES Remove subscription ${NON_EXISTENT_APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 @@ -136,7 +130,7 @@ Create new subscription Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Type":"*/*"} + #Set Headers {"Content-Type":"*/*"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} Post ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions ${body} diff --git a/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json b/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json index 760b35c..eb61a28 100644 --- a/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json +++ b/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json @@ -6,5 +6,5 @@ "href": "https://somewhere.com/mecAppSuptApi/example" } }, - "appInstanceId": "est eiusmod nulla exercitation" + "appInstanceId": "appIntanceId" } \ No newline at end of file diff --git a/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscriptionBR.json b/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscriptionBR.json new file mode 100644 index 0000000..0de784b --- /dev/null +++ b/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscriptionBR.json @@ -0,0 +1,10 @@ +{ + "subscriptionType": "INVALID_SUBSCRIPTION_TYPE", + "callbackReference": "https://somewhere.com/mecAppSuptApi/example", + "_links": { + "self": { + "href": "https://somewhere.com/mecAppSuptApi/example" + } + }, + "appInstanceId": "appInstanceId" +} \ No newline at end of file -- GitLab From 5f5ddd68f4fd4f9b45e06200b7e55674998117b0 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 1 Jun 2023 18:37:16 +0200 Subject: [PATCH 06/94] Updated CONFTASK TCs for MEC011 v3.2.1 --- MEC011/SRV/CONFTASK/PlatConfirmation.robot | 28 +++++++++---------- MEC011/SRV/CONFTASK/environment/variables.txt | 24 ++-------------- 2 files changed, 16 insertions(+), 36 deletions(-) diff --git a/MEC011/SRV/CONFTASK/PlatConfirmation.robot b/MEC011/SRV/CONFTASK/PlatConfirmation.robot index f4edb9a..de6f139 100644 --- a/MEC011/SRV/CONFTASK/PlatConfirmation.robot +++ b/MEC011/SRV/CONFTASK/PlatConfirmation.robot @@ -21,9 +21,9 @@ TP_MEC_MEC011_SRV_CONFTASK_001_OK ... Check that the IUT responds that it has completed ... the application level termination ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.11.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/AppTerminationConfirmation - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Request termination of MEC Application ${APP_INSTANCE_ID} AppTerminationConfirmation Check HTTP Response Status Code Is 204 @@ -34,11 +34,11 @@ TP_MEC_MEC011_SRV_CONFTASK_001_NF ... Check that the IUT responds with an error ... when requested graceful termination/stop of an unknown MEC Application instance ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.11.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/AppTerminationConfirmation - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES - Request termination of MEC Application ${NON_ESISTENT_APP_INSTANCE_ID} AppTerminationConfirmation + Request termination of MEC Application ${NON_EXISTING_APP_INSTANCE_ID} AppTerminationConfirmation Check HTTP Response Status Code Is 404 @@ -49,9 +49,9 @@ TP_MEC_MEC011_SRV_CONFTASK_002_OK ... Check that the IUT responds with an acknowledge ... when requested readiness status for a MEC Application instance ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.12.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/AppReadyConfirmation - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Request readiness status of MEC Application ${APP_INSTANCE_ID} AppReadyConfirmation Check HTTP Response Status Code Is 204 @@ -62,11 +62,11 @@ TP_MEC_MEC011_SRV_CONFTASK_002_NF ... Check that the IUT responds with an error ... when requested readiness status for an unknown MEC Application instance ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.12.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/AppReadyConfirmation - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES - Request readiness status of MEC Application ${NON_ESISTENT_APP_INSTANCE_ID} AppReadyConfirmation + Request readiness status of MEC Application ${NON_EXISTING_APP_INSTANCE_ID} AppReadyConfirmation Check HTTP Response Status Code Is 404 diff --git a/MEC011/SRV/CONFTASK/environment/variables.txt b/MEC011/SRV/CONFTASK/environment/variables.txt index 81a8328..cd46f8a 100644 --- a/MEC011/SRV/CONFTASK/environment/variables.txt +++ b/MEC011/SRV/CONFTASK/environment/variables.txt @@ -7,28 +7,8 @@ ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} mec_app_support -${apiVersion} v1 +${apiVersion} v2 # Specific variables ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f -${NON_ESISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID -# ${DNS_RULE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -# ${NON_ESISTENT_DNS_RULE_ID} NON_ESISTENT_DNS_RULE_ID -# ${INVALID_ETAG} INVALID_ETAG - -# ${SOME_IP_ADDRESS} 146.241.7.3 - -# ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription -# ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -# ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID -# ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} NON_EXISTENT_APP_MOBILITY_SERVICE_ID - -# # Notifications variables -# ${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar - -# ${callback_port} 9091 -# ${callback_uri} http://172.22.1.7:${callback_port} -# ${callback_endpoint} /amsi/subscriptions -# ${callback_endpoint_error} /subs_404 -# ${total_polling_time} 2 min -# ${polling_interval} 10 sec \ No newline at end of file +${NON_EXISTING_APP_INSTANCE_ID} NON_EXISTING_APP_INSTANCE_ID \ No newline at end of file -- GitLab From 3cb7dc291cb1395c9a44cc0187ec00e3ef4d94b6 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Wed, 28 Jun 2023 09:49:11 +0200 Subject: [PATCH 07/94] added example for notifications erver validation --- examples/notification_server/Dockerfile | 30 + examples/notification_server/RNIS/.keepme | 0 .../RNIS/dummy_mec012_server/.dockerignore | 72 + .../RNIS/dummy_mec012_server/.gitignore | 64 + .../.swagger-codegen-ignore | 23 + .../.swagger-codegen/VERSION | 1 + .../RNIS/dummy_mec012_server/.travis.yml | 13 + .../RNIS/dummy_mec012_server/Dockerfile | 16 + .../RNIS/dummy_mec012_server/README.md | 49 + .../RNIS/dummy_mec012_server/git_push.sh | 52 + .../RNIS/dummy_mec012_server/requirements.txt | 5 + .../RNIS/dummy_mec012_server/setup.py | 36 + .../RNIS/dummy_mec012_server/sub_payload.json | 13 + .../swagger_server/__init__.py | 0 .../swagger_server/__main__.py | 16 + .../swagger_server/controllers/__init__.py | 0 .../swagger_server/controllers/async_task.py | 46 + .../controllers/authorization_controller.py | 6 + .../controllers/dummy_service.py | 22 + .../controllers/rni_controller.py | 261 + .../swagger_server/encoder.py | 20 + .../swagger_server/models/__init__.py | 95 + .../swagger_server/models/associate_id.py | 98 + .../swagger_server/models/base_model_.py | 69 + .../models/ca_reconf_notification.py | 233 + ...ification_carrier_aggregation_meas_info.py | 201 + ..._reconf_notification_secondary_cell_add.py | 63 + .../models/ca_reconf_subscription.py | 179 + ...conf_subscription_filter_criteria_assoc.py | 122 + .../models/ca_reconf_subscription_links.py | 65 + .../models/cell_change_notification.py | 242 + .../cell_change_notification_temp_ue_id.py | 96 + .../models/cell_change_subscription.py | 179 + ...e_subscription_filter_criteria_assoc_ho.py | 151 + .../swagger_server/models/cell_id.py | 36 + .../swagger_server/models/ecgi.py | 94 + .../swagger_server/models/enum.py | 36 + .../models/expiry_notification.py | 120 + .../models/expiry_notification_links.py | 66 + .../models/inline_notification.py | 36 + .../models/inline_subscription.py | 36 + .../swagger_server/models/l2_meas.py | 121 + .../models/l2_meas_cell_info.py | 539 ++ .../models/l2_meas_cell_ue_info.py | 538 ++ .../swagger_server/models/link_type.py | 66 + .../models/meas_quantity_results_nr.py | 120 + .../models/meas_rep_ue_notification.py | 468 ++ ...ification_carrier_aggregation_meas_info.py | 369 ++ ...ication_eutran_neighbour_cell_meas_info.py | 203 + ...rep_ue_notification_new_radio_meas_info.py | 118 + ...ue_notification_new_radio_meas_nei_info.py | 176 + .../meas_rep_ue_notification_nr_bncs.py | 151 + ...ue_notification_nr_bncs_nr_bn_cell_info.py | 92 + ...meas_rep_ue_notification_nr_n_cell_info.py | 92 + .../models/meas_rep_ue_notification_nr_scs.py | 151 + ...p_ue_notification_nr_scs_nr_s_cell_info.py | 92 + .../models/meas_rep_ue_subscription.py | 179 + ..._subscription_filter_criteria_assoc_tri.py | 151 + .../models/meas_ta_notification.py | 181 + .../models/meas_ta_subscription.py | 179 + .../swagger_server/models/n_rcgi.py | 94 + .../swagger_server/models/nr_cell_id.py | 36 + .../models/nr_meas_rep_ue_notification.py | 238 + ...notification_eutra_neigh_cell_meas_info.py | 147 + .../nr_meas_rep_ue_notification_n_cell.py | 116 + ...ue_notification_nr_neigh_cell_meas_info.py | 143 + .../nr_meas_rep_ue_notification_s_cell.py | 116 + ...rep_ue_notification_serv_cell_meas_info.py | 117 + .../models/nr_meas_rep_ue_subscription.py | 179 + ..._ue_subscription_filter_criteria_nr_mrs.py | 151 + .../swagger_server/models/plmn.py | 96 + .../swagger_server/models/plmn_info.py | 124 + .../swagger_server/models/problem_details.py | 176 + .../models/rab_est_notification.py | 235 + ...ab_est_notification_erab_qos_parameters.py | 93 + ...ion_erab_qos_parameters_qos_information.py | 156 + .../models/rab_est_notification_temp_ue_id.py | 96 + .../models/rab_est_subscription.py | 179 + ...ab_est_subscription_filter_criteria_qci.py | 123 + .../swagger_server/models/rab_info.py | 152 + .../models/rab_info_cell_user_info.py | 92 + .../models/rab_info_erab_info.py | 91 + .../swagger_server/models/rab_info_ue_info.py | 94 + .../models/rab_mod_notification.py | 208 + ...ab_mod_notification_erab_qos_parameters.py | 93 + ...ion_erab_qos_parameters_qos_information.py | 156 + .../models/rab_mod_subscription.py | 179 + ...ab_mod_subscription_filter_criteria_qci.py | 153 + .../models/rab_rel_notification.py | 180 + .../rab_rel_notification_erab_release_info.py | 66 + .../models/rab_rel_subscription.py | 179 + .../models/results_per_csi_rs_index.py | 91 + .../models/results_per_csi_rs_index_list.py | 63 + ..._rs_index_list_results_per_csi_rs_index.py | 89 + .../models/results_per_ssb_index.py | 91 + .../models/results_per_ssb_index_list.py | 63 + ...er_ssb_index_list_results_per_ssb_index.py | 89 + .../swagger_server/models/rs_index_results.py | 94 + .../swagger_server/models/s1_bearer_info.py | 94 + .../models/s1_bearer_info_enb_info.py | 96 + .../s1_bearer_info_s1_bearer_info_detailed.py | 118 + .../models/s1_bearer_info_s1_ue_info.py | 150 + .../models/s1_bearer_info_sgw_info.py | 96 + .../models/s1_bearer_notification.py | 152 + .../s1_bearer_notification_s1_ue_info.py | 154 + .../models/s1_bearer_subscription.py | 210 + ...ription_s1_bearer_subscription_criteria.py | 122 + .../models/subscription_link_list.py | 65 + .../models/subscription_link_list_links.py | 94 + ...bscription_link_list_links_subscription.py | 92 + .../swagger_server/models/time_stamp.py | 96 + .../swagger_server/models/trigger.py | 63 + .../swagger_server/models/trigger_nr.py | 53 + .../swagger_server/swagger/swagger.yaml | 4932 +++++++++++++++++ .../swagger_server/test/__init__.py | 16 + .../test/test_rni_controller.py | 194 + .../swagger_server/type_util.py | 32 + .../swagger_server/util.py | 142 + .../dummy_mec012_server/test-requirements.txt | 7 + .../RNIS/dummy_mec012_server/tox.ini | 10 + examples/notification_server/Readme.md | 10 + .../notification_server/docker-compose.yml | 20 + .../notification_server/libraries/Server.py | 107 + examples/notification_server/requirements.txt | 9 + examples/notification_server/run_tests.sh | 5 + 125 files changed, 18925 insertions(+) create mode 100644 examples/notification_server/Dockerfile create mode 100644 examples/notification_server/RNIS/.keepme create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/.dockerignore create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/.gitignore create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen-ignore create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen/VERSION create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/.travis.yml create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/Dockerfile create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/README.md create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/git_push.sh create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/requirements.txt create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/setup.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/sub_payload.json create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/__init__.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/__main__.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/__init__.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/async_task.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/authorization_controller.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/dummy_service.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/rni_controller.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/encoder.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/__init__.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/associate_id.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/base_model_.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_carrier_aggregation_meas_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_secondary_cell_add.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_filter_criteria_assoc.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_links.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification_temp_ue_id.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription_filter_criteria_assoc_ho.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_id.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ecgi.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/enum.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification_links.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_ue_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/link_type.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_quantity_results_nr.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_carrier_aggregation_meas_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_eutran_neighbour_cell_meas_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_nei_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs_nr_bn_cell_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_n_cell_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs_nr_s_cell_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription_filter_criteria_assoc_tri.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/n_rcgi.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_cell_id.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_eutra_neigh_cell_meas_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_n_cell.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_nr_neigh_cell_meas_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_s_cell.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_serv_cell_meas_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription_filter_criteria_nr_mrs.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/problem_details.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters_qos_information.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_temp_ue_id.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription_filter_criteria_qci.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_cell_user_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_erab_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_ue_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters_qos_information.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription_filter_criteria_qci.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification_erab_release_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list_results_per_csi_rs_index.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list_results_per_ssb_index.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rs_index_results.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_enb_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_bearer_info_detailed.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_ue_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_sgw_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification_s1_ue_info.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription_s1_bearer_subscription_criteria.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links_subscription.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/time_stamp.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger_nr.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/swagger/swagger.yaml create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/__init__.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/test_rni_controller.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/type_util.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/swagger_server/util.py create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/test-requirements.txt create mode 100644 examples/notification_server/RNIS/dummy_mec012_server/tox.ini create mode 100644 examples/notification_server/Readme.md create mode 100644 examples/notification_server/docker-compose.yml create mode 100644 examples/notification_server/libraries/Server.py create mode 100644 examples/notification_server/requirements.txt create mode 100755 examples/notification_server/run_tests.sh diff --git a/examples/notification_server/Dockerfile b/examples/notification_server/Dockerfile new file mode 100644 index 0000000..68f7609 --- /dev/null +++ b/examples/notification_server/Dockerfile @@ -0,0 +1,30 @@ +##Docker file containing the environment for running robot3.1 based on python3.9 +## As example, MEC016 test suite are used +##How to run this container. + +## Build the image using this docker file, make sure the server side is up and running and eventually run the tests. + +FROM python:3.10-slim + +RUN addgroup robot && adduser -D -G robot -h /home/robot robot +WORKDIR /home/robot + +# Install system packages +RUN apt-get update && apt-get install -y \ + git \ + wget \ + build-essential \ + python3-dev \ + libssl-dev \ + libffi-dev \ + python3-pip + + + +COPY requirements.txt . +RUN pip install -r requirements.txt + +COPY tests tests +COPY libraries libraries +COPY run_tests.sh . +ENTRYPOINT ./run_tests.sh diff --git a/examples/notification_server/RNIS/.keepme b/examples/notification_server/RNIS/.keepme new file mode 100644 index 0000000..e69de29 diff --git a/examples/notification_server/RNIS/dummy_mec012_server/.dockerignore b/examples/notification_server/RNIS/dummy_mec012_server/.dockerignore new file mode 100644 index 0000000..cdd823e --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/.dockerignore @@ -0,0 +1,72 @@ +.travis.yaml +.swagger-codegen-ignore +README.md +tox.ini +git_push.sh +test-requirements.txt +setup.py + +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ +venv/ +.python-version + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +#Ipython Notebook +.ipynb_checkpoints diff --git a/examples/notification_server/RNIS/dummy_mec012_server/.gitignore b/examples/notification_server/RNIS/dummy_mec012_server/.gitignore new file mode 100644 index 0000000..a655050 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/.gitignore @@ -0,0 +1,64 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class + +# C extensions +*.so + +# Distribution / packaging +.Python +env/ +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +*.egg-info/ +.installed.cfg +*.egg + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*,cover +.hypothesis/ +venv/ +.python-version + +# Translations +*.mo +*.pot + +# Django stuff: +*.log + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +#Ipython Notebook +.ipynb_checkpoints diff --git a/examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen-ignore b/examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen-ignore new file mode 100644 index 0000000..c5fa491 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen-ignore @@ -0,0 +1,23 @@ +# Swagger Codegen Ignore +# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md diff --git a/examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen/VERSION b/examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen/VERSION new file mode 100644 index 0000000..1617617 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/.swagger-codegen/VERSION @@ -0,0 +1 @@ +3.0.46 \ No newline at end of file diff --git a/examples/notification_server/RNIS/dummy_mec012_server/.travis.yml b/examples/notification_server/RNIS/dummy_mec012_server/.travis.yml new file mode 100644 index 0000000..dd6c445 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/.travis.yml @@ -0,0 +1,13 @@ +# ref: https://docs.travis-ci.com/user/languages/python +language: python +python: + - "3.2" + - "3.3" + - "3.4" + - "3.5" + #- "3.5-dev" # 3.5 development branch + #- "nightly" # points to the latest development branch e.g. 3.6-dev +# command to install dependencies +install: "pip install -r requirements.txt" +# command to run tests +script: nosetests diff --git a/examples/notification_server/RNIS/dummy_mec012_server/Dockerfile b/examples/notification_server/RNIS/dummy_mec012_server/Dockerfile new file mode 100644 index 0000000..f9243a5 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/Dockerfile @@ -0,0 +1,16 @@ +FROM python:3.6-alpine + +RUN mkdir -p /usr/src/app +WORKDIR /usr/src/app + +COPY requirements.txt /usr/src/app/ + +RUN pip3 install --no-cache-dir -r requirements.txt + +COPY . /usr/src/app + +EXPOSE 8080 + +ENTRYPOINT ["python3"] + +CMD ["-m", "swagger_server"] \ No newline at end of file diff --git a/examples/notification_server/RNIS/dummy_mec012_server/README.md b/examples/notification_server/RNIS/dummy_mec012_server/README.md new file mode 100644 index 0000000..f9ca456 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/README.md @@ -0,0 +1,49 @@ +# Swagger generated server + +## Overview +This server was generated by the [swagger-codegen](https://github.com/swagger-api/swagger-codegen) project. By using the +[OpenAPI-Spec](https://github.com/swagger-api/swagger-core/wiki) from a remote server, you can easily generate a server stub. This +is an example of building a swagger-enabled Flask server. + +This example uses the [Connexion](https://github.com/zalando/connexion) library on top of Flask. + +## Requirements +Python 3.5.2+ + +## Usage +To run the server, please execute the following from the root directory: + +``` +pip3 install -r requirements.txt +python3 -m swagger_server +``` + +and open your browser to here: + +``` +http://localhost:8080/rni/v2/ui/ +``` + +Your Swagger definition lives here: + +``` +http://localhost:8080/rni/v2/swagger.json +``` + +To launch the integration tests, use tox: +``` +sudo pip install tox +tox +``` + +## Running with Docker + +To run the server on a Docker container, please execute the following from the root directory: + +```bash +# building the image +docker build -t swagger_server . + +# starting up a container +docker run -p 8080:8080 swagger_server +``` \ No newline at end of file diff --git a/examples/notification_server/RNIS/dummy_mec012_server/git_push.sh b/examples/notification_server/RNIS/dummy_mec012_server/git_push.sh new file mode 100644 index 0000000..160f6f2 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/git_push.sh @@ -0,0 +1,52 @@ +#!/bin/sh +# ref: https://help.github.com/articles/adding-an-existing-project-to-github-using-the-command-line/ +# +# Usage example: /bin/sh ./git_push.sh wing328 swagger-petstore-perl "minor update" + +git_user_id=$1 +git_repo_id=$2 +release_note=$3 + +if [ "$git_user_id" = "" ]; then + git_user_id="GIT_USER_ID" + echo "[INFO] No command line input provided. Set \$git_user_id to $git_user_id" +fi + +if [ "$git_repo_id" = "" ]; then + git_repo_id="GIT_REPO_ID" + echo "[INFO] No command line input provided. Set \$git_repo_id to $git_repo_id" +fi + +if [ "$release_note" = "" ]; then + release_note="Minor update" + echo "[INFO] No command line input provided. Set \$release_note to $release_note" +fi + +# Initialize the local directory as a Git repository +git init + +# Adds the files in the local repository and stages them for commit. +git add . + +# Commits the tracked changes and prepares them to be pushed to a remote repository. +git commit -m "$release_note" + +# Sets the new remote +git_remote=`git remote` +if [ "$git_remote" = "" ]; then # git remote not defined + + if [ "$GIT_TOKEN" = "" ]; then + echo "[INFO] \$GIT_TOKEN (environment variable) is not set. Using the git credential in your environment." + git remote add origin https://github.com/${git_user_id}/${git_repo_id}.git + else + git remote add origin https://${git_user_id}:${GIT_TOKEN}@github.com/${git_user_id}/${git_repo_id}.git + fi + +fi + +git pull origin master + +# Pushes (Forces) the changes in the local repository up to the remote repository +echo "Git pushing to https://github.com/${git_user_id}/${git_repo_id}.git" +git push origin master 2>&1 | grep -v 'To https' + diff --git a/examples/notification_server/RNIS/dummy_mec012_server/requirements.txt b/examples/notification_server/RNIS/dummy_mec012_server/requirements.txt new file mode 100644 index 0000000..62c7fff --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/requirements.txt @@ -0,0 +1,5 @@ +connexion >= 2.6.0 +connexion[swagger-ui] >= 2.6.0 +python_dateutil == 2.6.0 +setuptools >= 21.0.0 +swagger-ui-bundle >= 0.0.2 diff --git a/examples/notification_server/RNIS/dummy_mec012_server/setup.py b/examples/notification_server/RNIS/dummy_mec012_server/setup.py new file mode 100644 index 0000000..b7b29a1 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/setup.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +import sys +from setuptools import setup, find_packages + +NAME = "swagger_server" +VERSION = "1.0.0" +# To install the library, run the following +# +# python setup.py install +# +# prerequisite: setuptools +# http://pypi.python.org/pypi/setuptools + +REQUIRES = [ + "connexion", + "swagger-ui-bundle>=0.0.2" +] + +setup( + name=NAME, + version=VERSION, + description="ETSI GS MEC 012 - Radio Network Information API", + author_email="", + url="", + keywords=["Swagger", "ETSI GS MEC 012 - Radio Network Information API"], + install_requires=REQUIRES, + packages=find_packages(), + package_data={'': ['swagger/swagger.yaml']}, + include_package_data=True, + entry_points={ + 'console_scripts': ['swagger_server=swagger_server.__main__:main']}, + long_description="""\ + The ETSI MEC ISG MEC012 Radio Network Information API described using OpenAPI. + """ +) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/sub_payload.json b/examples/notification_server/RNIS/dummy_mec012_server/sub_payload.json new file mode 100644 index 0000000..e2531e5 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/sub_payload.json @@ -0,0 +1,13 @@ +{ + "subscriptionType": "CellChangeSubscription", + "callbackReference": "https://10.30.8.200:8080/notificationEndpoint", + "filterCriteriaAssocHo": { + "ecgi": [{ + "plmn": { + "mnc": "01", + "mcc": "001" + }, + "cellId": "ACBDEFA" + }] + } +} diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/__init__.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/__main__.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/__main__.py new file mode 100644 index 0000000..f3108da --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/__main__.py @@ -0,0 +1,16 @@ +#!/usr/bin/env python3 + +import connexion + +from swagger_server import encoder + + +def main(): + app = connexion.App(__name__, specification_dir='./swagger/') + app.app.json_encoder = encoder.JSONEncoder + app.add_api('swagger.yaml', arguments={'title': 'ETSI GS MEC 012 - Radio Network Information API'}, pythonic_params=True) + app.run(port=8080) + + +if __name__ == '__main__': + main() diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/__init__.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/async_task.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/async_task.py new file mode 100644 index 0000000..a4a3065 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/async_task.py @@ -0,0 +1,46 @@ +import sys +import time +import atexit +from flask import current_app +from threading import Thread +import logging +import random +import logging + +logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) + +## Each second an output_msg is shown and eventually the method with name callback_name belonging to this_object is called. +def simulate_processing(min_time_sec, max_time_sec, output_msg, this_object, callback_name, pars): + iterations = random.randint(min_time_sec, max_time_sec) + logging.info("The process will take around " + str(iterations) + " seconds") + for i in range(0, iterations): + time.sleep(1) + + logging.info(output_msg + " completed!") + class_method = getattr(this_object.__class__, callback_name) + class_method(this_object, pars) + + +def start_sim_process(min_time_sec, max_time_sec, output_msg, this_object, callback_name, pars): + if min_time_sec > max_time_sec: + logging.warn( + "Min time cannot be greater than max time. Setting min to 10 seconds and max to 20 seconds, respectively.") + min_time_sec = 10 + max_time_sec = 20 + logging.info("Starting the process simulator...") + thr = Thread(target=simulate_processing, + args=[min_time_sec, max_time_sec, output_msg, this_object, callback_name, pars]) + thr.start() + + +##What does this function do ? It triggers the callback after a given timeout +def trigger_callback_after_timeout(timeout, this_object, callback_name, pars): + logging.info("Waiting " + str(timeout) + " seconds before triggering the process") + time.sleep(timeout) + class_method = getattr(this_object.__class__, callback_name) + class_method(this_object, pars) + + +def start_workflow(waiting_time, this_object, callback_name, pars): + thr = Thread(target=trigger_callback_after_timeout, args=[waiting_time, this_object, callback_name, pars]) + thr.start() diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/authorization_controller.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/authorization_controller.py new file mode 100644 index 0000000..2f7b0bb --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/authorization_controller.py @@ -0,0 +1,6 @@ +from typing import List +""" +controller generated to handled auth operation described at: +https://connexion.readthedocs.io/en/latest/security.html +""" + diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/dummy_service.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/dummy_service.py new file mode 100644 index 0000000..39cd5ff --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/dummy_service.py @@ -0,0 +1,22 @@ +import logging +logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) +import requests + +import swagger_server.controllers.async_task as at + +class DummyService: + def async_task(self, pars): + notification_url = pars[0] + data = {} + data["_links"]={} + data["_links"]["self"]="XX" + data["expiryDeadline"]={} + data["expiryDeadline"]["seconds"]=1234 + data["expiryDeadline"]["nanoseconds"]=1234 + logging.info(notification_url) + logging.info(data) + response = requests.post(notification_url, json=data) + status_code = response.status_code + + def invoke_sth(self,notification_url): + at.start_workflow(5, self, "async_task", [notification_url]) \ No newline at end of file diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/rni_controller.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/rni_controller.py new file mode 100644 index 0000000..41db3fc --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/controllers/rni_controller.py @@ -0,0 +1,261 @@ +import connexion +import six + +import swagger_server.controllers.dummy_service as ds + +from swagger_server.models.inline_subscription import InlineSubscription # noqa: E501 +from swagger_server.models.l2_meas import L2Meas # noqa: E501 +from swagger_server.models.plmn_info import PlmnInfo # noqa: E501 +from swagger_server.models.problem_details import ProblemDetails # noqa: E501 +from swagger_server.models.rab_info import RabInfo # noqa: E501 +from swagger_server.models.s1_bearer_info import S1BearerInfo # noqa: E501 +from swagger_server.models.subscription_link_list import SubscriptionLinkList # noqa: E501 +from swagger_server import util +import logging +from flask import Response +import json +from swagger_server.controllers.dummy_service import DummyService + +logging.basicConfig(format='%(levelname)s:%(message)s', level=logging.DEBUG) + +def layer2_meas_info_get(app_ins_id=None, cell_id=None, ue_ipv4_address=None, ue_ipv6_address=None, nated_ip_address=None, gtp_teid=None, dl_gbr_prb_usage_cell=None, ul_gbr_prb_usage_cell=None, dl_nongbr_prb_usage_cell=None, ul_nongbr_prb_usage_cell=None, dl_total_prb_usage_cell=None, ul_total_prb_usage_cell=None, received_dedicated_preambles_cell=None, received_randomly_selected_preambles_low_range_cell=None, received_randomly_selected_preambles_high_range_cell=None, number_of_active_ue_dl_gbr_cell=None, number_of_active_ue_ul_gbr_cell=None, number_of_active_ue_dl_nongbr_cell=None, number_of_active_ue_ul_nongbr_cell=None, dl_gbr_pdr_cell=None, ul_gbr_pdr_cell=None, dl_nongbr_pdr_cell=None, ul_nongbr_pdr_cell=None, dl_gbr_delay_ue=None, ul_gbr_delay_ue=None, dl_nongbr_delay_ue=None, ul_nongbr_delay_ue=None, dl_gbr_pdr_ue=None, ul_gbr_pdr_ue=None, dl_nongbr_pdr_ue=None, ul_nongbr_pdr_ue=None, dl_gbr_throughput_ue=None, ul_gbr_throughput_ue=None, dl_nongbr_throughput_ue=None, ul_nongbr_throughput_ue=None, dl_gbr_data_volume_ue=None, ul_gbr_data_volume_ue=None, dl_nongbr_data_volume_ue=None, ul_nongbr_data_volume_ue=None): # noqa: E501 + """Retrieve information on layer 2 measurements + + Queries information about the layer 2 measurements. # noqa: E501 + + :param app_ins_id: Application instance identifier + :type app_ins_id: str + :param cell_id: Comma separated list of E-UTRAN Cell Identities + :type cell_id: List[str] + :param ue_ipv4_address: Comma separated list of IE IPv4 addresses as defined for the type for AssociateId + :type ue_ipv4_address: List[str] + :param ue_ipv6_address: Comma separated list of IE IPv6 addresses as defined for the type for AssociateId + :type ue_ipv6_address: List[str] + :param nated_ip_address: Comma separated list of IE NATed IP addresses as defined for the type for AssociateId + :type nated_ip_address: List[str] + :param gtp_teid: Comma separated list of GTP TEID addresses as defined for the type for AssociateId + :type gtp_teid: List[str] + :param dl_gbr_prb_usage_cell: PRB usage for downlink GBR traffic in percentage as defined in ETSI TS 136 314 + :type dl_gbr_prb_usage_cell: int + :param ul_gbr_prb_usage_cell: PRB usage for uplink GBR traffic in percentage as defined in ETSI TS 136 314 + :type ul_gbr_prb_usage_cell: int + :param dl_nongbr_prb_usage_cell: PRB usage for downlink non-GBR traffic in percentage as defined in ETSI TS 136 314 + :type dl_nongbr_prb_usage_cell: int + :param ul_nongbr_prb_usage_cell: PRB usage for uplink non-GBR traffic in percentage as defined in ETSI TS 136 314 + :type ul_nongbr_prb_usage_cell: int + :param dl_total_prb_usage_cell: PRB usage for total downlink traffic in percentage as defined in ETSI TS 136 314 + :type dl_total_prb_usage_cell: int + :param ul_total_prb_usage_cell: PRB usage for total uplink traffic in percentage as defined in ETSI TS 136 314 + :type ul_total_prb_usage_cell: int + :param received_dedicated_preambles_cell: Received dedicated preambles in percentage as defined in ETSI TS 136 314 + :type received_dedicated_preambles_cell: int + :param received_randomly_selected_preambles_low_range_cell: Received randomly selected preambles in the low range in percentage as defined in ETSI TS 136 314 + :type received_randomly_selected_preambles_low_range_cell: int + :param received_randomly_selected_preambles_high_range_cell: Received rendomly selected preambles in the high range in percentage as defined in ETSI TS 136 314 + :type received_randomly_selected_preambles_high_range_cell: int + :param number_of_active_ue_dl_gbr_cell: Number of active UEs with downlink GBR traffic as defined in ETSI TS 136 314 + :type number_of_active_ue_dl_gbr_cell: int + :param number_of_active_ue_ul_gbr_cell: Number of active UEs with uplink GBR traffic as defined in ETSI TS 136 314 + :type number_of_active_ue_ul_gbr_cell: int + :param number_of_active_ue_dl_nongbr_cell: Number of active UEs with downlink non-GBR traffic as defined in ETSI TS 136 314 + :type number_of_active_ue_dl_nongbr_cell: int + :param number_of_active_ue_ul_nongbr_cell: Number of active UEs with uplink non-GBR traffic as defined in ETSI TS 136 314 + :type number_of_active_ue_ul_nongbr_cell: int + :param dl_gbr_pdr_cell: Packet discard rate for downlink GBR traffic in percentage as defined in ETSI TS 136 314 + :type dl_gbr_pdr_cell: int + :param ul_gbr_pdr_cell: Packet discard rate for uplink GBR traffic in percentage as defined in ETSI TS 136 314 + :type ul_gbr_pdr_cell: int + :param dl_nongbr_pdr_cell: Packet discard rate for downlink non-GBR traffic in percentage as defined in ETSI TS 136 314 + :type dl_nongbr_pdr_cell: int + :param ul_nongbr_pdr_cell: Packet discard rate for uplink non-GBR traffic in percentage as defined in ETSI TS 136 314 + :type ul_nongbr_pdr_cell: int + :param dl_gbr_delay_ue: Packet delay of downlink GBR traffic of a UE as defined in ETSI TS 136 314 + :type dl_gbr_delay_ue: int + :param ul_gbr_delay_ue: Packet delay of uplink GBR traffic of a UE as defined in ETSI TS 136 314 + :type ul_gbr_delay_ue: int + :param dl_nongbr_delay_ue: Packet delay of downlink non-GBR traffic of a UE as defined in ETSI TS 136 314 + :type dl_nongbr_delay_ue: int + :param ul_nongbr_delay_ue: Packet delay of uplink non-GBR traffic of a UE as defined in ETSI TS 136 314 + :type ul_nongbr_delay_ue: int + :param dl_gbr_pdr_ue: Packet discard rate of downlink GBR traffic of a UE in percentage as defined in ETSI TS 136 314 + :type dl_gbr_pdr_ue: int + :param ul_gbr_pdr_ue: Packet discard rate of uplink GBR traffic of a UE in percentage as defined in ETSI TS 136 314 + :type ul_gbr_pdr_ue: int + :param dl_nongbr_pdr_ue: Packet discard rate of downlink non-GBR traffic of a UE in percentage as defined in ETSI TS 136 314 + :type dl_nongbr_pdr_ue: int + :param ul_nongbr_pdr_ue: Packet discard rate of uplink non-GBR traffic of a UE in percentage as defined in ETSI TS 136 314 + :type ul_nongbr_pdr_ue: int + :param dl_gbr_throughput_ue: Scheduled throughput of downlink GBR traffic of a UE as defined in ETSI TS 136 314 + :type dl_gbr_throughput_ue: int + :param ul_gbr_throughput_ue: Scheduled throughput of uplink GBR traffic of a UE as defined in ETSI TS 136 314 + :type ul_gbr_throughput_ue: int + :param dl_nongbr_throughput_ue: Scheduled throughput of downlink non-GBR traffic of a UE as defined in ETSI TS 136 314 + :type dl_nongbr_throughput_ue: int + :param ul_nongbr_throughput_ue: Scheduled throughput of uplink non-GBR traffic of a UE as defined in ETSI TS 136 314 + :type ul_nongbr_throughput_ue: int + :param dl_gbr_data_volume_ue: Data volume of downlink GBR traffic of a UE as defined in ETSI TS 136 314 + :type dl_gbr_data_volume_ue: int + :param ul_gbr_data_volume_ue: Data volume of uplink GBR traffic of a UE as defined in ETSI TS 136 314 + :type ul_gbr_data_volume_ue: int + :param dl_nongbr_data_volume_ue: Data volume of downlink non-GBR traffic of a UE as defined in ETSI TS 136 314 + :type dl_nongbr_data_volume_ue: int + :param ul_nongbr_data_volume_ue: Data volume of uplink non-GBR traffic of a UE as defined in ETSI TS 136 314 + :type ul_nongbr_data_volume_ue: int + + :rtype: L2Meas + """ + return 'do some magic!' + + +def plmn_info_get(app_ins_id): # noqa: E501 + """Retrieve information on the underlying Mobile Network that the MEC application is associated to + + Queries information about the Mobile Network # noqa: E501 + + :param app_ins_id: Comma separated list of Application instance identifiers + :type app_ins_id: List[str] + + :rtype: List[PlmnInfo] + """ + return 'do some magic!' + + +def rab_info_get(app_ins_id=None, cell_id=None, ue_ipv4_address=None, ue_ipv6_address=None, nated_ip_address=None, gtp_teid=None, erab_id=None, qci=None, erab_mbr_dl=None, erab_mbr_ul=None, erab_gbr_dl=None, erab_gbr_ul=None): # noqa: E501 + """Retrieve information on Radio Access Bearers + + Queries information about the Radio Access Bearers # noqa: E501 + + :param app_ins_id: Application instance identifier + :type app_ins_id: str + :param cell_id: Comma separated list of E-UTRAN Cell Identities + :type cell_id: List[str] + :param ue_ipv4_address: Comma separated list of IE IPv4 addresses as defined for the type for AssociateId + :type ue_ipv4_address: List[str] + :param ue_ipv6_address: Comma separated list of IE IPv6 addresses as defined for the type for AssociateId + :type ue_ipv6_address: List[str] + :param nated_ip_address: Comma separated list of IE NATed IP addresses as defined for the type for AssociateId + :type nated_ip_address: List[str] + :param gtp_teid: Comma separated list of GTP TEID addresses as defined for the type for AssociateId + :type gtp_teid: List[str] + :param erab_id: E-RAB identifier + :type erab_id: int + :param qci: QoS Class Identifier as defined in ETSI TS 123 401 + :type qci: int + :param erab_mbr_dl: Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 + :type erab_mbr_dl: int + :param erab_mbr_ul: Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 + :type erab_mbr_ul: int + :param erab_gbr_dl: Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 + :type erab_gbr_dl: int + :param erab_gbr_ul: Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 + :type erab_gbr_ul: int + + :rtype: RabInfo + """ + return 'do some magic!' + + +def s1_bearer_info_get(temp_ue_id=None, ue_ipv4_address=None, ue_ipv6_address=None, nated_ip_address=None, gtp_teid=None, cell_id=None, erab_id=None): # noqa: E501 + """Retrieve S1-U bearer information related to specific UE(s) + + Queries information about the S1 bearer(s) # noqa: E501 + + :param temp_ue_id: Comma separated list of temporary identifiers allocated for the specific UE as defined in ETSI TS 136 413 + :type temp_ue_id: List[str] + :param ue_ipv4_address: Comma separated list of IE IPv4 addresses as defined for the type for AssociateId + :type ue_ipv4_address: List[str] + :param ue_ipv6_address: Comma separated list of IE IPv6 addresses as defined for the type for AssociateId + :type ue_ipv6_address: List[str] + :param nated_ip_address: Comma separated list of IE NATed IP addresses as defined for the type for AssociateId + :type nated_ip_address: List[str] + :param gtp_teid: Comma separated list of GTP TEID addresses as defined for the type for AssociateId + :type gtp_teid: List[str] + :param cell_id: Comma separated list of E-UTRAN Cell Identities + :type cell_id: List[str] + :param erab_id: Comma separated list of E-RAB identifiers + :type erab_id: List[int] + + :rtype: S1BearerInfo + """ + return 'do some magic!' + + +def subscription_link_list_subscriptions_get(subscription_type=None): # noqa: E501 + """Retrieve information on subscriptions for notifications + + Queries information on subscriptions for notifications # noqa: E501 + + :param subscription_type: Filter on a specific subscription type. Permitted values: cell_change, rab_est, rab_mod, rab_rel, meas_rep_ue, nr_meas_rep_ue, timing_advance_ue, ca_reconf, s1_bearer. + :type subscription_type: str + + :rtype: SubscriptionLinkList + """ + return 'do some magic!' + + +def subscriptions_delete(subscription_id): # noqa: E501 + """Cancel an existing subscription + + Cancels an existing subscription, identified by its self-referring URI returned on creation (initial POST) # noqa: E501 + + :param subscription_id: Subscription Id, specifically the \"Self-referring URI\" returned in the subscription request + :type subscription_id: str + + :rtype: None + """ + return 'do some magic!' + + +def subscriptions_get(subscription_id): # noqa: E501 + """Retrieve information on current specific subscription + + Queries information about an existing subscription, identified by its self-referring URI returned on creation (initial POST) # noqa: E501 + + :param subscription_id: Subscription Id, specifically the \"Self-referring URI\" returned in the subscription request + :type subscription_id: str + + :rtype: InlineSubscription + """ + return 'do some magic!' + + + +def subscriptions_post(body): # noqa: E501 + + """Create a new subscription + + Creates a new subscription to Radio Network Information notifications # noqa: E501 + + :param body: Subscription to be created + :type body: dict | bytes + + :rtype: InlineSubscription + """ + + logging.info(body) + if connexion.request.is_json: + body = InlineSubscription.from_dict(connexion.request.get_json()) # noqa: E501 + resp = Response(response=json.dumps(body), status=201) + dummy_service = DummyService() + + notification_url = connexion.request.get_json()["callbackReference"] + #dummy_service.async_task(notification_url) + dummy_service.invoke_sth(notification_url) + return resp + + +def subscriptions_put(body, subscription_id): # noqa: E501 + """Modify an existing subscription + + Updates an existing subscription, identified by its self-referring URI returned on creation (initial POST) # noqa: E501 + + :param body: Subscription to be modified + :type body: dict | bytes + :param subscription_id: Subscription Id, specifically the \"Self-referring URI\" returned in the subscription request + :type subscription_id: str + + :rtype: InlineSubscription + """ + if connexion.request.is_json: + body = InlineSubscription.from_dict(connexion.request.get_json()) # noqa: E501 + return 'do some magic!' diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/encoder.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/encoder.py new file mode 100644 index 0000000..61ba472 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/encoder.py @@ -0,0 +1,20 @@ +from connexion.apps.flask_app import FlaskJSONEncoder +import six + +from swagger_server.models.base_model_ import Model + + +class JSONEncoder(FlaskJSONEncoder): + include_nulls = False + + def default(self, o): + if isinstance(o, Model): + dikt = {} + for attr, _ in six.iteritems(o.swagger_types): + value = getattr(o, attr) + if value is None and not self.include_nulls: + continue + attr = o.attribute_map[attr] + dikt[attr] = value + return dikt + return FlaskJSONEncoder.default(self, o) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/__init__.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/__init__.py new file mode 100644 index 0000000..2d7b4cb --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/__init__.py @@ -0,0 +1,95 @@ +# coding: utf-8 + +# flake8: noqa +from __future__ import absolute_import +# import models into model package +from swagger_server.models.associate_id import AssociateId +from swagger_server.models.ca_reconf_notification import CaReconfNotification +from swagger_server.models.ca_reconf_notification_carrier_aggregation_meas_info import CaReconfNotificationCarrierAggregationMeasInfo +from swagger_server.models.ca_reconf_notification_secondary_cell_add import CaReconfNotificationSecondaryCellAdd +from swagger_server.models.ca_reconf_subscription import CaReconfSubscription +from swagger_server.models.ca_reconf_subscription_filter_criteria_assoc import CaReconfSubscriptionFilterCriteriaAssoc +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks +from swagger_server.models.cell_change_notification import CellChangeNotification +from swagger_server.models.cell_change_notification_temp_ue_id import CellChangeNotificationTempUeId +from swagger_server.models.cell_change_subscription import CellChangeSubscription +from swagger_server.models.cell_change_subscription_filter_criteria_assoc_ho import CellChangeSubscriptionFilterCriteriaAssocHo +from swagger_server.models.cell_id import CellId +from swagger_server.models.ecgi import Ecgi +from swagger_server.models.enum import Enum +from swagger_server.models.expiry_notification import ExpiryNotification +from swagger_server.models.expiry_notification_links import ExpiryNotificationLinks +from swagger_server.models.inline_notification import InlineNotification +from swagger_server.models.inline_subscription import InlineSubscription +from swagger_server.models.l2_meas import L2Meas +from swagger_server.models.l2_meas_cell_info import L2MeasCellInfo +from swagger_server.models.l2_meas_cell_ue_info import L2MeasCellUEInfo +from swagger_server.models.link_type import LinkType +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr +from swagger_server.models.meas_rep_ue_notification import MeasRepUeNotification +from swagger_server.models.meas_rep_ue_notification_carrier_aggregation_meas_info import MeasRepUeNotificationCarrierAggregationMeasInfo +from swagger_server.models.meas_rep_ue_notification_eutran_neighbour_cell_meas_info import MeasRepUeNotificationEutranNeighbourCellMeasInfo +from swagger_server.models.meas_rep_ue_notification_new_radio_meas_info import MeasRepUeNotificationNewRadioMeasInfo +from swagger_server.models.meas_rep_ue_notification_new_radio_meas_nei_info import MeasRepUeNotificationNewRadioMeasNeiInfo +from swagger_server.models.meas_rep_ue_notification_nr_bncs import MeasRepUeNotificationNrBNCs +from swagger_server.models.meas_rep_ue_notification_nr_bncs_nr_bn_cell_info import MeasRepUeNotificationNrBNCsNrBNCellInfo +from swagger_server.models.meas_rep_ue_notification_nr_n_cell_info import MeasRepUeNotificationNrNCellInfo +from swagger_server.models.meas_rep_ue_notification_nr_scs import MeasRepUeNotificationNrSCs +from swagger_server.models.meas_rep_ue_notification_nr_scs_nr_s_cell_info import MeasRepUeNotificationNrSCsNrSCellInfo +from swagger_server.models.meas_rep_ue_subscription import MeasRepUeSubscription +from swagger_server.models.meas_rep_ue_subscription_filter_criteria_assoc_tri import MeasRepUeSubscriptionFilterCriteriaAssocTri +from swagger_server.models.meas_ta_notification import MeasTaNotification +from swagger_server.models.meas_ta_subscription import MeasTaSubscription +from swagger_server.models.n_rcgi import NRcgi +from swagger_server.models.nr_cell_id import NrCellId +from swagger_server.models.nr_meas_rep_ue_notification import NrMeasRepUeNotification +from swagger_server.models.nr_meas_rep_ue_notification_eutra_neigh_cell_meas_info import NrMeasRepUeNotificationEutraNeighCellMeasInfo +from swagger_server.models.nr_meas_rep_ue_notification_n_cell import NrMeasRepUeNotificationNCell +from swagger_server.models.nr_meas_rep_ue_notification_nr_neigh_cell_meas_info import NrMeasRepUeNotificationNrNeighCellMeasInfo +from swagger_server.models.nr_meas_rep_ue_notification_s_cell import NrMeasRepUeNotificationSCell +from swagger_server.models.nr_meas_rep_ue_notification_serv_cell_meas_info import NrMeasRepUeNotificationServCellMeasInfo +from swagger_server.models.nr_meas_rep_ue_subscription import NrMeasRepUeSubscription +from swagger_server.models.nr_meas_rep_ue_subscription_filter_criteria_nr_mrs import NrMeasRepUeSubscriptionFilterCriteriaNrMrs +from swagger_server.models.plmn import Plmn +from swagger_server.models.plmn_info import PlmnInfo +from swagger_server.models.problem_details import ProblemDetails +from swagger_server.models.rab_est_notification import RabEstNotification +from swagger_server.models.rab_est_notification_erab_qos_parameters import RabEstNotificationErabQosParameters +from swagger_server.models.rab_est_notification_erab_qos_parameters_qos_information import RabEstNotificationErabQosParametersQosInformation +from swagger_server.models.rab_est_notification_temp_ue_id import RabEstNotificationTempUeId +from swagger_server.models.rab_est_subscription import RabEstSubscription +from swagger_server.models.rab_est_subscription_filter_criteria_qci import RabEstSubscriptionFilterCriteriaQci +from swagger_server.models.rab_info import RabInfo +from swagger_server.models.rab_info_cell_user_info import RabInfoCellUserInfo +from swagger_server.models.rab_info_erab_info import RabInfoErabInfo +from swagger_server.models.rab_info_ue_info import RabInfoUeInfo +from swagger_server.models.rab_mod_notification import RabModNotification +from swagger_server.models.rab_mod_notification_erab_qos_parameters import RabModNotificationErabQosParameters +from swagger_server.models.rab_mod_notification_erab_qos_parameters_qos_information import RabModNotificationErabQosParametersQosInformation +from swagger_server.models.rab_mod_subscription import RabModSubscription +from swagger_server.models.rab_mod_subscription_filter_criteria_qci import RabModSubscriptionFilterCriteriaQci +from swagger_server.models.rab_rel_notification import RabRelNotification +from swagger_server.models.rab_rel_notification_erab_release_info import RabRelNotificationErabReleaseInfo +from swagger_server.models.rab_rel_subscription import RabRelSubscription +from swagger_server.models.results_per_csi_rs_index import ResultsPerCsiRsIndex +from swagger_server.models.results_per_csi_rs_index_list import ResultsPerCsiRsIndexList +from swagger_server.models.results_per_csi_rs_index_list_results_per_csi_rs_index import ResultsPerCsiRsIndexListResultsPerCsiRsIndex +from swagger_server.models.results_per_ssb_index import ResultsPerSsbIndex +from swagger_server.models.results_per_ssb_index_list import ResultsPerSsbIndexList +from swagger_server.models.results_per_ssb_index_list_results_per_ssb_index import ResultsPerSsbIndexListResultsPerSsbIndex +from swagger_server.models.rs_index_results import RsIndexResults +from swagger_server.models.s1_bearer_info import S1BearerInfo +from swagger_server.models.s1_bearer_info_enb_info import S1BearerInfoEnbInfo +from swagger_server.models.s1_bearer_info_s1_bearer_info_detailed import S1BearerInfoS1BearerInfoDetailed +from swagger_server.models.s1_bearer_info_s1_ue_info import S1BearerInfoS1UeInfo +from swagger_server.models.s1_bearer_info_sgw_info import S1BearerInfoSGwInfo +from swagger_server.models.s1_bearer_notification import S1BearerNotification +from swagger_server.models.s1_bearer_notification_s1_ue_info import S1BearerNotificationS1UeInfo +from swagger_server.models.s1_bearer_subscription import S1BearerSubscription +from swagger_server.models.s1_bearer_subscription_s1_bearer_subscription_criteria import S1BearerSubscriptionS1BearerSubscriptionCriteria +from swagger_server.models.subscription_link_list import SubscriptionLinkList +from swagger_server.models.subscription_link_list_links import SubscriptionLinkListLinks +from swagger_server.models.subscription_link_list_links_subscription import SubscriptionLinkListLinksSubscription +from swagger_server.models.time_stamp import TimeStamp +from swagger_server.models.trigger import Trigger +from swagger_server.models.trigger_nr import TriggerNr diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/associate_id.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/associate_id.py new file mode 100644 index 0000000..6aec007 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/associate_id.py @@ -0,0 +1,98 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class AssociateId(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, type: int=None, value: str=None): # noqa: E501 + """AssociateId - a model defined in Swagger + + :param type: The type of this AssociateId. # noqa: E501 + :type type: int + :param value: The value of this AssociateId. # noqa: E501 + :type value: str + """ + self.swagger_types = { + 'type': int, + 'value': str + } + + self.attribute_map = { + 'type': 'type', + 'value': 'value' + } + self._type = type + self._value = value + + @classmethod + def from_dict(cls, dikt) -> 'AssociateId': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The AssociateId of this AssociateId. # noqa: E501 + :rtype: AssociateId + """ + return util.deserialize_model(dikt, cls) + + @property + def type(self) -> int: + """Gets the type of this AssociateId. + + Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID. # noqa: E501 + + :return: The type of this AssociateId. + :rtype: int + """ + return self._type + + @type.setter + def type(self, type: int): + """Sets the type of this AssociateId. + + Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID. # noqa: E501 + + :param type: The type of this AssociateId. + :type type: int + """ + allowed_values = ["0", "1", "2", "3", "4"] # noqa: E501 + if type not in allowed_values: + raise ValueError( + "Invalid value for `type` ({0}), must be one of {1}" + .format(type, allowed_values) + ) + + self._type = type + + @property + def value(self) -> str: + """Gets the value of this AssociateId. + + Value for the identifier. # noqa: E501 + + :return: The value of this AssociateId. + :rtype: str + """ + return self._value + + @value.setter + def value(self, value: str): + """Sets the value of this AssociateId. + + Value for the identifier. # noqa: E501 + + :param value: The value of this AssociateId. + :type value: str + """ + + self._value = value diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/base_model_.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/base_model_.py new file mode 100644 index 0000000..97999c3 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/base_model_.py @@ -0,0 +1,69 @@ +import pprint + +import six +import typing + +from swagger_server import util + +T = typing.TypeVar('T') + + +class Model(object): + # swaggerTypes: The key is attribute name and the + # value is attribute type. + swagger_types = {} + + # attributeMap: The key is attribute name and the + # value is json key in definition. + attribute_map = {} + + @classmethod + def from_dict(cls: typing.Type[T], dikt) -> T: + """Returns the dict as a model""" + return util.deserialize_model(dikt, cls) + + def to_dict(self): + """Returns the model properties as a dict + + :rtype: dict + """ + result = {} + + for attr, _ in six.iteritems(self.swagger_types): + value = getattr(self, attr) + if isinstance(value, list): + result[attr] = list(map( + lambda x: x.to_dict() if hasattr(x, "to_dict") else x, + value + )) + elif hasattr(value, "to_dict"): + result[attr] = value.to_dict() + elif isinstance(value, dict): + result[attr] = dict(map( + lambda item: (item[0], item[1].to_dict()) + if hasattr(item[1], "to_dict") else item, + value.items() + )) + else: + result[attr] = value + + return result + + def to_str(self): + """Returns the string representation of the model + + :rtype: str + """ + return pprint.pformat(self.to_dict()) + + def __repr__(self): + """For `print` and `pprint`""" + return self.to_str() + + def __eq__(self, other): + """Returns true if both objects are equal""" + return self.__dict__ == other.__dict__ + + def __ne__(self, other): + """Returns true if both objects are not equal""" + return not self == other diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification.py new file mode 100644 index 0000000..aff8b59 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification.py @@ -0,0 +1,233 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ca_reconf_notification_carrier_aggregation_meas_info import CaReconfNotificationCarrierAggregationMeasInfo # noqa: F401,E501 +from swagger_server.models.ca_reconf_notification_secondary_cell_add import CaReconfNotificationSecondaryCellAdd # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class CaReconfNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, carrier_aggregation_meas_info: List[CaReconfNotificationCarrierAggregationMeasInfo]=None, ecgi: Ecgi=None, notification_type: str=None, secondary_cell_add: List[CaReconfNotificationSecondaryCellAdd]=None, secondary_cell_remove: List[CaReconfNotificationSecondaryCellAdd]=None, time_stamp: TimeStamp=None): # noqa: E501 + """CaReconfNotification - a model defined in Swagger + + :param associate_id: The associate_id of this CaReconfNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param carrier_aggregation_meas_info: The carrier_aggregation_meas_info of this CaReconfNotification. # noqa: E501 + :type carrier_aggregation_meas_info: List[CaReconfNotificationCarrierAggregationMeasInfo] + :param ecgi: The ecgi of this CaReconfNotification. # noqa: E501 + :type ecgi: Ecgi + :param notification_type: The notification_type of this CaReconfNotification. # noqa: E501 + :type notification_type: str + :param secondary_cell_add: The secondary_cell_add of this CaReconfNotification. # noqa: E501 + :type secondary_cell_add: List[CaReconfNotificationSecondaryCellAdd] + :param secondary_cell_remove: The secondary_cell_remove of this CaReconfNotification. # noqa: E501 + :type secondary_cell_remove: List[CaReconfNotificationSecondaryCellAdd] + :param time_stamp: The time_stamp of this CaReconfNotification. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'carrier_aggregation_meas_info': List[CaReconfNotificationCarrierAggregationMeasInfo], + 'ecgi': Ecgi, + 'notification_type': str, + 'secondary_cell_add': List[CaReconfNotificationSecondaryCellAdd], + 'secondary_cell_remove': List[CaReconfNotificationSecondaryCellAdd], + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'carrier_aggregation_meas_info': 'carrierAggregationMeasInfo', + 'ecgi': 'ecgi', + 'notification_type': 'notificationType', + 'secondary_cell_add': 'secondaryCellAdd', + 'secondary_cell_remove': 'secondaryCellRemove', + 'time_stamp': 'timeStamp' + } + self._associate_id = associate_id + self._carrier_aggregation_meas_info = carrier_aggregation_meas_info + self._ecgi = ecgi + self._notification_type = notification_type + self._secondary_cell_add = secondary_cell_add + self._secondary_cell_remove = secondary_cell_remove + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'CaReconfNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CaReconfNotification of this CaReconfNotification. # noqa: E501 + :rtype: CaReconfNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this CaReconfNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this CaReconfNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this CaReconfNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this CaReconfNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def carrier_aggregation_meas_info(self) -> List[CaReconfNotificationCarrierAggregationMeasInfo]: + """Gets the carrier_aggregation_meas_info of this CaReconfNotification. + + This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation up to M. # noqa: E501 + + :return: The carrier_aggregation_meas_info of this CaReconfNotification. + :rtype: List[CaReconfNotificationCarrierAggregationMeasInfo] + """ + return self._carrier_aggregation_meas_info + + @carrier_aggregation_meas_info.setter + def carrier_aggregation_meas_info(self, carrier_aggregation_meas_info: List[CaReconfNotificationCarrierAggregationMeasInfo]): + """Sets the carrier_aggregation_meas_info of this CaReconfNotification. + + This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation up to M. # noqa: E501 + + :param carrier_aggregation_meas_info: The carrier_aggregation_meas_info of this CaReconfNotification. + :type carrier_aggregation_meas_info: List[CaReconfNotificationCarrierAggregationMeasInfo] + """ + + self._carrier_aggregation_meas_info = carrier_aggregation_meas_info + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this CaReconfNotification. + + + :return: The ecgi of this CaReconfNotification. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this CaReconfNotification. + + + :param ecgi: The ecgi of this CaReconfNotification. + :type ecgi: Ecgi + """ + if ecgi is None: + raise ValueError("Invalid value for `ecgi`, must not be `None`") # noqa: E501 + + self._ecgi = ecgi + + @property + def notification_type(self) -> str: + """Gets the notification_type of this CaReconfNotification. + + Shall be set to \"CaReConfNotification\". # noqa: E501 + + :return: The notification_type of this CaReconfNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this CaReconfNotification. + + Shall be set to \"CaReConfNotification\". # noqa: E501 + + :param notification_type: The notification_type of this CaReconfNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def secondary_cell_add(self) -> List[CaReconfNotificationSecondaryCellAdd]: + """Gets the secondary_cell_add of this CaReconfNotification. + + + :return: The secondary_cell_add of this CaReconfNotification. + :rtype: List[CaReconfNotificationSecondaryCellAdd] + """ + return self._secondary_cell_add + + @secondary_cell_add.setter + def secondary_cell_add(self, secondary_cell_add: List[CaReconfNotificationSecondaryCellAdd]): + """Sets the secondary_cell_add of this CaReconfNotification. + + + :param secondary_cell_add: The secondary_cell_add of this CaReconfNotification. + :type secondary_cell_add: List[CaReconfNotificationSecondaryCellAdd] + """ + + self._secondary_cell_add = secondary_cell_add + + @property + def secondary_cell_remove(self) -> List[CaReconfNotificationSecondaryCellAdd]: + """Gets the secondary_cell_remove of this CaReconfNotification. + + + :return: The secondary_cell_remove of this CaReconfNotification. + :rtype: List[CaReconfNotificationSecondaryCellAdd] + """ + return self._secondary_cell_remove + + @secondary_cell_remove.setter + def secondary_cell_remove(self, secondary_cell_remove: List[CaReconfNotificationSecondaryCellAdd]): + """Sets the secondary_cell_remove of this CaReconfNotification. + + + :param secondary_cell_remove: The secondary_cell_remove of this CaReconfNotification. + :type secondary_cell_remove: List[CaReconfNotificationSecondaryCellAdd] + """ + + self._secondary_cell_remove = secondary_cell_remove + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this CaReconfNotification. + + + :return: The time_stamp of this CaReconfNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this CaReconfNotification. + + + :param time_stamp: The time_stamp of this CaReconfNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_carrier_aggregation_meas_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_carrier_aggregation_meas_info.py new file mode 100644 index 0000000..df16785 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_carrier_aggregation_meas_info.py @@ -0,0 +1,201 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.cell_id import CellId # noqa: F401,E501 +from swagger_server import util + + +class CaReconfNotificationCarrierAggregationMeasInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, cell_id_nei: CellId=None, cell_id_srv: CellId=None, rsrp_nei: int=None, rsrp_srv: int=None, rsrq_nei: int=None, rsrq_srv: int=None): # noqa: E501 + """CaReconfNotificationCarrierAggregationMeasInfo - a model defined in Swagger + + :param cell_id_nei: The cell_id_nei of this CaReconfNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type cell_id_nei: CellId + :param cell_id_srv: The cell_id_srv of this CaReconfNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type cell_id_srv: CellId + :param rsrp_nei: The rsrp_nei of this CaReconfNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrp_nei: int + :param rsrp_srv: The rsrp_srv of this CaReconfNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrp_srv: int + :param rsrq_nei: The rsrq_nei of this CaReconfNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrq_nei: int + :param rsrq_srv: The rsrq_srv of this CaReconfNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrq_srv: int + """ + self.swagger_types = { + 'cell_id_nei': CellId, + 'cell_id_srv': CellId, + 'rsrp_nei': int, + 'rsrp_srv': int, + 'rsrq_nei': int, + 'rsrq_srv': int + } + + self.attribute_map = { + 'cell_id_nei': 'cellIdNei', + 'cell_id_srv': 'cellIdSrv', + 'rsrp_nei': 'rsrpNei', + 'rsrp_srv': 'rsrpSrv', + 'rsrq_nei': 'rsrqNei', + 'rsrq_srv': 'rsrqSrv' + } + self._cell_id_nei = cell_id_nei + self._cell_id_srv = cell_id_srv + self._rsrp_nei = rsrp_nei + self._rsrp_srv = rsrp_srv + self._rsrq_nei = rsrq_nei + self._rsrq_srv = rsrq_srv + + @classmethod + def from_dict(cls, dikt) -> 'CaReconfNotificationCarrierAggregationMeasInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CaReconfNotification_carrierAggregationMeasInfo of this CaReconfNotificationCarrierAggregationMeasInfo. # noqa: E501 + :rtype: CaReconfNotificationCarrierAggregationMeasInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def cell_id_nei(self) -> CellId: + """Gets the cell_id_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + + + :return: The cell_id_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + :rtype: CellId + """ + return self._cell_id_nei + + @cell_id_nei.setter + def cell_id_nei(self, cell_id_nei: CellId): + """Sets the cell_id_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + + + :param cell_id_nei: The cell_id_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + :type cell_id_nei: CellId + """ + + self._cell_id_nei = cell_id_nei + + @property + def cell_id_srv(self) -> CellId: + """Gets the cell_id_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + + + :return: The cell_id_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + :rtype: CellId + """ + return self._cell_id_srv + + @cell_id_srv.setter + def cell_id_srv(self, cell_id_srv: CellId): + """Sets the cell_id_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + + + :param cell_id_srv: The cell_id_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + :type cell_id_srv: CellId + """ + + self._cell_id_srv = cell_id_srv + + @property + def rsrp_nei(self) -> int: + """Gets the rsrp_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrp_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrp_nei + + @rsrp_nei.setter + def rsrp_nei(self, rsrp_nei: int): + """Sets the rsrp_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrp_nei: The rsrp_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + :type rsrp_nei: int + """ + + self._rsrp_nei = rsrp_nei + + @property + def rsrp_srv(self) -> int: + """Gets the rsrp_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrp_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrp_srv + + @rsrp_srv.setter + def rsrp_srv(self, rsrp_srv: int): + """Sets the rsrp_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrp_srv: The rsrp_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + :type rsrp_srv: int + """ + + self._rsrp_srv = rsrp_srv + + @property + def rsrq_nei(self) -> int: + """Gets the rsrq_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrq_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrq_nei + + @rsrq_nei.setter + def rsrq_nei(self, rsrq_nei: int): + """Sets the rsrq_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrq_nei: The rsrq_nei of this CaReconfNotificationCarrierAggregationMeasInfo. + :type rsrq_nei: int + """ + + self._rsrq_nei = rsrq_nei + + @property + def rsrq_srv(self) -> int: + """Gets the rsrq_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrq_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrq_srv + + @rsrq_srv.setter + def rsrq_srv(self, rsrq_srv: int): + """Sets the rsrq_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrq_srv: The rsrq_srv of this CaReconfNotificationCarrierAggregationMeasInfo. + :type rsrq_srv: int + """ + + self._rsrq_srv = rsrq_srv diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_secondary_cell_add.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_secondary_cell_add.py new file mode 100644 index 0000000..4b61a5f --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_notification_secondary_cell_add.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class CaReconfNotificationSecondaryCellAdd(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ecgi: Ecgi=None): # noqa: E501 + """CaReconfNotificationSecondaryCellAdd - a model defined in Swagger + + :param ecgi: The ecgi of this CaReconfNotificationSecondaryCellAdd. # noqa: E501 + :type ecgi: Ecgi + """ + self.swagger_types = { + 'ecgi': Ecgi + } + + self.attribute_map = { + 'ecgi': 'ecgi' + } + self._ecgi = ecgi + + @classmethod + def from_dict(cls, dikt) -> 'CaReconfNotificationSecondaryCellAdd': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CaReconfNotification_secondaryCellAdd of this CaReconfNotificationSecondaryCellAdd. # noqa: E501 + :rtype: CaReconfNotificationSecondaryCellAdd + """ + return util.deserialize_model(dikt, cls) + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this CaReconfNotificationSecondaryCellAdd. + + + :return: The ecgi of this CaReconfNotificationSecondaryCellAdd. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this CaReconfNotificationSecondaryCellAdd. + + + :param ecgi: The ecgi of this CaReconfNotificationSecondaryCellAdd. + :type ecgi: Ecgi + """ + + self._ecgi = ecgi diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription.py new file mode 100644 index 0000000..f65e7a3 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_filter_criteria_assoc import CaReconfSubscriptionFilterCriteriaAssoc # noqa: F401,E501 +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class CaReconfSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc=None, subscription_type: str=None): # noqa: E501 + """CaReconfSubscription - a model defined in Swagger + + :param links: The links of this CaReconfSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this CaReconfSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this CaReconfSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_assoc: The filter_criteria_assoc of this CaReconfSubscription. # noqa: E501 + :type filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc + :param subscription_type: The subscription_type of this CaReconfSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_assoc': CaReconfSubscriptionFilterCriteriaAssoc, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_assoc': 'filterCriteriaAssoc', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_assoc = filter_criteria_assoc + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'CaReconfSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CaReconfSubscription of this CaReconfSubscription. # noqa: E501 + :rtype: CaReconfSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this CaReconfSubscription. + + + :return: The links of this CaReconfSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this CaReconfSubscription. + + + :param links: The links of this CaReconfSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this CaReconfSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this CaReconfSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this CaReconfSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this CaReconfSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this CaReconfSubscription. + + + :return: The expiry_deadline of this CaReconfSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this CaReconfSubscription. + + + :param expiry_deadline: The expiry_deadline of this CaReconfSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_assoc(self) -> CaReconfSubscriptionFilterCriteriaAssoc: + """Gets the filter_criteria_assoc of this CaReconfSubscription. + + + :return: The filter_criteria_assoc of this CaReconfSubscription. + :rtype: CaReconfSubscriptionFilterCriteriaAssoc + """ + return self._filter_criteria_assoc + + @filter_criteria_assoc.setter + def filter_criteria_assoc(self, filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc): + """Sets the filter_criteria_assoc of this CaReconfSubscription. + + + :param filter_criteria_assoc: The filter_criteria_assoc of this CaReconfSubscription. + :type filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc + """ + if filter_criteria_assoc is None: + raise ValueError("Invalid value for `filter_criteria_assoc`, must not be `None`") # noqa: E501 + + self._filter_criteria_assoc = filter_criteria_assoc + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this CaReconfSubscription. + + Shall be set to \"CaReconfSubscription\". # noqa: E501 + + :return: The subscription_type of this CaReconfSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this CaReconfSubscription. + + Shall be set to \"CaReconfSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this CaReconfSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_filter_criteria_assoc.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_filter_criteria_assoc.py new file mode 100644 index 0000000..28d133c --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_filter_criteria_assoc.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class CaReconfSubscriptionFilterCriteriaAssoc(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, associate_id: List[AssociateId]=None, ecgi: List[Ecgi]=None): # noqa: E501 + """CaReconfSubscriptionFilterCriteriaAssoc - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this CaReconfSubscriptionFilterCriteriaAssoc. # noqa: E501 + :type app_instance_id: str + :param associate_id: The associate_id of this CaReconfSubscriptionFilterCriteriaAssoc. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this CaReconfSubscriptionFilterCriteriaAssoc. # noqa: E501 + :type ecgi: List[Ecgi] + """ + self.swagger_types = { + 'app_instance_id': str, + 'associate_id': List[AssociateId], + 'ecgi': List[Ecgi] + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'associate_id': 'associateId', + 'ecgi': 'ecgi' + } + self._app_instance_id = app_instance_id + self._associate_id = associate_id + self._ecgi = ecgi + + @classmethod + def from_dict(cls, dikt) -> 'CaReconfSubscriptionFilterCriteriaAssoc': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CaReconfSubscription_filterCriteriaAssoc of this CaReconfSubscriptionFilterCriteriaAssoc. # noqa: E501 + :rtype: CaReconfSubscriptionFilterCriteriaAssoc + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this CaReconfSubscriptionFilterCriteriaAssoc. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this CaReconfSubscriptionFilterCriteriaAssoc. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this CaReconfSubscriptionFilterCriteriaAssoc. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this CaReconfSubscriptionFilterCriteriaAssoc. + :type app_instance_id: str + """ + + self._app_instance_id = app_instance_id + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this CaReconfSubscriptionFilterCriteriaAssoc. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this CaReconfSubscriptionFilterCriteriaAssoc. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this CaReconfSubscriptionFilterCriteriaAssoc. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this CaReconfSubscriptionFilterCriteriaAssoc. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this CaReconfSubscriptionFilterCriteriaAssoc. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this CaReconfSubscriptionFilterCriteriaAssoc. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this CaReconfSubscriptionFilterCriteriaAssoc. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this CaReconfSubscriptionFilterCriteriaAssoc. + :type ecgi: List[Ecgi] + """ + + self._ecgi = ecgi diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_links.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_links.py new file mode 100644 index 0000000..b1f665b --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ca_reconf_subscription_links.py @@ -0,0 +1,65 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.link_type import LinkType # noqa: F401,E501 +from swagger_server import util + + +class CaReconfSubscriptionLinks(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, _self: LinkType=None): # noqa: E501 + """CaReconfSubscriptionLinks - a model defined in Swagger + + :param _self: The _self of this CaReconfSubscriptionLinks. # noqa: E501 + :type _self: LinkType + """ + self.swagger_types = { + '_self': LinkType + } + + self.attribute_map = { + '_self': 'self' + } + self.__self = _self + + @classmethod + def from_dict(cls, dikt) -> 'CaReconfSubscriptionLinks': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CaReconfSubscription__links of this CaReconfSubscriptionLinks. # noqa: E501 + :rtype: CaReconfSubscriptionLinks + """ + return util.deserialize_model(dikt, cls) + + @property + def _self(self) -> LinkType: + """Gets the _self of this CaReconfSubscriptionLinks. + + + :return: The _self of this CaReconfSubscriptionLinks. + :rtype: LinkType + """ + return self.__self + + @_self.setter + def _self(self, _self: LinkType): + """Sets the _self of this CaReconfSubscriptionLinks. + + + :param _self: The _self of this CaReconfSubscriptionLinks. + :type _self: LinkType + """ + if _self is None: + raise ValueError("Invalid value for `_self`, must not be `None`") # noqa: E501 + + self.__self = _self diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification.py new file mode 100644 index 0000000..584356c --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification.py @@ -0,0 +1,242 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.cell_change_notification_temp_ue_id import CellChangeNotificationTempUeId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class CellChangeNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ho_status: int=None, notification_type: str=None, src_ecgi: Ecgi=None, temp_ue_id: CellChangeNotificationTempUeId=None, time_stamp: TimeStamp=None, trg_ecgi: List[Ecgi]=None): # noqa: E501 + """CellChangeNotification - a model defined in Swagger + + :param associate_id: The associate_id of this CellChangeNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param ho_status: The ho_status of this CellChangeNotification. # noqa: E501 + :type ho_status: int + :param notification_type: The notification_type of this CellChangeNotification. # noqa: E501 + :type notification_type: str + :param src_ecgi: The src_ecgi of this CellChangeNotification. # noqa: E501 + :type src_ecgi: Ecgi + :param temp_ue_id: The temp_ue_id of this CellChangeNotification. # noqa: E501 + :type temp_ue_id: CellChangeNotificationTempUeId + :param time_stamp: The time_stamp of this CellChangeNotification. # noqa: E501 + :type time_stamp: TimeStamp + :param trg_ecgi: The trg_ecgi of this CellChangeNotification. # noqa: E501 + :type trg_ecgi: List[Ecgi] + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ho_status': int, + 'notification_type': str, + 'src_ecgi': Ecgi, + 'temp_ue_id': CellChangeNotificationTempUeId, + 'time_stamp': TimeStamp, + 'trg_ecgi': List[Ecgi] + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ho_status': 'hoStatus', + 'notification_type': 'notificationType', + 'src_ecgi': 'srcEcgi', + 'temp_ue_id': 'tempUeId', + 'time_stamp': 'timeStamp', + 'trg_ecgi': 'trgEcgi' + } + self._associate_id = associate_id + self._ho_status = ho_status + self._notification_type = notification_type + self._src_ecgi = src_ecgi + self._temp_ue_id = temp_ue_id + self._time_stamp = time_stamp + self._trg_ecgi = trg_ecgi + + @classmethod + def from_dict(cls, dikt) -> 'CellChangeNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CellChangeNotification of this CellChangeNotification. # noqa: E501 + :rtype: CellChangeNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this CellChangeNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this CellChangeNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this CellChangeNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this CellChangeNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ho_status(self) -> int: + """Gets the ho_status of this CellChangeNotification. + + Indicate the status of the UE handover procedure. Values are defined as following: <p>1 = IN_PREPARATION. <p>2 = IN_EXECUTION. <p>3 = COMPLETED. <p>4 = REJECTED. <p>5 = CANCELLED. # noqa: E501 + + :return: The ho_status of this CellChangeNotification. + :rtype: int + """ + return self._ho_status + + @ho_status.setter + def ho_status(self, ho_status: int): + """Sets the ho_status of this CellChangeNotification. + + Indicate the status of the UE handover procedure. Values are defined as following: <p>1 = IN_PREPARATION. <p>2 = IN_EXECUTION. <p>3 = COMPLETED. <p>4 = REJECTED. <p>5 = CANCELLED. # noqa: E501 + + :param ho_status: The ho_status of this CellChangeNotification. + :type ho_status: int + """ + allowed_values = ["1", "2", "3", "4", "5"] # noqa: E501 + if ho_status not in allowed_values: + raise ValueError( + "Invalid value for `ho_status` ({0}), must be one of {1}" + .format(ho_status, allowed_values) + ) + + self._ho_status = ho_status + + @property + def notification_type(self) -> str: + """Gets the notification_type of this CellChangeNotification. + + Shall be set to \"CellChangeNotification\". # noqa: E501 + + :return: The notification_type of this CellChangeNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this CellChangeNotification. + + Shall be set to \"CellChangeNotification\". # noqa: E501 + + :param notification_type: The notification_type of this CellChangeNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def src_ecgi(self) -> Ecgi: + """Gets the src_ecgi of this CellChangeNotification. + + + :return: The src_ecgi of this CellChangeNotification. + :rtype: Ecgi + """ + return self._src_ecgi + + @src_ecgi.setter + def src_ecgi(self, src_ecgi: Ecgi): + """Sets the src_ecgi of this CellChangeNotification. + + + :param src_ecgi: The src_ecgi of this CellChangeNotification. + :type src_ecgi: Ecgi + """ + if src_ecgi is None: + raise ValueError("Invalid value for `src_ecgi`, must not be `None`") # noqa: E501 + + self._src_ecgi = src_ecgi + + @property + def temp_ue_id(self) -> CellChangeNotificationTempUeId: + """Gets the temp_ue_id of this CellChangeNotification. + + + :return: The temp_ue_id of this CellChangeNotification. + :rtype: CellChangeNotificationTempUeId + """ + return self._temp_ue_id + + @temp_ue_id.setter + def temp_ue_id(self, temp_ue_id: CellChangeNotificationTempUeId): + """Sets the temp_ue_id of this CellChangeNotification. + + + :param temp_ue_id: The temp_ue_id of this CellChangeNotification. + :type temp_ue_id: CellChangeNotificationTempUeId + """ + + self._temp_ue_id = temp_ue_id + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this CellChangeNotification. + + + :return: The time_stamp of this CellChangeNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this CellChangeNotification. + + + :param time_stamp: The time_stamp of this CellChangeNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp + + @property + def trg_ecgi(self) -> List[Ecgi]: + """Gets the trg_ecgi of this CellChangeNotification. + + E-UTRAN Cell Global Identifier of the target cell. NOTE: Cardinality N is valid only in case of statuses IN_PREPARATION, REJECTED and CANCELLED. # noqa: E501 + + :return: The trg_ecgi of this CellChangeNotification. + :rtype: List[Ecgi] + """ + return self._trg_ecgi + + @trg_ecgi.setter + def trg_ecgi(self, trg_ecgi: List[Ecgi]): + """Sets the trg_ecgi of this CellChangeNotification. + + E-UTRAN Cell Global Identifier of the target cell. NOTE: Cardinality N is valid only in case of statuses IN_PREPARATION, REJECTED and CANCELLED. # noqa: E501 + + :param trg_ecgi: The trg_ecgi of this CellChangeNotification. + :type trg_ecgi: List[Ecgi] + """ + if trg_ecgi is None: + raise ValueError("Invalid value for `trg_ecgi`, must not be `None`") # noqa: E501 + + self._trg_ecgi = trg_ecgi diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification_temp_ue_id.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification_temp_ue_id.py new file mode 100644 index 0000000..df6be17 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_notification_temp_ue_id.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class CellChangeNotificationTempUeId(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, mmec: str=None, mtmsi: str=None): # noqa: E501 + """CellChangeNotificationTempUeId - a model defined in Swagger + + :param mmec: The mmec of this CellChangeNotificationTempUeId. # noqa: E501 + :type mmec: str + :param mtmsi: The mtmsi of this CellChangeNotificationTempUeId. # noqa: E501 + :type mtmsi: str + """ + self.swagger_types = { + 'mmec': str, + 'mtmsi': str + } + + self.attribute_map = { + 'mmec': 'mmec', + 'mtmsi': 'mtmsi' + } + self._mmec = mmec + self._mtmsi = mtmsi + + @classmethod + def from_dict(cls, dikt) -> 'CellChangeNotificationTempUeId': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CellChangeNotification_tempUeId of this CellChangeNotificationTempUeId. # noqa: E501 + :rtype: CellChangeNotificationTempUeId + """ + return util.deserialize_model(dikt, cls) + + @property + def mmec(self) -> str: + """Gets the mmec of this CellChangeNotificationTempUeId. + + MMEC as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The mmec of this CellChangeNotificationTempUeId. + :rtype: str + """ + return self._mmec + + @mmec.setter + def mmec(self, mmec: str): + """Sets the mmec of this CellChangeNotificationTempUeId. + + MMEC as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param mmec: The mmec of this CellChangeNotificationTempUeId. + :type mmec: str + """ + if mmec is None: + raise ValueError("Invalid value for `mmec`, must not be `None`") # noqa: E501 + + self._mmec = mmec + + @property + def mtmsi(self) -> str: + """Gets the mtmsi of this CellChangeNotificationTempUeId. + + M-TMSI as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The mtmsi of this CellChangeNotificationTempUeId. + :rtype: str + """ + return self._mtmsi + + @mtmsi.setter + def mtmsi(self, mtmsi: str): + """Sets the mtmsi of this CellChangeNotificationTempUeId. + + M-TMSI as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param mtmsi: The mtmsi of this CellChangeNotificationTempUeId. + :type mtmsi: str + """ + if mtmsi is None: + raise ValueError("Invalid value for `mtmsi`, must not be `None`") # noqa: E501 + + self._mtmsi = mtmsi diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription.py new file mode 100644 index 0000000..a34c2c9 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.cell_change_subscription_filter_criteria_assoc_ho import CellChangeSubscriptionFilterCriteriaAssocHo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class CellChangeSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_assoc_ho: CellChangeSubscriptionFilterCriteriaAssocHo=None, subscription_type: str=None): # noqa: E501 + """CellChangeSubscription - a model defined in Swagger + + :param links: The links of this CellChangeSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this CellChangeSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this CellChangeSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_assoc_ho: The filter_criteria_assoc_ho of this CellChangeSubscription. # noqa: E501 + :type filter_criteria_assoc_ho: CellChangeSubscriptionFilterCriteriaAssocHo + :param subscription_type: The subscription_type of this CellChangeSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_assoc_ho': CellChangeSubscriptionFilterCriteriaAssocHo, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_assoc_ho': 'filterCriteriaAssocHo', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_assoc_ho = filter_criteria_assoc_ho + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'CellChangeSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CellChangeSubscription of this CellChangeSubscription. # noqa: E501 + :rtype: CellChangeSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this CellChangeSubscription. + + + :return: The links of this CellChangeSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this CellChangeSubscription. + + + :param links: The links of this CellChangeSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this CellChangeSubscription. + + URI selected by the service consumerto receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this CellChangeSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this CellChangeSubscription. + + URI selected by the service consumerto receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this CellChangeSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this CellChangeSubscription. + + + :return: The expiry_deadline of this CellChangeSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this CellChangeSubscription. + + + :param expiry_deadline: The expiry_deadline of this CellChangeSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_assoc_ho(self) -> CellChangeSubscriptionFilterCriteriaAssocHo: + """Gets the filter_criteria_assoc_ho of this CellChangeSubscription. + + + :return: The filter_criteria_assoc_ho of this CellChangeSubscription. + :rtype: CellChangeSubscriptionFilterCriteriaAssocHo + """ + return self._filter_criteria_assoc_ho + + @filter_criteria_assoc_ho.setter + def filter_criteria_assoc_ho(self, filter_criteria_assoc_ho: CellChangeSubscriptionFilterCriteriaAssocHo): + """Sets the filter_criteria_assoc_ho of this CellChangeSubscription. + + + :param filter_criteria_assoc_ho: The filter_criteria_assoc_ho of this CellChangeSubscription. + :type filter_criteria_assoc_ho: CellChangeSubscriptionFilterCriteriaAssocHo + """ + if filter_criteria_assoc_ho is None: + raise ValueError("Invalid value for `filter_criteria_assoc_ho`, must not be `None`") # noqa: E501 + + self._filter_criteria_assoc_ho = filter_criteria_assoc_ho + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this CellChangeSubscription. + + Shall be set to \"CellChangeSubscription\". # noqa: E501 + + :return: The subscription_type of this CellChangeSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this CellChangeSubscription. + + Shall be set to \"CellChangeSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this CellChangeSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription_filter_criteria_assoc_ho.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription_filter_criteria_assoc_ho.py new file mode 100644 index 0000000..da9a6f8 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_change_subscription_filter_criteria_assoc_ho.py @@ -0,0 +1,151 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.enum import Enum # noqa: F401,E501 +from swagger_server import util + + +class CellChangeSubscriptionFilterCriteriaAssocHo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, associate_id: List[AssociateId]=None, ecgi: List[Ecgi]=None, ho_status: List[Enum]=None): # noqa: E501 + """CellChangeSubscriptionFilterCriteriaAssocHo - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this CellChangeSubscriptionFilterCriteriaAssocHo. # noqa: E501 + :type app_instance_id: str + :param associate_id: The associate_id of this CellChangeSubscriptionFilterCriteriaAssocHo. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this CellChangeSubscriptionFilterCriteriaAssocHo. # noqa: E501 + :type ecgi: List[Ecgi] + :param ho_status: The ho_status of this CellChangeSubscriptionFilterCriteriaAssocHo. # noqa: E501 + :type ho_status: List[Enum] + """ + self.swagger_types = { + 'app_instance_id': str, + 'associate_id': List[AssociateId], + 'ecgi': List[Ecgi], + 'ho_status': List[Enum] + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 'ho_status': 'hoStatus' + } + self._app_instance_id = app_instance_id + self._associate_id = associate_id + self._ecgi = ecgi + self._ho_status = ho_status + + @classmethod + def from_dict(cls, dikt) -> 'CellChangeSubscriptionFilterCriteriaAssocHo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CellChangeSubscription_filterCriteriaAssocHo of this CellChangeSubscriptionFilterCriteriaAssocHo. # noqa: E501 + :rtype: CellChangeSubscriptionFilterCriteriaAssocHo + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + :type app_instance_id: str + """ + + self._app_instance_id = app_instance_id + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this CellChangeSubscriptionFilterCriteriaAssocHo. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this CellChangeSubscriptionFilterCriteriaAssocHo. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this CellChangeSubscriptionFilterCriteriaAssocHo. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this CellChangeSubscriptionFilterCriteriaAssocHo. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this CellChangeSubscriptionFilterCriteriaAssocHo. + :type ecgi: List[Ecgi] + """ + + self._ecgi = ecgi + + @property + def ho_status(self) -> List[Enum]: + """Gets the ho_status of this CellChangeSubscriptionFilterCriteriaAssocHo. + + In case hoStatus is not included in the subscription request, the default value 3 = COMPLETED shall be used and included in the response: <p>1 = IN_PREPARATION. <p>2 = IN_EXECUTION. <p>3 = COMPLETED. <p>4 = REJECTED. <p>5 = CANCELLED. # noqa: E501 + + :return: The ho_status of this CellChangeSubscriptionFilterCriteriaAssocHo. + :rtype: List[Enum] + """ + return self._ho_status + + @ho_status.setter + def ho_status(self, ho_status: List[Enum]): + """Sets the ho_status of this CellChangeSubscriptionFilterCriteriaAssocHo. + + In case hoStatus is not included in the subscription request, the default value 3 = COMPLETED shall be used and included in the response: <p>1 = IN_PREPARATION. <p>2 = IN_EXECUTION. <p>3 = COMPLETED. <p>4 = REJECTED. <p>5 = CANCELLED. # noqa: E501 + + :param ho_status: The ho_status of this CellChangeSubscriptionFilterCriteriaAssocHo. + :type ho_status: List[Enum] + """ + + self._ho_status = ho_status diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_id.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_id.py new file mode 100644 index 0000000..6b11568 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/cell_id.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class CellId(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self): # noqa: E501 + """CellId - a model defined in Swagger + + """ + self.swagger_types = { + } + + self.attribute_map = { + } + + @classmethod + def from_dict(cls, dikt) -> 'CellId': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The CellId of this CellId. # noqa: E501 + :rtype: CellId + """ + return util.deserialize_model(dikt, cls) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ecgi.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ecgi.py new file mode 100644 index 0000000..e8cd95a --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/ecgi.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.cell_id import CellId # noqa: F401,E501 +from swagger_server.models.plmn import Plmn # noqa: F401,E501 +from swagger_server import util + + +class Ecgi(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, cell_id: CellId=None, plmn: Plmn=None): # noqa: E501 + """Ecgi - a model defined in Swagger + + :param cell_id: The cell_id of this Ecgi. # noqa: E501 + :type cell_id: CellId + :param plmn: The plmn of this Ecgi. # noqa: E501 + :type plmn: Plmn + """ + self.swagger_types = { + 'cell_id': CellId, + 'plmn': Plmn + } + + self.attribute_map = { + 'cell_id': 'cellId', + 'plmn': 'plmn' + } + self._cell_id = cell_id + self._plmn = plmn + + @classmethod + def from_dict(cls, dikt) -> 'Ecgi': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The Ecgi of this Ecgi. # noqa: E501 + :rtype: Ecgi + """ + return util.deserialize_model(dikt, cls) + + @property + def cell_id(self) -> CellId: + """Gets the cell_id of this Ecgi. + + + :return: The cell_id of this Ecgi. + :rtype: CellId + """ + return self._cell_id + + @cell_id.setter + def cell_id(self, cell_id: CellId): + """Sets the cell_id of this Ecgi. + + + :param cell_id: The cell_id of this Ecgi. + :type cell_id: CellId + """ + if cell_id is None: + raise ValueError("Invalid value for `cell_id`, must not be `None`") # noqa: E501 + + self._cell_id = cell_id + + @property + def plmn(self) -> Plmn: + """Gets the plmn of this Ecgi. + + + :return: The plmn of this Ecgi. + :rtype: Plmn + """ + return self._plmn + + @plmn.setter + def plmn(self, plmn: Plmn): + """Sets the plmn of this Ecgi. + + + :param plmn: The plmn of this Ecgi. + :type plmn: Plmn + """ + if plmn is None: + raise ValueError("Invalid value for `plmn`, must not be `None`") # noqa: E501 + + self._plmn = plmn diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/enum.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/enum.py new file mode 100644 index 0000000..cc1d21d --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/enum.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class Enum(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self): # noqa: E501 + """Enum - a model defined in Swagger + + """ + self.swagger_types = { + } + + self.attribute_map = { + } + + @classmethod + def from_dict(cls, dikt) -> 'Enum': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The Enum of this Enum. # noqa: E501 + :rtype: Enum + """ + return util.deserialize_model(dikt, cls) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification.py new file mode 100644 index 0000000..26e084e --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification.py @@ -0,0 +1,120 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.expiry_notification_links import ExpiryNotificationLinks # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class ExpiryNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: ExpiryNotificationLinks=None, expiry_deadline: TimeStamp=None, time_stamp: TimeStamp=None): # noqa: E501 + """ExpiryNotification - a model defined in Swagger + + :param links: The links of this ExpiryNotification. # noqa: E501 + :type links: ExpiryNotificationLinks + :param expiry_deadline: The expiry_deadline of this ExpiryNotification. # noqa: E501 + :type expiry_deadline: TimeStamp + :param time_stamp: The time_stamp of this ExpiryNotification. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'links': ExpiryNotificationLinks, + 'expiry_deadline': TimeStamp, + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'links': '_links', + 'expiry_deadline': 'expiryDeadline', + 'time_stamp': 'timeStamp' + } + self._links = links + self._expiry_deadline = expiry_deadline + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'ExpiryNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ExpiryNotification of this ExpiryNotification. # noqa: E501 + :rtype: ExpiryNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> ExpiryNotificationLinks: + """Gets the links of this ExpiryNotification. + + + :return: The links of this ExpiryNotification. + :rtype: ExpiryNotificationLinks + """ + return self._links + + @links.setter + def links(self, links: ExpiryNotificationLinks): + """Sets the links of this ExpiryNotification. + + + :param links: The links of this ExpiryNotification. + :type links: ExpiryNotificationLinks + """ + if links is None: + raise ValueError("Invalid value for `links`, must not be `None`") # noqa: E501 + + self._links = links + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this ExpiryNotification. + + + :return: The expiry_deadline of this ExpiryNotification. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this ExpiryNotification. + + + :param expiry_deadline: The expiry_deadline of this ExpiryNotification. + :type expiry_deadline: TimeStamp + """ + if expiry_deadline is None: + raise ValueError("Invalid value for `expiry_deadline`, must not be `None`") # noqa: E501 + + self._expiry_deadline = expiry_deadline + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this ExpiryNotification. + + + :return: The time_stamp of this ExpiryNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this ExpiryNotification. + + + :param time_stamp: The time_stamp of this ExpiryNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification_links.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification_links.py new file mode 100644 index 0000000..b918c6a --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/expiry_notification_links.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class ExpiryNotificationLinks(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, _self: str=None): # noqa: E501 + """ExpiryNotificationLinks - a model defined in Swagger + + :param _self: The _self of this ExpiryNotificationLinks. # noqa: E501 + :type _self: str + """ + self.swagger_types = { + '_self': str + } + + self.attribute_map = { + '_self': 'self' + } + self.__self = _self + + @classmethod + def from_dict(cls, dikt) -> 'ExpiryNotificationLinks': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ExpiryNotification__links of this ExpiryNotificationLinks. # noqa: E501 + :rtype: ExpiryNotificationLinks + """ + return util.deserialize_model(dikt, cls) + + @property + def _self(self) -> str: + """Gets the _self of this ExpiryNotificationLinks. + + Self referring URI. This shall be included in the response from the RNIS. The URI shall be unique within the RNI API as it acts as an ID for the subscription. # noqa: E501 + + :return: The _self of this ExpiryNotificationLinks. + :rtype: str + """ + return self.__self + + @_self.setter + def _self(self, _self: str): + """Sets the _self of this ExpiryNotificationLinks. + + Self referring URI. This shall be included in the response from the RNIS. The URI shall be unique within the RNI API as it acts as an ID for the subscription. # noqa: E501 + + :param _self: The _self of this ExpiryNotificationLinks. + :type _self: str + """ + if _self is None: + raise ValueError("Invalid value for `_self`, must not be `None`") # noqa: E501 + + self.__self = _self diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_notification.py new file mode 100644 index 0000000..a242006 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_notification.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class InlineNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self): # noqa: E501 + """InlineNotification - a model defined in Swagger + + """ + self.swagger_types = { + } + + self.attribute_map = { + } + + @classmethod + def from_dict(cls, dikt) -> 'InlineNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The InlineNotification of this InlineNotification. # noqa: E501 + :rtype: InlineNotification + """ + return util.deserialize_model(dikt, cls) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_subscription.py new file mode 100644 index 0000000..b590bba --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/inline_subscription.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class InlineSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self): # noqa: E501 + """InlineSubscription - a model defined in Swagger + + """ + self.swagger_types = { + } + + self.attribute_map = { + } + + @classmethod + def from_dict(cls, dikt) -> 'InlineSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The InlineSubscription of this InlineSubscription. # noqa: E501 + :rtype: InlineSubscription + """ + return util.deserialize_model(dikt, cls) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas.py new file mode 100644 index 0000000..4328d37 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas.py @@ -0,0 +1,121 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.l2_meas_cell_info import L2MeasCellInfo # noqa: F401,E501 +from swagger_server.models.l2_meas_cell_ue_info import L2MeasCellUEInfo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class L2Meas(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, cell_info: List[L2MeasCellInfo]=None, cell_ue_info: List[L2MeasCellUEInfo]=None, time_stamp: TimeStamp=None): # noqa: E501 + """L2Meas - a model defined in Swagger + + :param cell_info: The cell_info of this L2Meas. # noqa: E501 + :type cell_info: List[L2MeasCellInfo] + :param cell_ue_info: The cell_ue_info of this L2Meas. # noqa: E501 + :type cell_ue_info: List[L2MeasCellUEInfo] + :param time_stamp: The time_stamp of this L2Meas. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'cell_info': List[L2MeasCellInfo], + 'cell_ue_info': List[L2MeasCellUEInfo], + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'cell_info': 'cellInfo', + 'cell_ue_info': 'cellUEInfo', + 'time_stamp': 'timeStamp' + } + self._cell_info = cell_info + self._cell_ue_info = cell_ue_info + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'L2Meas': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The L2Meas of this L2Meas. # noqa: E501 + :rtype: L2Meas + """ + return util.deserialize_model(dikt, cls) + + @property + def cell_info(self) -> List[L2MeasCellInfo]: + """Gets the cell_info of this L2Meas. + + The per cell measurement information as defined below. # noqa: E501 + + :return: The cell_info of this L2Meas. + :rtype: List[L2MeasCellInfo] + """ + return self._cell_info + + @cell_info.setter + def cell_info(self, cell_info: List[L2MeasCellInfo]): + """Sets the cell_info of this L2Meas. + + The per cell measurement information as defined below. # noqa: E501 + + :param cell_info: The cell_info of this L2Meas. + :type cell_info: List[L2MeasCellInfo] + """ + + self._cell_info = cell_info + + @property + def cell_ue_info(self) -> List[L2MeasCellUEInfo]: + """Gets the cell_ue_info of this L2Meas. + + The per cell per UE layer 2 measurements information as defined below. # noqa: E501 + + :return: The cell_ue_info of this L2Meas. + :rtype: List[L2MeasCellUEInfo] + """ + return self._cell_ue_info + + @cell_ue_info.setter + def cell_ue_info(self, cell_ue_info: List[L2MeasCellUEInfo]): + """Sets the cell_ue_info of this L2Meas. + + The per cell per UE layer 2 measurements information as defined below. # noqa: E501 + + :param cell_ue_info: The cell_ue_info of this L2Meas. + :type cell_ue_info: List[L2MeasCellUEInfo] + """ + + self._cell_ue_info = cell_ue_info + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this L2Meas. + + + :return: The time_stamp of this L2Meas. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this L2Meas. + + + :param time_stamp: The time_stamp of this L2Meas. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_info.py new file mode 100644 index 0000000..57f5133 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_info.py @@ -0,0 +1,539 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class L2MeasCellInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, dl_gbr_pdr_cell: int=None, dl_gbr_prb_usage_cell: int=None, dl_nongbr_pdr_cell: int=None, dl_nongbr_prb_usage_cell: int=None, dl_total_prb_usage_cell: int=None, ecgi: Ecgi=None, number_of_active_ue_dl_gbr_cell: int=None, number_of_active_ue_dl_nongbr_cell: int=None, number_of_active_ue_ul_gbr_cell: int=None, number_of_active_ue_ul_nongbr_cell: int=None, received_dedicated_preambles_cell: int=None, received_randomly_selected_preambles_high_range_cell: int=None, received_randomly_selected_preambles_low_range_cell: int=None, ul_gbr_pdr_cell: int=None, ul_gbr_prb_usage_cell: int=None, ul_nongbr_pdr_cell: int=None, ul_nongbr_prb_usage_cell: int=None, ul_total_prb_usage_cell: int=None): # noqa: E501 + """L2MeasCellInfo - a model defined in Swagger + + :param dl_gbr_pdr_cell: The dl_gbr_pdr_cell of this L2MeasCellInfo. # noqa: E501 + :type dl_gbr_pdr_cell: int + :param dl_gbr_prb_usage_cell: The dl_gbr_prb_usage_cell of this L2MeasCellInfo. # noqa: E501 + :type dl_gbr_prb_usage_cell: int + :param dl_nongbr_pdr_cell: The dl_nongbr_pdr_cell of this L2MeasCellInfo. # noqa: E501 + :type dl_nongbr_pdr_cell: int + :param dl_nongbr_prb_usage_cell: The dl_nongbr_prb_usage_cell of this L2MeasCellInfo. # noqa: E501 + :type dl_nongbr_prb_usage_cell: int + :param dl_total_prb_usage_cell: The dl_total_prb_usage_cell of this L2MeasCellInfo. # noqa: E501 + :type dl_total_prb_usage_cell: int + :param ecgi: The ecgi of this L2MeasCellInfo. # noqa: E501 + :type ecgi: Ecgi + :param number_of_active_ue_dl_gbr_cell: The number_of_active_ue_dl_gbr_cell of this L2MeasCellInfo. # noqa: E501 + :type number_of_active_ue_dl_gbr_cell: int + :param number_of_active_ue_dl_nongbr_cell: The number_of_active_ue_dl_nongbr_cell of this L2MeasCellInfo. # noqa: E501 + :type number_of_active_ue_dl_nongbr_cell: int + :param number_of_active_ue_ul_gbr_cell: The number_of_active_ue_ul_gbr_cell of this L2MeasCellInfo. # noqa: E501 + :type number_of_active_ue_ul_gbr_cell: int + :param number_of_active_ue_ul_nongbr_cell: The number_of_active_ue_ul_nongbr_cell of this L2MeasCellInfo. # noqa: E501 + :type number_of_active_ue_ul_nongbr_cell: int + :param received_dedicated_preambles_cell: The received_dedicated_preambles_cell of this L2MeasCellInfo. # noqa: E501 + :type received_dedicated_preambles_cell: int + :param received_randomly_selected_preambles_high_range_cell: The received_randomly_selected_preambles_high_range_cell of this L2MeasCellInfo. # noqa: E501 + :type received_randomly_selected_preambles_high_range_cell: int + :param received_randomly_selected_preambles_low_range_cell: The received_randomly_selected_preambles_low_range_cell of this L2MeasCellInfo. # noqa: E501 + :type received_randomly_selected_preambles_low_range_cell: int + :param ul_gbr_pdr_cell: The ul_gbr_pdr_cell of this L2MeasCellInfo. # noqa: E501 + :type ul_gbr_pdr_cell: int + :param ul_gbr_prb_usage_cell: The ul_gbr_prb_usage_cell of this L2MeasCellInfo. # noqa: E501 + :type ul_gbr_prb_usage_cell: int + :param ul_nongbr_pdr_cell: The ul_nongbr_pdr_cell of this L2MeasCellInfo. # noqa: E501 + :type ul_nongbr_pdr_cell: int + :param ul_nongbr_prb_usage_cell: The ul_nongbr_prb_usage_cell of this L2MeasCellInfo. # noqa: E501 + :type ul_nongbr_prb_usage_cell: int + :param ul_total_prb_usage_cell: The ul_total_prb_usage_cell of this L2MeasCellInfo. # noqa: E501 + :type ul_total_prb_usage_cell: int + """ + self.swagger_types = { + 'dl_gbr_pdr_cell': int, + 'dl_gbr_prb_usage_cell': int, + 'dl_nongbr_pdr_cell': int, + 'dl_nongbr_prb_usage_cell': int, + 'dl_total_prb_usage_cell': int, + 'ecgi': Ecgi, + 'number_of_active_ue_dl_gbr_cell': int, + 'number_of_active_ue_dl_nongbr_cell': int, + 'number_of_active_ue_ul_gbr_cell': int, + 'number_of_active_ue_ul_nongbr_cell': int, + 'received_dedicated_preambles_cell': int, + 'received_randomly_selected_preambles_high_range_cell': int, + 'received_randomly_selected_preambles_low_range_cell': int, + 'ul_gbr_pdr_cell': int, + 'ul_gbr_prb_usage_cell': int, + 'ul_nongbr_pdr_cell': int, + 'ul_nongbr_prb_usage_cell': int, + 'ul_total_prb_usage_cell': int + } + + self.attribute_map = { + 'dl_gbr_pdr_cell': 'dl_gbr_pdr_cell', + 'dl_gbr_prb_usage_cell': 'dl_gbr_prb_usage_cell', + 'dl_nongbr_pdr_cell': 'dl_nongbr_pdr_cell', + 'dl_nongbr_prb_usage_cell': 'dl_nongbr_prb_usage_cell', + 'dl_total_prb_usage_cell': 'dl_total_prb_usage_cell', + 'ecgi': 'ecgi', + 'number_of_active_ue_dl_gbr_cell': 'number_of_active_ue_dl_gbr_cell', + 'number_of_active_ue_dl_nongbr_cell': 'number_of_active_ue_dl_nongbr_cell', + 'number_of_active_ue_ul_gbr_cell': 'number_of_active_ue_ul_gbr_cell', + 'number_of_active_ue_ul_nongbr_cell': 'number_of_active_ue_ul_nongbr_cell', + 'received_dedicated_preambles_cell': 'received_dedicated_preambles_cell', + 'received_randomly_selected_preambles_high_range_cell': 'received_randomly_selected_preambles_high_range_cell', + 'received_randomly_selected_preambles_low_range_cell': 'received_randomly_selected_preambles_low_range_cell', + 'ul_gbr_pdr_cell': 'ul_gbr_pdr_cell', + 'ul_gbr_prb_usage_cell': 'ul_gbr_prb_usage_cell', + 'ul_nongbr_pdr_cell': 'ul_nongbr_pdr_cell', + 'ul_nongbr_prb_usage_cell': 'ul_nongbr_prb_usage_cell', + 'ul_total_prb_usage_cell': 'ul_total_prb_usage_cell' + } + self._dl_gbr_pdr_cell = dl_gbr_pdr_cell + self._dl_gbr_prb_usage_cell = dl_gbr_prb_usage_cell + self._dl_nongbr_pdr_cell = dl_nongbr_pdr_cell + self._dl_nongbr_prb_usage_cell = dl_nongbr_prb_usage_cell + self._dl_total_prb_usage_cell = dl_total_prb_usage_cell + self._ecgi = ecgi + self._number_of_active_ue_dl_gbr_cell = number_of_active_ue_dl_gbr_cell + self._number_of_active_ue_dl_nongbr_cell = number_of_active_ue_dl_nongbr_cell + self._number_of_active_ue_ul_gbr_cell = number_of_active_ue_ul_gbr_cell + self._number_of_active_ue_ul_nongbr_cell = number_of_active_ue_ul_nongbr_cell + self._received_dedicated_preambles_cell = received_dedicated_preambles_cell + self._received_randomly_selected_preambles_high_range_cell = received_randomly_selected_preambles_high_range_cell + self._received_randomly_selected_preambles_low_range_cell = received_randomly_selected_preambles_low_range_cell + self._ul_gbr_pdr_cell = ul_gbr_pdr_cell + self._ul_gbr_prb_usage_cell = ul_gbr_prb_usage_cell + self._ul_nongbr_pdr_cell = ul_nongbr_pdr_cell + self._ul_nongbr_prb_usage_cell = ul_nongbr_prb_usage_cell + self._ul_total_prb_usage_cell = ul_total_prb_usage_cell + + @classmethod + def from_dict(cls, dikt) -> 'L2MeasCellInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The L2Meas_cellInfo of this L2MeasCellInfo. # noqa: E501 + :rtype: L2MeasCellInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def dl_gbr_pdr_cell(self) -> int: + """Gets the dl_gbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the downlink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_gbr_pdr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._dl_gbr_pdr_cell + + @dl_gbr_pdr_cell.setter + def dl_gbr_pdr_cell(self, dl_gbr_pdr_cell: int): + """Sets the dl_gbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the downlink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_gbr_pdr_cell: The dl_gbr_pdr_cell of this L2MeasCellInfo. + :type dl_gbr_pdr_cell: int + """ + + self._dl_gbr_pdr_cell = dl_gbr_pdr_cell + + @property + def dl_gbr_prb_usage_cell(self) -> int: + """Gets the dl_gbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates the PRB usage for downlink GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :return: The dl_gbr_prb_usage_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._dl_gbr_prb_usage_cell + + @dl_gbr_prb_usage_cell.setter + def dl_gbr_prb_usage_cell(self, dl_gbr_prb_usage_cell: int): + """Sets the dl_gbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates the PRB usage for downlink GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :param dl_gbr_prb_usage_cell: The dl_gbr_prb_usage_cell of this L2MeasCellInfo. + :type dl_gbr_prb_usage_cell: int + """ + + self._dl_gbr_prb_usage_cell = dl_gbr_prb_usage_cell + + @property + def dl_nongbr_pdr_cell(self) -> int: + """Gets the dl_nongbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the downlink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_nongbr_pdr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._dl_nongbr_pdr_cell + + @dl_nongbr_pdr_cell.setter + def dl_nongbr_pdr_cell(self, dl_nongbr_pdr_cell: int): + """Sets the dl_nongbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the downlink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_nongbr_pdr_cell: The dl_nongbr_pdr_cell of this L2MeasCellInfo. + :type dl_nongbr_pdr_cell: int + """ + + self._dl_nongbr_pdr_cell = dl_nongbr_pdr_cell + + @property + def dl_nongbr_prb_usage_cell(self) -> int: + """Gets the dl_nongbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for downlink non-GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :return: The dl_nongbr_prb_usage_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._dl_nongbr_prb_usage_cell + + @dl_nongbr_prb_usage_cell.setter + def dl_nongbr_prb_usage_cell(self, dl_nongbr_prb_usage_cell: int): + """Sets the dl_nongbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for downlink non-GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :param dl_nongbr_prb_usage_cell: The dl_nongbr_prb_usage_cell of this L2MeasCellInfo. + :type dl_nongbr_prb_usage_cell: int + """ + + self._dl_nongbr_prb_usage_cell = dl_nongbr_prb_usage_cell + + @property + def dl_total_prb_usage_cell(self) -> int: + """Gets the dl_total_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for total downlink traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :return: The dl_total_prb_usage_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._dl_total_prb_usage_cell + + @dl_total_prb_usage_cell.setter + def dl_total_prb_usage_cell(self, dl_total_prb_usage_cell: int): + """Sets the dl_total_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for total downlink traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :param dl_total_prb_usage_cell: The dl_total_prb_usage_cell of this L2MeasCellInfo. + :type dl_total_prb_usage_cell: int + """ + + self._dl_total_prb_usage_cell = dl_total_prb_usage_cell + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this L2MeasCellInfo. + + + :return: The ecgi of this L2MeasCellInfo. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this L2MeasCellInfo. + + + :param ecgi: The ecgi of this L2MeasCellInfo. + :type ecgi: Ecgi + """ + + self._ecgi = ecgi + + @property + def number_of_active_ue_dl_gbr_cell(self) -> int: + """Gets the number_of_active_ue_dl_gbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with downlink GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The number_of_active_ue_dl_gbr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._number_of_active_ue_dl_gbr_cell + + @number_of_active_ue_dl_gbr_cell.setter + def number_of_active_ue_dl_gbr_cell(self, number_of_active_ue_dl_gbr_cell: int): + """Sets the number_of_active_ue_dl_gbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with downlink GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param number_of_active_ue_dl_gbr_cell: The number_of_active_ue_dl_gbr_cell of this L2MeasCellInfo. + :type number_of_active_ue_dl_gbr_cell: int + """ + + self._number_of_active_ue_dl_gbr_cell = number_of_active_ue_dl_gbr_cell + + @property + def number_of_active_ue_dl_nongbr_cell(self) -> int: + """Gets the number_of_active_ue_dl_nongbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with downlink non-GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The number_of_active_ue_dl_nongbr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._number_of_active_ue_dl_nongbr_cell + + @number_of_active_ue_dl_nongbr_cell.setter + def number_of_active_ue_dl_nongbr_cell(self, number_of_active_ue_dl_nongbr_cell: int): + """Sets the number_of_active_ue_dl_nongbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with downlink non-GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param number_of_active_ue_dl_nongbr_cell: The number_of_active_ue_dl_nongbr_cell of this L2MeasCellInfo. + :type number_of_active_ue_dl_nongbr_cell: int + """ + + self._number_of_active_ue_dl_nongbr_cell = number_of_active_ue_dl_nongbr_cell + + @property + def number_of_active_ue_ul_gbr_cell(self) -> int: + """Gets the number_of_active_ue_ul_gbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with uplink GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The number_of_active_ue_ul_gbr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._number_of_active_ue_ul_gbr_cell + + @number_of_active_ue_ul_gbr_cell.setter + def number_of_active_ue_ul_gbr_cell(self, number_of_active_ue_ul_gbr_cell: int): + """Sets the number_of_active_ue_ul_gbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with uplink GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param number_of_active_ue_ul_gbr_cell: The number_of_active_ue_ul_gbr_cell of this L2MeasCellInfo. + :type number_of_active_ue_ul_gbr_cell: int + """ + + self._number_of_active_ue_ul_gbr_cell = number_of_active_ue_ul_gbr_cell + + @property + def number_of_active_ue_ul_nongbr_cell(self) -> int: + """Gets the number_of_active_ue_ul_nongbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with uplink non-GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The number_of_active_ue_ul_nongbr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._number_of_active_ue_ul_nongbr_cell + + @number_of_active_ue_ul_nongbr_cell.setter + def number_of_active_ue_ul_nongbr_cell(self, number_of_active_ue_ul_nongbr_cell: int): + """Sets the number_of_active_ue_ul_nongbr_cell of this L2MeasCellInfo. + + It indicates the number of active UEs with uplink non-GBR traffic, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param number_of_active_ue_ul_nongbr_cell: The number_of_active_ue_ul_nongbr_cell of this L2MeasCellInfo. + :type number_of_active_ue_ul_nongbr_cell: int + """ + + self._number_of_active_ue_ul_nongbr_cell = number_of_active_ue_ul_nongbr_cell + + @property + def received_dedicated_preambles_cell(self) -> int: + """Gets the received_dedicated_preambles_cell of this L2MeasCellInfo. + + It indicates (in percentage) the received dedicated preamples, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The received_dedicated_preambles_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._received_dedicated_preambles_cell + + @received_dedicated_preambles_cell.setter + def received_dedicated_preambles_cell(self, received_dedicated_preambles_cell: int): + """Sets the received_dedicated_preambles_cell of this L2MeasCellInfo. + + It indicates (in percentage) the received dedicated preamples, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param received_dedicated_preambles_cell: The received_dedicated_preambles_cell of this L2MeasCellInfo. + :type received_dedicated_preambles_cell: int + """ + + self._received_dedicated_preambles_cell = received_dedicated_preambles_cell + + @property + def received_randomly_selected_preambles_high_range_cell(self) -> int: + """Gets the received_randomly_selected_preambles_high_range_cell of this L2MeasCellInfo. + + It indicates (in percentage) the received randomly selected preambles in the high range, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The received_randomly_selected_preambles_high_range_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._received_randomly_selected_preambles_high_range_cell + + @received_randomly_selected_preambles_high_range_cell.setter + def received_randomly_selected_preambles_high_range_cell(self, received_randomly_selected_preambles_high_range_cell: int): + """Sets the received_randomly_selected_preambles_high_range_cell of this L2MeasCellInfo. + + It indicates (in percentage) the received randomly selected preambles in the high range, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param received_randomly_selected_preambles_high_range_cell: The received_randomly_selected_preambles_high_range_cell of this L2MeasCellInfo. + :type received_randomly_selected_preambles_high_range_cell: int + """ + + self._received_randomly_selected_preambles_high_range_cell = received_randomly_selected_preambles_high_range_cell + + @property + def received_randomly_selected_preambles_low_range_cell(self) -> int: + """Gets the received_randomly_selected_preambles_low_range_cell of this L2MeasCellInfo. + + It indicates (in percentage) the received randomly selected preambles in the low range, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The received_randomly_selected_preambles_low_range_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._received_randomly_selected_preambles_low_range_cell + + @received_randomly_selected_preambles_low_range_cell.setter + def received_randomly_selected_preambles_low_range_cell(self, received_randomly_selected_preambles_low_range_cell: int): + """Sets the received_randomly_selected_preambles_low_range_cell of this L2MeasCellInfo. + + It indicates (in percentage) the received randomly selected preambles in the low range, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param received_randomly_selected_preambles_low_range_cell: The received_randomly_selected_preambles_low_range_cell of this L2MeasCellInfo. + :type received_randomly_selected_preambles_low_range_cell: int + """ + + self._received_randomly_selected_preambles_low_range_cell = received_randomly_selected_preambles_low_range_cell + + @property + def ul_gbr_pdr_cell(self) -> int: + """Gets the ul_gbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the uplink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_gbr_pdr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._ul_gbr_pdr_cell + + @ul_gbr_pdr_cell.setter + def ul_gbr_pdr_cell(self, ul_gbr_pdr_cell: int): + """Sets the ul_gbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the uplink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_gbr_pdr_cell: The ul_gbr_pdr_cell of this L2MeasCellInfo. + :type ul_gbr_pdr_cell: int + """ + + self._ul_gbr_pdr_cell = ul_gbr_pdr_cell + + @property + def ul_gbr_prb_usage_cell(self) -> int: + """Gets the ul_gbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for uplink GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :return: The ul_gbr_prb_usage_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._ul_gbr_prb_usage_cell + + @ul_gbr_prb_usage_cell.setter + def ul_gbr_prb_usage_cell(self, ul_gbr_prb_usage_cell: int): + """Sets the ul_gbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for uplink GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :param ul_gbr_prb_usage_cell: The ul_gbr_prb_usage_cell of this L2MeasCellInfo. + :type ul_gbr_prb_usage_cell: int + """ + + self._ul_gbr_prb_usage_cell = ul_gbr_prb_usage_cell + + @property + def ul_nongbr_pdr_cell(self) -> int: + """Gets the ul_nongbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the uplink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_nongbr_pdr_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._ul_nongbr_pdr_cell + + @ul_nongbr_pdr_cell.setter + def ul_nongbr_pdr_cell(self, ul_nongbr_pdr_cell: int): + """Sets the ul_nongbr_pdr_cell of this L2MeasCellInfo. + + It indicates the packet discard rate in percentage of the uplink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_nongbr_pdr_cell: The ul_nongbr_pdr_cell of this L2MeasCellInfo. + :type ul_nongbr_pdr_cell: int + """ + + self._ul_nongbr_pdr_cell = ul_nongbr_pdr_cell + + @property + def ul_nongbr_prb_usage_cell(self) -> int: + """Gets the ul_nongbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for uplink non-GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :return: The ul_nongbr_prb_usage_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._ul_nongbr_prb_usage_cell + + @ul_nongbr_prb_usage_cell.setter + def ul_nongbr_prb_usage_cell(self, ul_nongbr_prb_usage_cell: int): + """Sets the ul_nongbr_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for uplink non-GBR traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :param ul_nongbr_prb_usage_cell: The ul_nongbr_prb_usage_cell of this L2MeasCellInfo. + :type ul_nongbr_prb_usage_cell: int + """ + + self._ul_nongbr_prb_usage_cell = ul_nongbr_prb_usage_cell + + @property + def ul_total_prb_usage_cell(self) -> int: + """Gets the ul_total_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for total uplink traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :return: The ul_total_prb_usage_cell of this L2MeasCellInfo. + :rtype: int + """ + return self._ul_total_prb_usage_cell + + @ul_total_prb_usage_cell.setter + def ul_total_prb_usage_cell(self, ul_total_prb_usage_cell: int): + """Sets the ul_total_prb_usage_cell of this L2MeasCellInfo. + + It indicates (in percentage) the PRB usage for total uplink traffic, as defined in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]. # noqa: E501 + + :param ul_total_prb_usage_cell: The ul_total_prb_usage_cell of this L2MeasCellInfo. + :type ul_total_prb_usage_cell: int + """ + + self._ul_total_prb_usage_cell = ul_total_prb_usage_cell diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_ue_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_ue_info.py new file mode 100644 index 0000000..9de23b2 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/l2_meas_cell_ue_info.py @@ -0,0 +1,538 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class L2MeasCellUEInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: AssociateId=None, dl_gbr_data_volume_ue: int=None, dl_gbr_delay_ue: int=None, dl_gbr_pdr_ue: int=None, dl_gbr_throughput_ue: int=None, dl_nongbr_data_volume_ue: int=None, dl_nongbr_delay_ue: int=None, dl_nongbr_pdr_ue: int=None, dl_nongbr_throughput_ue: int=None, ecgi: Ecgi=None, ul_gbr_data_volume_ue: int=None, ul_gbr_delay_ue: int=None, ul_gbr_pdr_ue: int=None, ul_gbr_throughput_ue: int=None, ul_nongbr_data_volume_ue: int=None, ul_nongbr_delay_ue: int=None, ul_nongbr_pdr_ue: int=None, ul_nongbr_throughput_ue: int=None): # noqa: E501 + """L2MeasCellUEInfo - a model defined in Swagger + + :param associate_id: The associate_id of this L2MeasCellUEInfo. # noqa: E501 + :type associate_id: AssociateId + :param dl_gbr_data_volume_ue: The dl_gbr_data_volume_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_gbr_data_volume_ue: int + :param dl_gbr_delay_ue: The dl_gbr_delay_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_gbr_delay_ue: int + :param dl_gbr_pdr_ue: The dl_gbr_pdr_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_gbr_pdr_ue: int + :param dl_gbr_throughput_ue: The dl_gbr_throughput_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_gbr_throughput_ue: int + :param dl_nongbr_data_volume_ue: The dl_nongbr_data_volume_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_nongbr_data_volume_ue: int + :param dl_nongbr_delay_ue: The dl_nongbr_delay_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_nongbr_delay_ue: int + :param dl_nongbr_pdr_ue: The dl_nongbr_pdr_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_nongbr_pdr_ue: int + :param dl_nongbr_throughput_ue: The dl_nongbr_throughput_ue of this L2MeasCellUEInfo. # noqa: E501 + :type dl_nongbr_throughput_ue: int + :param ecgi: The ecgi of this L2MeasCellUEInfo. # noqa: E501 + :type ecgi: Ecgi + :param ul_gbr_data_volume_ue: The ul_gbr_data_volume_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_gbr_data_volume_ue: int + :param ul_gbr_delay_ue: The ul_gbr_delay_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_gbr_delay_ue: int + :param ul_gbr_pdr_ue: The ul_gbr_pdr_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_gbr_pdr_ue: int + :param ul_gbr_throughput_ue: The ul_gbr_throughput_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_gbr_throughput_ue: int + :param ul_nongbr_data_volume_ue: The ul_nongbr_data_volume_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_nongbr_data_volume_ue: int + :param ul_nongbr_delay_ue: The ul_nongbr_delay_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_nongbr_delay_ue: int + :param ul_nongbr_pdr_ue: The ul_nongbr_pdr_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_nongbr_pdr_ue: int + :param ul_nongbr_throughput_ue: The ul_nongbr_throughput_ue of this L2MeasCellUEInfo. # noqa: E501 + :type ul_nongbr_throughput_ue: int + """ + self.swagger_types = { + 'associate_id': AssociateId, + 'dl_gbr_data_volume_ue': int, + 'dl_gbr_delay_ue': int, + 'dl_gbr_pdr_ue': int, + 'dl_gbr_throughput_ue': int, + 'dl_nongbr_data_volume_ue': int, + 'dl_nongbr_delay_ue': int, + 'dl_nongbr_pdr_ue': int, + 'dl_nongbr_throughput_ue': int, + 'ecgi': Ecgi, + 'ul_gbr_data_volume_ue': int, + 'ul_gbr_delay_ue': int, + 'ul_gbr_pdr_ue': int, + 'ul_gbr_throughput_ue': int, + 'ul_nongbr_data_volume_ue': int, + 'ul_nongbr_delay_ue': int, + 'ul_nongbr_pdr_ue': int, + 'ul_nongbr_throughput_ue': int + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'dl_gbr_data_volume_ue': 'dl_gbr_data_volume_ue', + 'dl_gbr_delay_ue': 'dl_gbr_delay_ue', + 'dl_gbr_pdr_ue': 'dl_gbr_pdr_ue', + 'dl_gbr_throughput_ue': 'dl_gbr_throughput_ue', + 'dl_nongbr_data_volume_ue': 'dl_nongbr_data_volume_ue', + 'dl_nongbr_delay_ue': 'dl_nongbr_delay_ue', + 'dl_nongbr_pdr_ue': 'dl_nongbr_pdr_ue', + 'dl_nongbr_throughput_ue': 'dl_nongbr_throughput_ue', + 'ecgi': 'ecgi', + 'ul_gbr_data_volume_ue': 'ul_gbr_data_volume_ue', + 'ul_gbr_delay_ue': 'ul_gbr_delay_ue', + 'ul_gbr_pdr_ue': 'ul_gbr_pdr_ue', + 'ul_gbr_throughput_ue': 'ul_gbr_throughput_ue', + 'ul_nongbr_data_volume_ue': 'ul_nongbr_data_volume_ue', + 'ul_nongbr_delay_ue': 'ul_nongbr_delay_ue', + 'ul_nongbr_pdr_ue': 'ul_nongbr_pdr_ue', + 'ul_nongbr_throughput_ue': 'ul_nongbr_throughput_ue' + } + self._associate_id = associate_id + self._dl_gbr_data_volume_ue = dl_gbr_data_volume_ue + self._dl_gbr_delay_ue = dl_gbr_delay_ue + self._dl_gbr_pdr_ue = dl_gbr_pdr_ue + self._dl_gbr_throughput_ue = dl_gbr_throughput_ue + self._dl_nongbr_data_volume_ue = dl_nongbr_data_volume_ue + self._dl_nongbr_delay_ue = dl_nongbr_delay_ue + self._dl_nongbr_pdr_ue = dl_nongbr_pdr_ue + self._dl_nongbr_throughput_ue = dl_nongbr_throughput_ue + self._ecgi = ecgi + self._ul_gbr_data_volume_ue = ul_gbr_data_volume_ue + self._ul_gbr_delay_ue = ul_gbr_delay_ue + self._ul_gbr_pdr_ue = ul_gbr_pdr_ue + self._ul_gbr_throughput_ue = ul_gbr_throughput_ue + self._ul_nongbr_data_volume_ue = ul_nongbr_data_volume_ue + self._ul_nongbr_delay_ue = ul_nongbr_delay_ue + self._ul_nongbr_pdr_ue = ul_nongbr_pdr_ue + self._ul_nongbr_throughput_ue = ul_nongbr_throughput_ue + + @classmethod + def from_dict(cls, dikt) -> 'L2MeasCellUEInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The L2Meas_cellUEInfo of this L2MeasCellUEInfo. # noqa: E501 + :rtype: L2MeasCellUEInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> AssociateId: + """Gets the associate_id of this L2MeasCellUEInfo. + + + :return: The associate_id of this L2MeasCellUEInfo. + :rtype: AssociateId + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: AssociateId): + """Sets the associate_id of this L2MeasCellUEInfo. + + + :param associate_id: The associate_id of this L2MeasCellUEInfo. + :type associate_id: AssociateId + """ + + self._associate_id = associate_id + + @property + def dl_gbr_data_volume_ue(self) -> int: + """Gets the dl_gbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_gbr_data_volume_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_gbr_data_volume_ue + + @dl_gbr_data_volume_ue.setter + def dl_gbr_data_volume_ue(self, dl_gbr_data_volume_ue: int): + """Sets the dl_gbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_gbr_data_volume_ue: The dl_gbr_data_volume_ue of this L2MeasCellUEInfo. + :type dl_gbr_data_volume_ue: int + """ + + self._dl_gbr_data_volume_ue = dl_gbr_data_volume_ue + + @property + def dl_gbr_delay_ue(self) -> int: + """Gets the dl_gbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_gbr_delay_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_gbr_delay_ue + + @dl_gbr_delay_ue.setter + def dl_gbr_delay_ue(self, dl_gbr_delay_ue: int): + """Sets the dl_gbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_gbr_delay_ue: The dl_gbr_delay_ue of this L2MeasCellUEInfo. + :type dl_gbr_delay_ue: int + """ + + self._dl_gbr_delay_ue = dl_gbr_delay_ue + + @property + def dl_gbr_pdr_ue(self) -> int: + """Gets the dl_gbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_gbr_pdr_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_gbr_pdr_ue + + @dl_gbr_pdr_ue.setter + def dl_gbr_pdr_ue(self, dl_gbr_pdr_ue: int): + """Sets the dl_gbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_gbr_pdr_ue: The dl_gbr_pdr_ue of this L2MeasCellUEInfo. + :type dl_gbr_pdr_ue: int + """ + + self._dl_gbr_pdr_ue = dl_gbr_pdr_ue + + @property + def dl_gbr_throughput_ue(self) -> int: + """Gets the dl_gbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_gbr_throughput_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_gbr_throughput_ue + + @dl_gbr_throughput_ue.setter + def dl_gbr_throughput_ue(self, dl_gbr_throughput_ue: int): + """Sets the dl_gbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_gbr_throughput_ue: The dl_gbr_throughput_ue of this L2MeasCellUEInfo. + :type dl_gbr_throughput_ue: int + """ + + self._dl_gbr_throughput_ue = dl_gbr_throughput_ue + + @property + def dl_nongbr_data_volume_ue(self) -> int: + """Gets the dl_nongbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_nongbr_data_volume_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_nongbr_data_volume_ue + + @dl_nongbr_data_volume_ue.setter + def dl_nongbr_data_volume_ue(self, dl_nongbr_data_volume_ue: int): + """Sets the dl_nongbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_nongbr_data_volume_ue: The dl_nongbr_data_volume_ue of this L2MeasCellUEInfo. + :type dl_nongbr_data_volume_ue: int + """ + + self._dl_nongbr_data_volume_ue = dl_nongbr_data_volume_ue + + @property + def dl_nongbr_delay_ue(self) -> int: + """Gets the dl_nongbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_nongbr_delay_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_nongbr_delay_ue + + @dl_nongbr_delay_ue.setter + def dl_nongbr_delay_ue(self, dl_nongbr_delay_ue: int): + """Sets the dl_nongbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the downlink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_nongbr_delay_ue: The dl_nongbr_delay_ue of this L2MeasCellUEInfo. + :type dl_nongbr_delay_ue: int + """ + + self._dl_nongbr_delay_ue = dl_nongbr_delay_ue + + @property + def dl_nongbr_pdr_ue(self) -> int: + """Gets the dl_nongbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the downlink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_nongbr_pdr_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_nongbr_pdr_ue + + @dl_nongbr_pdr_ue.setter + def dl_nongbr_pdr_ue(self, dl_nongbr_pdr_ue: int): + """Sets the dl_nongbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the downlink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_nongbr_pdr_ue: The dl_nongbr_pdr_ue of this L2MeasCellUEInfo. + :type dl_nongbr_pdr_ue: int + """ + + self._dl_nongbr_pdr_ue = dl_nongbr_pdr_ue + + @property + def dl_nongbr_throughput_ue(self) -> int: + """Gets the dl_nongbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the downlink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The dl_nongbr_throughput_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._dl_nongbr_throughput_ue + + @dl_nongbr_throughput_ue.setter + def dl_nongbr_throughput_ue(self, dl_nongbr_throughput_ue: int): + """Sets the dl_nongbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the downlink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param dl_nongbr_throughput_ue: The dl_nongbr_throughput_ue of this L2MeasCellUEInfo. + :type dl_nongbr_throughput_ue: int + """ + + self._dl_nongbr_throughput_ue = dl_nongbr_throughput_ue + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this L2MeasCellUEInfo. + + + :return: The ecgi of this L2MeasCellUEInfo. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this L2MeasCellUEInfo. + + + :param ecgi: The ecgi of this L2MeasCellUEInfo. + :type ecgi: Ecgi + """ + + self._ecgi = ecgi + + @property + def ul_gbr_data_volume_ue(self) -> int: + """Gets the ul_gbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_gbr_data_volume_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_gbr_data_volume_ue + + @ul_gbr_data_volume_ue.setter + def ul_gbr_data_volume_ue(self, ul_gbr_data_volume_ue: int): + """Sets the ul_gbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_gbr_data_volume_ue: The ul_gbr_data_volume_ue of this L2MeasCellUEInfo. + :type ul_gbr_data_volume_ue: int + """ + + self._ul_gbr_data_volume_ue = ul_gbr_data_volume_ue + + @property + def ul_gbr_delay_ue(self) -> int: + """Gets the ul_gbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_gbr_delay_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_gbr_delay_ue + + @ul_gbr_delay_ue.setter + def ul_gbr_delay_ue(self, ul_gbr_delay_ue: int): + """Sets the ul_gbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_gbr_delay_ue: The ul_gbr_delay_ue of this L2MeasCellUEInfo. + :type ul_gbr_delay_ue: int + """ + + self._ul_gbr_delay_ue = ul_gbr_delay_ue + + @property + def ul_gbr_pdr_ue(self) -> int: + """Gets the ul_gbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_gbr_pdr_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_gbr_pdr_ue + + @ul_gbr_pdr_ue.setter + def ul_gbr_pdr_ue(self, ul_gbr_pdr_ue: int): + """Sets the ul_gbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_gbr_pdr_ue: The ul_gbr_pdr_ue of this L2MeasCellUEInfo. + :type ul_gbr_pdr_ue: int + """ + + self._ul_gbr_pdr_ue = ul_gbr_pdr_ue + + @property + def ul_gbr_throughput_ue(self) -> int: + """Gets the ul_gbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_gbr_throughput_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_gbr_throughput_ue + + @ul_gbr_throughput_ue.setter + def ul_gbr_throughput_ue(self, ul_gbr_throughput_ue: int): + """Sets the ul_gbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_gbr_throughput_ue: The ul_gbr_throughput_ue of this L2MeasCellUEInfo. + :type ul_gbr_throughput_ue: int + """ + + self._ul_gbr_throughput_ue = ul_gbr_throughput_ue + + @property + def ul_nongbr_data_volume_ue(self) -> int: + """Gets the ul_nongbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_nongbr_data_volume_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_nongbr_data_volume_ue + + @ul_nongbr_data_volume_ue.setter + def ul_nongbr_data_volume_ue(self, ul_nongbr_data_volume_ue: int): + """Sets the ul_nongbr_data_volume_ue of this L2MeasCellUEInfo. + + It indicates the data volume of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_nongbr_data_volume_ue: The ul_nongbr_data_volume_ue of this L2MeasCellUEInfo. + :type ul_nongbr_data_volume_ue: int + """ + + self._ul_nongbr_data_volume_ue = ul_nongbr_data_volume_ue + + @property + def ul_nongbr_delay_ue(self) -> int: + """Gets the ul_nongbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_nongbr_delay_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_nongbr_delay_ue + + @ul_nongbr_delay_ue.setter + def ul_nongbr_delay_ue(self, ul_nongbr_delay_ue: int): + """Sets the ul_nongbr_delay_ue of this L2MeasCellUEInfo. + + It indicates the packet delay of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_nongbr_delay_ue: The ul_nongbr_delay_ue of this L2MeasCellUEInfo. + :type ul_nongbr_delay_ue: int + """ + + self._ul_nongbr_delay_ue = ul_nongbr_delay_ue + + @property + def ul_nongbr_pdr_ue(self) -> int: + """Gets the ul_nongbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the uplink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_nongbr_pdr_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_nongbr_pdr_ue + + @ul_nongbr_pdr_ue.setter + def ul_nongbr_pdr_ue(self, ul_nongbr_pdr_ue: int): + """Sets the ul_nongbr_pdr_ue of this L2MeasCellUEInfo. + + It indicates the packet discard rate in percentage of the uplink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_nongbr_pdr_ue: The ul_nongbr_pdr_ue of this L2MeasCellUEInfo. + :type ul_nongbr_pdr_ue: int + """ + + self._ul_nongbr_pdr_ue = ul_nongbr_pdr_ue + + @property + def ul_nongbr_throughput_ue(self) -> int: + """Gets the ul_nongbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :return: The ul_nongbr_throughput_ue of this L2MeasCellUEInfo. + :rtype: int + """ + return self._ul_nongbr_throughput_ue + + @ul_nongbr_throughput_ue.setter + def ul_nongbr_throughput_ue(self, ul_nongbr_throughput_ue: int): + """Sets the ul_nongbr_throughput_ue of this L2MeasCellUEInfo. + + It indicates the scheduled throughput of the uplink non-GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]. # noqa: E501 + + :param ul_nongbr_throughput_ue: The ul_nongbr_throughput_ue of this L2MeasCellUEInfo. + :type ul_nongbr_throughput_ue: int + """ + + self._ul_nongbr_throughput_ue = ul_nongbr_throughput_ue diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/link_type.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/link_type.py new file mode 100644 index 0000000..fdfb9b2 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/link_type.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class LinkType(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, href: str=None): # noqa: E501 + """LinkType - a model defined in Swagger + + :param href: The href of this LinkType. # noqa: E501 + :type href: str + """ + self.swagger_types = { + 'href': str + } + + self.attribute_map = { + 'href': 'href' + } + self._href = href + + @classmethod + def from_dict(cls, dikt) -> 'LinkType': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The LinkType of this LinkType. # noqa: E501 + :rtype: LinkType + """ + return util.deserialize_model(dikt, cls) + + @property + def href(self) -> str: + """Gets the href of this LinkType. + + URI referring to a resource # noqa: E501 + + :return: The href of this LinkType. + :rtype: str + """ + return self._href + + @href.setter + def href(self, href: str): + """Sets the href of this LinkType. + + URI referring to a resource # noqa: E501 + + :param href: The href of this LinkType. + :type href: str + """ + if href is None: + raise ValueError("Invalid value for `href`, must not be `None`") # noqa: E501 + + self._href = href diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_quantity_results_nr.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_quantity_results_nr.py new file mode 100644 index 0000000..acb5079 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_quantity_results_nr.py @@ -0,0 +1,120 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class MeasQuantityResultsNr(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, rsrp: int=None, rsrq: int=None, sinr: int=None): # noqa: E501 + """MeasQuantityResultsNr - a model defined in Swagger + + :param rsrp: The rsrp of this MeasQuantityResultsNr. # noqa: E501 + :type rsrp: int + :param rsrq: The rsrq of this MeasQuantityResultsNr. # noqa: E501 + :type rsrq: int + :param sinr: The sinr of this MeasQuantityResultsNr. # noqa: E501 + :type sinr: int + """ + self.swagger_types = { + 'rsrp': int, + 'rsrq': int, + 'sinr': int + } + + self.attribute_map = { + 'rsrp': 'rsrp', + 'rsrq': 'rsrq', + 'sinr': 'sinr' + } + self._rsrp = rsrp + self._rsrq = rsrq + self._sinr = sinr + + @classmethod + def from_dict(cls, dikt) -> 'MeasQuantityResultsNr': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasQuantityResultsNr of this MeasQuantityResultsNr. # noqa: E501 + :rtype: MeasQuantityResultsNr + """ + return util.deserialize_model(dikt, cls) + + @property + def rsrp(self) -> int: + """Gets the rsrp of this MeasQuantityResultsNr. + + Reference Signal Received Power as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :return: The rsrp of this MeasQuantityResultsNr. + :rtype: int + """ + return self._rsrp + + @rsrp.setter + def rsrp(self, rsrp: int): + """Sets the rsrp of this MeasQuantityResultsNr. + + Reference Signal Received Power as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :param rsrp: The rsrp of this MeasQuantityResultsNr. + :type rsrp: int + """ + + self._rsrp = rsrp + + @property + def rsrq(self) -> int: + """Gets the rsrq of this MeasQuantityResultsNr. + + Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :return: The rsrq of this MeasQuantityResultsNr. + :rtype: int + """ + return self._rsrq + + @rsrq.setter + def rsrq(self, rsrq: int): + """Sets the rsrq of this MeasQuantityResultsNr. + + Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :param rsrq: The rsrq of this MeasQuantityResultsNr. + :type rsrq: int + """ + + self._rsrq = rsrq + + @property + def sinr(self) -> int: + """Gets the sinr of this MeasQuantityResultsNr. + + Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :return: The sinr of this MeasQuantityResultsNr. + :rtype: int + """ + return self._sinr + + @sinr.setter + def sinr(self, sinr: int): + """Sets the sinr of this MeasQuantityResultsNr. + + Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :param sinr: The sinr of this MeasQuantityResultsNr. + :type sinr: int + """ + + self._sinr = sinr diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification.py new file mode 100644 index 0000000..1c4a660 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification.py @@ -0,0 +1,468 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.meas_rep_ue_notification_carrier_aggregation_meas_info import MeasRepUeNotificationCarrierAggregationMeasInfo # noqa: F401,E501 +from swagger_server.models.meas_rep_ue_notification_eutran_neighbour_cell_meas_info import MeasRepUeNotificationEutranNeighbourCellMeasInfo # noqa: F401,E501 +from swagger_server.models.meas_rep_ue_notification_new_radio_meas_info import MeasRepUeNotificationNewRadioMeasInfo # noqa: F401,E501 +from swagger_server.models.meas_rep_ue_notification_new_radio_meas_nei_info import MeasRepUeNotificationNewRadioMeasNeiInfo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server.models.trigger import Trigger # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, carrier_aggregation_meas_info: List[MeasRepUeNotificationCarrierAggregationMeasInfo]=None, ecgi: Ecgi=None, eutran_neighbour_cell_meas_info: List[MeasRepUeNotificationEutranNeighbourCellMeasInfo]=None, height_ue: int=None, new_radio_meas_info: List[MeasRepUeNotificationNewRadioMeasInfo]=None, new_radio_meas_nei_info: List[MeasRepUeNotificationNewRadioMeasNeiInfo]=None, notification_type: str=None, rsrp: int=None, rsrp_ex: int=None, rsrq: int=None, rsrq_ex: int=None, sinr: int=None, time_stamp: TimeStamp=None, trigger: Trigger=None): # noqa: E501 + """MeasRepUeNotification - a model defined in Swagger + + :param associate_id: The associate_id of this MeasRepUeNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param carrier_aggregation_meas_info: The carrier_aggregation_meas_info of this MeasRepUeNotification. # noqa: E501 + :type carrier_aggregation_meas_info: List[MeasRepUeNotificationCarrierAggregationMeasInfo] + :param ecgi: The ecgi of this MeasRepUeNotification. # noqa: E501 + :type ecgi: Ecgi + :param eutran_neighbour_cell_meas_info: The eutran_neighbour_cell_meas_info of this MeasRepUeNotification. # noqa: E501 + :type eutran_neighbour_cell_meas_info: List[MeasRepUeNotificationEutranNeighbourCellMeasInfo] + :param height_ue: The height_ue of this MeasRepUeNotification. # noqa: E501 + :type height_ue: int + :param new_radio_meas_info: The new_radio_meas_info of this MeasRepUeNotification. # noqa: E501 + :type new_radio_meas_info: List[MeasRepUeNotificationNewRadioMeasInfo] + :param new_radio_meas_nei_info: The new_radio_meas_nei_info of this MeasRepUeNotification. # noqa: E501 + :type new_radio_meas_nei_info: List[MeasRepUeNotificationNewRadioMeasNeiInfo] + :param notification_type: The notification_type of this MeasRepUeNotification. # noqa: E501 + :type notification_type: str + :param rsrp: The rsrp of this MeasRepUeNotification. # noqa: E501 + :type rsrp: int + :param rsrp_ex: The rsrp_ex of this MeasRepUeNotification. # noqa: E501 + :type rsrp_ex: int + :param rsrq: The rsrq of this MeasRepUeNotification. # noqa: E501 + :type rsrq: int + :param rsrq_ex: The rsrq_ex of this MeasRepUeNotification. # noqa: E501 + :type rsrq_ex: int + :param sinr: The sinr of this MeasRepUeNotification. # noqa: E501 + :type sinr: int + :param time_stamp: The time_stamp of this MeasRepUeNotification. # noqa: E501 + :type time_stamp: TimeStamp + :param trigger: The trigger of this MeasRepUeNotification. # noqa: E501 + :type trigger: Trigger + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'carrier_aggregation_meas_info': List[MeasRepUeNotificationCarrierAggregationMeasInfo], + 'ecgi': Ecgi, + 'eutran_neighbour_cell_meas_info': List[MeasRepUeNotificationEutranNeighbourCellMeasInfo], + 'height_ue': int, + 'new_radio_meas_info': List[MeasRepUeNotificationNewRadioMeasInfo], + 'new_radio_meas_nei_info': List[MeasRepUeNotificationNewRadioMeasNeiInfo], + 'notification_type': str, + 'rsrp': int, + 'rsrp_ex': int, + 'rsrq': int, + 'rsrq_ex': int, + 'sinr': int, + 'time_stamp': TimeStamp, + 'trigger': Trigger + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'carrier_aggregation_meas_info': 'carrierAggregationMeasInfo', + 'ecgi': 'ecgi', + 'eutran_neighbour_cell_meas_info': 'eutranNeighbourCellMeasInfo', + 'height_ue': 'heightUe', + 'new_radio_meas_info': 'newRadioMeasInfo', + 'new_radio_meas_nei_info': 'newRadioMeasNeiInfo', + 'notification_type': 'notificationType', + 'rsrp': 'rsrp', + 'rsrp_ex': 'rsrpEx', + 'rsrq': 'rsrq', + 'rsrq_ex': 'rsrqEx', + 'sinr': 'sinr', + 'time_stamp': 'timeStamp', + 'trigger': 'trigger' + } + self._associate_id = associate_id + self._carrier_aggregation_meas_info = carrier_aggregation_meas_info + self._ecgi = ecgi + self._eutran_neighbour_cell_meas_info = eutran_neighbour_cell_meas_info + self._height_ue = height_ue + self._new_radio_meas_info = new_radio_meas_info + self._new_radio_meas_nei_info = new_radio_meas_nei_info + self._notification_type = notification_type + self._rsrp = rsrp + self._rsrp_ex = rsrp_ex + self._rsrq = rsrq + self._rsrq_ex = rsrq_ex + self._sinr = sinr + self._time_stamp = time_stamp + self._trigger = trigger + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification of this MeasRepUeNotification. # noqa: E501 + :rtype: MeasRepUeNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this MeasRepUeNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this MeasRepUeNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this MeasRepUeNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this MeasRepUeNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def carrier_aggregation_meas_info(self) -> List[MeasRepUeNotificationCarrierAggregationMeasInfo]: + """Gets the carrier_aggregation_meas_info of this MeasRepUeNotification. + + This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation up to M. # noqa: E501 + + :return: The carrier_aggregation_meas_info of this MeasRepUeNotification. + :rtype: List[MeasRepUeNotificationCarrierAggregationMeasInfo] + """ + return self._carrier_aggregation_meas_info + + @carrier_aggregation_meas_info.setter + def carrier_aggregation_meas_info(self, carrier_aggregation_meas_info: List[MeasRepUeNotificationCarrierAggregationMeasInfo]): + """Sets the carrier_aggregation_meas_info of this MeasRepUeNotification. + + This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation up to M. # noqa: E501 + + :param carrier_aggregation_meas_info: The carrier_aggregation_meas_info of this MeasRepUeNotification. + :type carrier_aggregation_meas_info: List[MeasRepUeNotificationCarrierAggregationMeasInfo] + """ + + self._carrier_aggregation_meas_info = carrier_aggregation_meas_info + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this MeasRepUeNotification. + + + :return: The ecgi of this MeasRepUeNotification. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this MeasRepUeNotification. + + + :param ecgi: The ecgi of this MeasRepUeNotification. + :type ecgi: Ecgi + """ + if ecgi is None: + raise ValueError("Invalid value for `ecgi`, must not be `None`") # noqa: E501 + + self._ecgi = ecgi + + @property + def eutran_neighbour_cell_meas_info(self) -> List[MeasRepUeNotificationEutranNeighbourCellMeasInfo]: + """Gets the eutran_neighbour_cell_meas_info of this MeasRepUeNotification. + + This parameter can be repeated to contain information of all the neighbouring cells up to N. # noqa: E501 + + :return: The eutran_neighbour_cell_meas_info of this MeasRepUeNotification. + :rtype: List[MeasRepUeNotificationEutranNeighbourCellMeasInfo] + """ + return self._eutran_neighbour_cell_meas_info + + @eutran_neighbour_cell_meas_info.setter + def eutran_neighbour_cell_meas_info(self, eutran_neighbour_cell_meas_info: List[MeasRepUeNotificationEutranNeighbourCellMeasInfo]): + """Sets the eutran_neighbour_cell_meas_info of this MeasRepUeNotification. + + This parameter can be repeated to contain information of all the neighbouring cells up to N. # noqa: E501 + + :param eutran_neighbour_cell_meas_info: The eutran_neighbour_cell_meas_info of this MeasRepUeNotification. + :type eutran_neighbour_cell_meas_info: List[MeasRepUeNotificationEutranNeighbourCellMeasInfo] + """ + + self._eutran_neighbour_cell_meas_info = eutran_neighbour_cell_meas_info + + @property + def height_ue(self) -> int: + """Gets the height_ue of this MeasRepUeNotification. + + Indicates height of the UE in meters relative to the sea level as defined in ETSI TS 136.331 [i.7]. # noqa: E501 + + :return: The height_ue of this MeasRepUeNotification. + :rtype: int + """ + return self._height_ue + + @height_ue.setter + def height_ue(self, height_ue: int): + """Sets the height_ue of this MeasRepUeNotification. + + Indicates height of the UE in meters relative to the sea level as defined in ETSI TS 136.331 [i.7]. # noqa: E501 + + :param height_ue: The height_ue of this MeasRepUeNotification. + :type height_ue: int + """ + + self._height_ue = height_ue + + @property + def new_radio_meas_info(self) -> List[MeasRepUeNotificationNewRadioMeasInfo]: + """Gets the new_radio_meas_info of this MeasRepUeNotification. + + 5G New Radio secondary serving cells measurement information. # noqa: E501 + + :return: The new_radio_meas_info of this MeasRepUeNotification. + :rtype: List[MeasRepUeNotificationNewRadioMeasInfo] + """ + return self._new_radio_meas_info + + @new_radio_meas_info.setter + def new_radio_meas_info(self, new_radio_meas_info: List[MeasRepUeNotificationNewRadioMeasInfo]): + """Sets the new_radio_meas_info of this MeasRepUeNotification. + + 5G New Radio secondary serving cells measurement information. # noqa: E501 + + :param new_radio_meas_info: The new_radio_meas_info of this MeasRepUeNotification. + :type new_radio_meas_info: List[MeasRepUeNotificationNewRadioMeasInfo] + """ + + self._new_radio_meas_info = new_radio_meas_info + + @property + def new_radio_meas_nei_info(self) -> List[MeasRepUeNotificationNewRadioMeasNeiInfo]: + """Gets the new_radio_meas_nei_info of this MeasRepUeNotification. + + Measurement quantities concerning the 5G NR neighbours. # noqa: E501 + + :return: The new_radio_meas_nei_info of this MeasRepUeNotification. + :rtype: List[MeasRepUeNotificationNewRadioMeasNeiInfo] + """ + return self._new_radio_meas_nei_info + + @new_radio_meas_nei_info.setter + def new_radio_meas_nei_info(self, new_radio_meas_nei_info: List[MeasRepUeNotificationNewRadioMeasNeiInfo]): + """Sets the new_radio_meas_nei_info of this MeasRepUeNotification. + + Measurement quantities concerning the 5G NR neighbours. # noqa: E501 + + :param new_radio_meas_nei_info: The new_radio_meas_nei_info of this MeasRepUeNotification. + :type new_radio_meas_nei_info: List[MeasRepUeNotificationNewRadioMeasNeiInfo] + """ + + self._new_radio_meas_nei_info = new_radio_meas_nei_info + + @property + def notification_type(self) -> str: + """Gets the notification_type of this MeasRepUeNotification. + + Shall be set to \"MeasRepUeNotification\". # noqa: E501 + + :return: The notification_type of this MeasRepUeNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this MeasRepUeNotification. + + Shall be set to \"MeasRepUeNotification\". # noqa: E501 + + :param notification_type: The notification_type of this MeasRepUeNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def rsrp(self) -> int: + """Gets the rsrp of this MeasRepUeNotification. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrp of this MeasRepUeNotification. + :rtype: int + """ + return self._rsrp + + @rsrp.setter + def rsrp(self, rsrp: int): + """Sets the rsrp of this MeasRepUeNotification. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrp: The rsrp of this MeasRepUeNotification. + :type rsrp: int + """ + if rsrp is None: + raise ValueError("Invalid value for `rsrp`, must not be `None`") # noqa: E501 + + self._rsrp = rsrp + + @property + def rsrp_ex(self) -> int: + """Gets the rsrp_ex of this MeasRepUeNotification. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrp_ex of this MeasRepUeNotification. + :rtype: int + """ + return self._rsrp_ex + + @rsrp_ex.setter + def rsrp_ex(self, rsrp_ex: int): + """Sets the rsrp_ex of this MeasRepUeNotification. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrp_ex: The rsrp_ex of this MeasRepUeNotification. + :type rsrp_ex: int + """ + + self._rsrp_ex = rsrp_ex + + @property + def rsrq(self) -> int: + """Gets the rsrq of this MeasRepUeNotification. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrq of this MeasRepUeNotification. + :rtype: int + """ + return self._rsrq + + @rsrq.setter + def rsrq(self, rsrq: int): + """Sets the rsrq of this MeasRepUeNotification. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrq: The rsrq of this MeasRepUeNotification. + :type rsrq: int + """ + if rsrq is None: + raise ValueError("Invalid value for `rsrq`, must not be `None`") # noqa: E501 + + self._rsrq = rsrq + + @property + def rsrq_ex(self) -> int: + """Gets the rsrq_ex of this MeasRepUeNotification. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrq_ex of this MeasRepUeNotification. + :rtype: int + """ + return self._rsrq_ex + + @rsrq_ex.setter + def rsrq_ex(self, rsrq_ex: int): + """Sets the rsrq_ex of this MeasRepUeNotification. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrq_ex: The rsrq_ex of this MeasRepUeNotification. + :type rsrq_ex: int + """ + + self._rsrq_ex = rsrq_ex + + @property + def sinr(self) -> int: + """Gets the sinr of this MeasRepUeNotification. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The sinr of this MeasRepUeNotification. + :rtype: int + """ + return self._sinr + + @sinr.setter + def sinr(self, sinr: int): + """Sets the sinr of this MeasRepUeNotification. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param sinr: The sinr of this MeasRepUeNotification. + :type sinr: int + """ + + self._sinr = sinr + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this MeasRepUeNotification. + + + :return: The time_stamp of this MeasRepUeNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this MeasRepUeNotification. + + + :param time_stamp: The time_stamp of this MeasRepUeNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp + + @property + def trigger(self) -> Trigger: + """Gets the trigger of this MeasRepUeNotification. + + + :return: The trigger of this MeasRepUeNotification. + :rtype: Trigger + """ + return self._trigger + + @trigger.setter + def trigger(self, trigger: Trigger): + """Sets the trigger of this MeasRepUeNotification. + + + :param trigger: The trigger of this MeasRepUeNotification. + :type trigger: Trigger + """ + if trigger is None: + raise ValueError("Invalid value for `trigger`, must not be `None`") # noqa: E501 + + self._trigger = trigger diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_carrier_aggregation_meas_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_carrier_aggregation_meas_info.py new file mode 100644 index 0000000..cb0b368 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_carrier_aggregation_meas_info.py @@ -0,0 +1,369 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.cell_id import CellId # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationCarrierAggregationMeasInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, cell_id_nei: CellId=None, cell_id_srv: CellId=None, rsrp_nei: int=None, rsrp_nei_ex: int=None, rsrp_srv: int=None, rsrp_srv_ex: int=None, rsrq_nei: int=None, rsrq_nei_ex: int=None, rsrq_srv: int=None, rsrq_srv_ex: int=None, sinr_nei: int=None, sinr_srv: int=None): # noqa: E501 + """MeasRepUeNotificationCarrierAggregationMeasInfo - a model defined in Swagger + + :param cell_id_nei: The cell_id_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type cell_id_nei: CellId + :param cell_id_srv: The cell_id_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type cell_id_srv: CellId + :param rsrp_nei: The rsrp_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrp_nei: int + :param rsrp_nei_ex: The rsrp_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrp_nei_ex: int + :param rsrp_srv: The rsrp_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrp_srv: int + :param rsrp_srv_ex: The rsrp_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrp_srv_ex: int + :param rsrq_nei: The rsrq_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrq_nei: int + :param rsrq_nei_ex: The rsrq_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrq_nei_ex: int + :param rsrq_srv: The rsrq_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrq_srv: int + :param rsrq_srv_ex: The rsrq_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type rsrq_srv_ex: int + :param sinr_nei: The sinr_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type sinr_nei: int + :param sinr_srv: The sinr_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :type sinr_srv: int + """ + self.swagger_types = { + 'cell_id_nei': CellId, + 'cell_id_srv': CellId, + 'rsrp_nei': int, + 'rsrp_nei_ex': int, + 'rsrp_srv': int, + 'rsrp_srv_ex': int, + 'rsrq_nei': int, + 'rsrq_nei_ex': int, + 'rsrq_srv': int, + 'rsrq_srv_ex': int, + 'sinr_nei': int, + 'sinr_srv': int + } + + self.attribute_map = { + 'cell_id_nei': 'cellIdNei', + 'cell_id_srv': 'cellIdSrv', + 'rsrp_nei': 'rsrpNei', + 'rsrp_nei_ex': 'rsrpNeiEx', + 'rsrp_srv': 'rsrpSrv', + 'rsrp_srv_ex': 'rsrpSrvEx', + 'rsrq_nei': 'rsrqNei', + 'rsrq_nei_ex': 'rsrqNeiEx', + 'rsrq_srv': 'rsrqSrv', + 'rsrq_srv_ex': 'rsrqSrvEx', + 'sinr_nei': 'sinrNei', + 'sinr_srv': 'sinrSrv' + } + self._cell_id_nei = cell_id_nei + self._cell_id_srv = cell_id_srv + self._rsrp_nei = rsrp_nei + self._rsrp_nei_ex = rsrp_nei_ex + self._rsrp_srv = rsrp_srv + self._rsrp_srv_ex = rsrp_srv_ex + self._rsrq_nei = rsrq_nei + self._rsrq_nei_ex = rsrq_nei_ex + self._rsrq_srv = rsrq_srv + self._rsrq_srv_ex = rsrq_srv_ex + self._sinr_nei = sinr_nei + self._sinr_srv = sinr_srv + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationCarrierAggregationMeasInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_carrierAggregationMeasInfo of this MeasRepUeNotificationCarrierAggregationMeasInfo. # noqa: E501 + :rtype: MeasRepUeNotificationCarrierAggregationMeasInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def cell_id_nei(self) -> CellId: + """Gets the cell_id_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + + :return: The cell_id_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: CellId + """ + return self._cell_id_nei + + @cell_id_nei.setter + def cell_id_nei(self, cell_id_nei: CellId): + """Sets the cell_id_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + + :param cell_id_nei: The cell_id_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type cell_id_nei: CellId + """ + + self._cell_id_nei = cell_id_nei + + @property + def cell_id_srv(self) -> CellId: + """Gets the cell_id_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + + :return: The cell_id_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: CellId + """ + return self._cell_id_srv + + @cell_id_srv.setter + def cell_id_srv(self, cell_id_srv: CellId): + """Sets the cell_id_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + + :param cell_id_srv: The cell_id_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type cell_id_srv: CellId + """ + + self._cell_id_srv = cell_id_srv + + @property + def rsrp_nei(self) -> int: + """Gets the rsrp_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrp_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrp_nei + + @rsrp_nei.setter + def rsrp_nei(self, rsrp_nei: int): + """Sets the rsrp_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrp_nei: The rsrp_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrp_nei: int + """ + + self._rsrp_nei = rsrp_nei + + @property + def rsrp_nei_ex(self) -> int: + """Gets the rsrp_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrp_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrp_nei_ex + + @rsrp_nei_ex.setter + def rsrp_nei_ex(self, rsrp_nei_ex: int): + """Sets the rsrp_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrp_nei_ex: The rsrp_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrp_nei_ex: int + """ + + self._rsrp_nei_ex = rsrp_nei_ex + + @property + def rsrp_srv(self) -> int: + """Gets the rsrp_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrp_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrp_srv + + @rsrp_srv.setter + def rsrp_srv(self, rsrp_srv: int): + """Sets the rsrp_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrp_srv: The rsrp_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrp_srv: int + """ + + self._rsrp_srv = rsrp_srv + + @property + def rsrp_srv_ex(self) -> int: + """Gets the rsrp_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrp_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrp_srv_ex + + @rsrp_srv_ex.setter + def rsrp_srv_ex(self, rsrp_srv_ex: int): + """Sets the rsrp_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrp_srv_ex: The rsrp_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrp_srv_ex: int + """ + + self._rsrp_srv_ex = rsrp_srv_ex + + @property + def rsrq_nei(self) -> int: + """Gets the rsrq_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrq_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrq_nei + + @rsrq_nei.setter + def rsrq_nei(self, rsrq_nei: int): + """Sets the rsrq_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrq_nei: The rsrq_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrq_nei: int + """ + + self._rsrq_nei = rsrq_nei + + @property + def rsrq_nei_ex(self) -> int: + """Gets the rsrq_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrq_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrq_nei_ex + + @rsrq_nei_ex.setter + def rsrq_nei_ex(self, rsrq_nei_ex: int): + """Sets the rsrq_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrq_nei_ex: The rsrq_nei_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrq_nei_ex: int + """ + + self._rsrq_nei_ex = rsrq_nei_ex + + @property + def rsrq_srv(self) -> int: + """Gets the rsrq_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrq_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrq_srv + + @rsrq_srv.setter + def rsrq_srv(self, rsrq_srv: int): + """Sets the rsrq_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrq_srv: The rsrq_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrq_srv: int + """ + + self._rsrq_srv = rsrq_srv + + @property + def rsrq_srv_ex(self) -> int: + """Gets the rsrq_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrq_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._rsrq_srv_ex + + @rsrq_srv_ex.setter + def rsrq_srv_ex(self, rsrq_srv_ex: int): + """Sets the rsrq_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrq_srv_ex: The rsrq_srv_ex of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type rsrq_srv_ex: int + """ + + self._rsrq_srv_ex = rsrq_srv_ex + + @property + def sinr_nei(self) -> int: + """Gets the sinr_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The sinr_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._sinr_nei + + @sinr_nei.setter + def sinr_nei(self, sinr_nei: int): + """Sets the sinr_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param sinr_nei: The sinr_nei of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type sinr_nei: int + """ + + self._sinr_nei = sinr_nei + + @property + def sinr_srv(self) -> int: + """Gets the sinr_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The sinr_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :rtype: int + """ + return self._sinr_srv + + @sinr_srv.setter + def sinr_srv(self, sinr_srv: int): + """Sets the sinr_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param sinr_srv: The sinr_srv of this MeasRepUeNotificationCarrierAggregationMeasInfo. + :type sinr_srv: int + """ + + self._sinr_srv = sinr_srv diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_eutran_neighbour_cell_meas_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_eutran_neighbour_cell_meas_info.py new file mode 100644 index 0000000..68b764c --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_eutran_neighbour_cell_meas_info.py @@ -0,0 +1,203 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationEutranNeighbourCellMeasInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ecgi: Ecgi=None, rsrp: int=None, rsrp_ex: int=None, rsrq: int=None, rsrq_ex: int=None, sinr: int=None): # noqa: E501 + """MeasRepUeNotificationEutranNeighbourCellMeasInfo - a model defined in Swagger + + :param ecgi: The ecgi of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. # noqa: E501 + :type ecgi: Ecgi + :param rsrp: The rsrp of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. # noqa: E501 + :type rsrp: int + :param rsrp_ex: The rsrp_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. # noqa: E501 + :type rsrp_ex: int + :param rsrq: The rsrq of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. # noqa: E501 + :type rsrq: int + :param rsrq_ex: The rsrq_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. # noqa: E501 + :type rsrq_ex: int + :param sinr: The sinr of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. # noqa: E501 + :type sinr: int + """ + self.swagger_types = { + 'ecgi': Ecgi, + 'rsrp': int, + 'rsrp_ex': int, + 'rsrq': int, + 'rsrq_ex': int, + 'sinr': int + } + + self.attribute_map = { + 'ecgi': 'ecgi', + 'rsrp': 'rsrp', + 'rsrp_ex': 'rsrpEx', + 'rsrq': 'rsrq', + 'rsrq_ex': 'rsrqEx', + 'sinr': 'sinr' + } + self._ecgi = ecgi + self._rsrp = rsrp + self._rsrp_ex = rsrp_ex + self._rsrq = rsrq + self._rsrq_ex = rsrq_ex + self._sinr = sinr + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationEutranNeighbourCellMeasInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_eutranNeighbourCellMeasInfo of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. # noqa: E501 + :rtype: MeasRepUeNotificationEutranNeighbourCellMeasInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + + :return: The ecgi of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + + :param ecgi: The ecgi of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :type ecgi: Ecgi + """ + + self._ecgi = ecgi + + @property + def rsrp(self) -> int: + """Gets the rsrp of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrp of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :rtype: int + """ + return self._rsrp + + @rsrp.setter + def rsrp(self, rsrp: int): + """Sets the rsrp of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrp: The rsrp of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :type rsrp: int + """ + + self._rsrp = rsrp + + @property + def rsrp_ex(self) -> int: + """Gets the rsrp_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrp_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :rtype: int + """ + return self._rsrp_ex + + @rsrp_ex.setter + def rsrp_ex(self, rsrp_ex: int): + """Sets the rsrp_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Extended Reference Signal Received Power, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrp_ex: The rsrp_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :type rsrp_ex: int + """ + + self._rsrp_ex = rsrp_ex + + @property + def rsrq(self) -> int: + """Gets the rsrq of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The rsrq of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :rtype: int + """ + return self._rsrq + + @rsrq.setter + def rsrq(self, rsrq: int): + """Sets the rsrq of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param rsrq: The rsrq of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :type rsrq: int + """ + + self._rsrq = rsrq + + @property + def rsrq_ex(self) -> int: + """Gets the rsrq_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The rsrq_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :rtype: int + """ + return self._rsrq_ex + + @rsrq_ex.setter + def rsrq_ex(self, rsrq_ex: int): + """Sets the rsrq_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Extended Reference Signal Received Quality, with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param rsrq_ex: The rsrq_ex of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :type rsrq_ex: int + """ + + self._rsrq_ex = rsrq_ex + + @property + def sinr(self) -> int: + """Gets the sinr of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :return: The sinr of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :rtype: int + """ + return self._sinr + + @sinr.setter + def sinr(self, sinr: int): + """Sets the sinr of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + + Reference Signal \"Signal to Interference plus Noise Ratio\", with value mapping defined in ETSI TS 136 133 [i.16]. # noqa: E501 + + :param sinr: The sinr of this MeasRepUeNotificationEutranNeighbourCellMeasInfo. + :type sinr: int + """ + + self._sinr = sinr diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_info.py new file mode 100644 index 0000000..c623848 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_info.py @@ -0,0 +1,118 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_rep_ue_notification_nr_bncs import MeasRepUeNotificationNrBNCs # noqa: F401,E501 +from swagger_server.models.meas_rep_ue_notification_nr_scs import MeasRepUeNotificationNrSCs # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationNewRadioMeasInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nr_bncs: MeasRepUeNotificationNrBNCs=None, nr_carrier_freq: int=None, nr_scs: MeasRepUeNotificationNrSCs=None): # noqa: E501 + """MeasRepUeNotificationNewRadioMeasInfo - a model defined in Swagger + + :param nr_bncs: The nr_bncs of this MeasRepUeNotificationNewRadioMeasInfo. # noqa: E501 + :type nr_bncs: MeasRepUeNotificationNrBNCs + :param nr_carrier_freq: The nr_carrier_freq of this MeasRepUeNotificationNewRadioMeasInfo. # noqa: E501 + :type nr_carrier_freq: int + :param nr_scs: The nr_scs of this MeasRepUeNotificationNewRadioMeasInfo. # noqa: E501 + :type nr_scs: MeasRepUeNotificationNrSCs + """ + self.swagger_types = { + 'nr_bncs': MeasRepUeNotificationNrBNCs, + 'nr_carrier_freq': int, + 'nr_scs': MeasRepUeNotificationNrSCs + } + + self.attribute_map = { + 'nr_bncs': 'nrBNCs', + 'nr_carrier_freq': 'nrCarrierFreq', + 'nr_scs': 'nrSCs' + } + self._nr_bncs = nr_bncs + self._nr_carrier_freq = nr_carrier_freq + self._nr_scs = nr_scs + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationNewRadioMeasInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_newRadioMeasInfo of this MeasRepUeNotificationNewRadioMeasInfo. # noqa: E501 + :rtype: MeasRepUeNotificationNewRadioMeasInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def nr_bncs(self) -> MeasRepUeNotificationNrBNCs: + """Gets the nr_bncs of this MeasRepUeNotificationNewRadioMeasInfo. + + + :return: The nr_bncs of this MeasRepUeNotificationNewRadioMeasInfo. + :rtype: MeasRepUeNotificationNrBNCs + """ + return self._nr_bncs + + @nr_bncs.setter + def nr_bncs(self, nr_bncs: MeasRepUeNotificationNrBNCs): + """Sets the nr_bncs of this MeasRepUeNotificationNewRadioMeasInfo. + + + :param nr_bncs: The nr_bncs of this MeasRepUeNotificationNewRadioMeasInfo. + :type nr_bncs: MeasRepUeNotificationNrBNCs + """ + + self._nr_bncs = nr_bncs + + @property + def nr_carrier_freq(self) -> int: + """Gets the nr_carrier_freq of this MeasRepUeNotificationNewRadioMeasInfo. + + ARFCN applicable for a downlink, uplink or bi-directional (TDD) NR carrier frequency, as defined in ETSI TS 138.101 [i.15]. # noqa: E501 + + :return: The nr_carrier_freq of this MeasRepUeNotificationNewRadioMeasInfo. + :rtype: int + """ + return self._nr_carrier_freq + + @nr_carrier_freq.setter + def nr_carrier_freq(self, nr_carrier_freq: int): + """Sets the nr_carrier_freq of this MeasRepUeNotificationNewRadioMeasInfo. + + ARFCN applicable for a downlink, uplink or bi-directional (TDD) NR carrier frequency, as defined in ETSI TS 138.101 [i.15]. # noqa: E501 + + :param nr_carrier_freq: The nr_carrier_freq of this MeasRepUeNotificationNewRadioMeasInfo. + :type nr_carrier_freq: int + """ + + self._nr_carrier_freq = nr_carrier_freq + + @property + def nr_scs(self) -> MeasRepUeNotificationNrSCs: + """Gets the nr_scs of this MeasRepUeNotificationNewRadioMeasInfo. + + + :return: The nr_scs of this MeasRepUeNotificationNewRadioMeasInfo. + :rtype: MeasRepUeNotificationNrSCs + """ + return self._nr_scs + + @nr_scs.setter + def nr_scs(self, nr_scs: MeasRepUeNotificationNrSCs): + """Sets the nr_scs of this MeasRepUeNotificationNewRadioMeasInfo. + + + :param nr_scs: The nr_scs of this MeasRepUeNotificationNewRadioMeasInfo. + :type nr_scs: MeasRepUeNotificationNrSCs + """ + + self._nr_scs = nr_scs diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_nei_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_nei_info.py new file mode 100644 index 0000000..0bb7637 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_new_radio_meas_nei_info.py @@ -0,0 +1,176 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_rep_ue_notification_nr_n_cell_info import MeasRepUeNotificationNrNCellInfo # noqa: F401,E501 +from swagger_server.models.rs_index_results import RsIndexResults # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationNewRadioMeasNeiInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nr_n_cell_info: List[MeasRepUeNotificationNrNCellInfo]=None, nr_n_cell_rsrp: int=None, nr_n_cell_rsrq: int=None, nr_n_cell_rssi: int=None, rs_index_results: RsIndexResults=None): # noqa: E501 + """MeasRepUeNotificationNewRadioMeasNeiInfo - a model defined in Swagger + + :param nr_n_cell_info: The nr_n_cell_info of this MeasRepUeNotificationNewRadioMeasNeiInfo. # noqa: E501 + :type nr_n_cell_info: List[MeasRepUeNotificationNrNCellInfo] + :param nr_n_cell_rsrp: The nr_n_cell_rsrp of this MeasRepUeNotificationNewRadioMeasNeiInfo. # noqa: E501 + :type nr_n_cell_rsrp: int + :param nr_n_cell_rsrq: The nr_n_cell_rsrq of this MeasRepUeNotificationNewRadioMeasNeiInfo. # noqa: E501 + :type nr_n_cell_rsrq: int + :param nr_n_cell_rssi: The nr_n_cell_rssi of this MeasRepUeNotificationNewRadioMeasNeiInfo. # noqa: E501 + :type nr_n_cell_rssi: int + :param rs_index_results: The rs_index_results of this MeasRepUeNotificationNewRadioMeasNeiInfo. # noqa: E501 + :type rs_index_results: RsIndexResults + """ + self.swagger_types = { + 'nr_n_cell_info': List[MeasRepUeNotificationNrNCellInfo], + 'nr_n_cell_rsrp': int, + 'nr_n_cell_rsrq': int, + 'nr_n_cell_rssi': int, + 'rs_index_results': RsIndexResults + } + + self.attribute_map = { + 'nr_n_cell_info': 'nrNCellInfo', + 'nr_n_cell_rsrp': 'nrNCellRsrp', + 'nr_n_cell_rsrq': 'nrNCellRsrq', + 'nr_n_cell_rssi': 'nrNCellRssi', + 'rs_index_results': 'rsIndexResults' + } + self._nr_n_cell_info = nr_n_cell_info + self._nr_n_cell_rsrp = nr_n_cell_rsrp + self._nr_n_cell_rsrq = nr_n_cell_rsrq + self._nr_n_cell_rssi = nr_n_cell_rssi + self._rs_index_results = rs_index_results + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationNewRadioMeasNeiInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_newRadioMeasNeiInfo of this MeasRepUeNotificationNewRadioMeasNeiInfo. # noqa: E501 + :rtype: MeasRepUeNotificationNewRadioMeasNeiInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def nr_n_cell_info(self) -> List[MeasRepUeNotificationNrNCellInfo]: + """Gets the nr_n_cell_info of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + 5G NR neighbour cell info. # noqa: E501 + + :return: The nr_n_cell_info of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :rtype: List[MeasRepUeNotificationNrNCellInfo] + """ + return self._nr_n_cell_info + + @nr_n_cell_info.setter + def nr_n_cell_info(self, nr_n_cell_info: List[MeasRepUeNotificationNrNCellInfo]): + """Sets the nr_n_cell_info of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + 5G NR neighbour cell info. # noqa: E501 + + :param nr_n_cell_info: The nr_n_cell_info of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :type nr_n_cell_info: List[MeasRepUeNotificationNrNCellInfo] + """ + + self._nr_n_cell_info = nr_n_cell_info + + @property + def nr_n_cell_rsrp(self) -> int: + """Gets the nr_n_cell_rsrp of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + Reference Signal Received Power measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_n_cell_rsrp of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :rtype: int + """ + return self._nr_n_cell_rsrp + + @nr_n_cell_rsrp.setter + def nr_n_cell_rsrp(self, nr_n_cell_rsrp: int): + """Sets the nr_n_cell_rsrp of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + Reference Signal Received Power measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_n_cell_rsrp: The nr_n_cell_rsrp of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :type nr_n_cell_rsrp: int + """ + + self._nr_n_cell_rsrp = nr_n_cell_rsrp + + @property + def nr_n_cell_rsrq(self) -> int: + """Gets the nr_n_cell_rsrq of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + Reference Signal Received Quality measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_n_cell_rsrq of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :rtype: int + """ + return self._nr_n_cell_rsrq + + @nr_n_cell_rsrq.setter + def nr_n_cell_rsrq(self, nr_n_cell_rsrq: int): + """Sets the nr_n_cell_rsrq of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + Reference Signal Received Quality measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_n_cell_rsrq: The nr_n_cell_rsrq of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :type nr_n_cell_rsrq: int + """ + + self._nr_n_cell_rsrq = nr_n_cell_rsrq + + @property + def nr_n_cell_rssi(self) -> int: + """Gets the nr_n_cell_rssi of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + Reference signal SINR measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_n_cell_rssi of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :rtype: int + """ + return self._nr_n_cell_rssi + + @nr_n_cell_rssi.setter + def nr_n_cell_rssi(self, nr_n_cell_rssi: int): + """Sets the nr_n_cell_rssi of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + Reference signal SINR measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_n_cell_rssi: The nr_n_cell_rssi of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :type nr_n_cell_rssi: int + """ + + self._nr_n_cell_rssi = nr_n_cell_rssi + + @property + def rs_index_results(self) -> RsIndexResults: + """Gets the rs_index_results of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + + :return: The rs_index_results of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :rtype: RsIndexResults + """ + return self._rs_index_results + + @rs_index_results.setter + def rs_index_results(self, rs_index_results: RsIndexResults): + """Sets the rs_index_results of this MeasRepUeNotificationNewRadioMeasNeiInfo. + + + :param rs_index_results: The rs_index_results of this MeasRepUeNotificationNewRadioMeasNeiInfo. + :type rs_index_results: RsIndexResults + """ + + self._rs_index_results = rs_index_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs.py new file mode 100644 index 0000000..e9d6514 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs.py @@ -0,0 +1,151 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_rep_ue_notification_nr_bncs_nr_bn_cell_info import MeasRepUeNotificationNrBNCsNrBNCellInfo # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationNrBNCs(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nr_bn_cell_info: List[MeasRepUeNotificationNrBNCsNrBNCellInfo]=None, nr_bn_cell_rsrp: int=None, nr_bn_cell_rsrq: int=None, nr_bn_cell_rssi: int=None): # noqa: E501 + """MeasRepUeNotificationNrBNCs - a model defined in Swagger + + :param nr_bn_cell_info: The nr_bn_cell_info of this MeasRepUeNotificationNrBNCs. # noqa: E501 + :type nr_bn_cell_info: List[MeasRepUeNotificationNrBNCsNrBNCellInfo] + :param nr_bn_cell_rsrp: The nr_bn_cell_rsrp of this MeasRepUeNotificationNrBNCs. # noqa: E501 + :type nr_bn_cell_rsrp: int + :param nr_bn_cell_rsrq: The nr_bn_cell_rsrq of this MeasRepUeNotificationNrBNCs. # noqa: E501 + :type nr_bn_cell_rsrq: int + :param nr_bn_cell_rssi: The nr_bn_cell_rssi of this MeasRepUeNotificationNrBNCs. # noqa: E501 + :type nr_bn_cell_rssi: int + """ + self.swagger_types = { + 'nr_bn_cell_info': List[MeasRepUeNotificationNrBNCsNrBNCellInfo], + 'nr_bn_cell_rsrp': int, + 'nr_bn_cell_rsrq': int, + 'nr_bn_cell_rssi': int + } + + self.attribute_map = { + 'nr_bn_cell_info': 'nrBNCellInfo', + 'nr_bn_cell_rsrp': 'nrBNCellRsrp', + 'nr_bn_cell_rsrq': 'nrBNCellRsrq', + 'nr_bn_cell_rssi': 'nrBNCellRssi' + } + self._nr_bn_cell_info = nr_bn_cell_info + self._nr_bn_cell_rsrp = nr_bn_cell_rsrp + self._nr_bn_cell_rsrq = nr_bn_cell_rsrq + self._nr_bn_cell_rssi = nr_bn_cell_rssi + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationNrBNCs': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_nrBNCs of this MeasRepUeNotificationNrBNCs. # noqa: E501 + :rtype: MeasRepUeNotificationNrBNCs + """ + return util.deserialize_model(dikt, cls) + + @property + def nr_bn_cell_info(self) -> List[MeasRepUeNotificationNrBNCsNrBNCellInfo]: + """Gets the nr_bn_cell_info of this MeasRepUeNotificationNrBNCs. + + Best neighbours of the secondary serving cell(s) info # noqa: E501 + + :return: The nr_bn_cell_info of this MeasRepUeNotificationNrBNCs. + :rtype: List[MeasRepUeNotificationNrBNCsNrBNCellInfo] + """ + return self._nr_bn_cell_info + + @nr_bn_cell_info.setter + def nr_bn_cell_info(self, nr_bn_cell_info: List[MeasRepUeNotificationNrBNCsNrBNCellInfo]): + """Sets the nr_bn_cell_info of this MeasRepUeNotificationNrBNCs. + + Best neighbours of the secondary serving cell(s) info # noqa: E501 + + :param nr_bn_cell_info: The nr_bn_cell_info of this MeasRepUeNotificationNrBNCs. + :type nr_bn_cell_info: List[MeasRepUeNotificationNrBNCsNrBNCellInfo] + """ + if nr_bn_cell_info is None: + raise ValueError("Invalid value for `nr_bn_cell_info`, must not be `None`") # noqa: E501 + + self._nr_bn_cell_info = nr_bn_cell_info + + @property + def nr_bn_cell_rsrp(self) -> int: + """Gets the nr_bn_cell_rsrp of this MeasRepUeNotificationNrBNCs. + + Reference Signal Received Power measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_bn_cell_rsrp of this MeasRepUeNotificationNrBNCs. + :rtype: int + """ + return self._nr_bn_cell_rsrp + + @nr_bn_cell_rsrp.setter + def nr_bn_cell_rsrp(self, nr_bn_cell_rsrp: int): + """Sets the nr_bn_cell_rsrp of this MeasRepUeNotificationNrBNCs. + + Reference Signal Received Power measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_bn_cell_rsrp: The nr_bn_cell_rsrp of this MeasRepUeNotificationNrBNCs. + :type nr_bn_cell_rsrp: int + """ + + self._nr_bn_cell_rsrp = nr_bn_cell_rsrp + + @property + def nr_bn_cell_rsrq(self) -> int: + """Gets the nr_bn_cell_rsrq of this MeasRepUeNotificationNrBNCs. + + Reference Signal Received Quality measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_bn_cell_rsrq of this MeasRepUeNotificationNrBNCs. + :rtype: int + """ + return self._nr_bn_cell_rsrq + + @nr_bn_cell_rsrq.setter + def nr_bn_cell_rsrq(self, nr_bn_cell_rsrq: int): + """Sets the nr_bn_cell_rsrq of this MeasRepUeNotificationNrBNCs. + + Reference Signal Received Quality measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_bn_cell_rsrq: The nr_bn_cell_rsrq of this MeasRepUeNotificationNrBNCs. + :type nr_bn_cell_rsrq: int + """ + + self._nr_bn_cell_rsrq = nr_bn_cell_rsrq + + @property + def nr_bn_cell_rssi(self) -> int: + """Gets the nr_bn_cell_rssi of this MeasRepUeNotificationNrBNCs. + + Reference signal SINR measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_bn_cell_rssi of this MeasRepUeNotificationNrBNCs. + :rtype: int + """ + return self._nr_bn_cell_rssi + + @nr_bn_cell_rssi.setter + def nr_bn_cell_rssi(self, nr_bn_cell_rssi: int): + """Sets the nr_bn_cell_rssi of this MeasRepUeNotificationNrBNCs. + + Reference signal SINR measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_bn_cell_rssi: The nr_bn_cell_rssi of this MeasRepUeNotificationNrBNCs. + :type nr_bn_cell_rssi: int + """ + + self._nr_bn_cell_rssi = nr_bn_cell_rssi diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs_nr_bn_cell_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs_nr_bn_cell_info.py new file mode 100644 index 0000000..a654bc6 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_bncs_nr_bn_cell_info.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.nr_cell_id import NrCellId # noqa: F401,E501 +from swagger_server.models.plmn import Plmn # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationNrBNCsNrBNCellInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nr_bn_cell_gid: NrCellId=None, nr_bn_cell_plmn: List[Plmn]=None): # noqa: E501 + """MeasRepUeNotificationNrBNCsNrBNCellInfo - a model defined in Swagger + + :param nr_bn_cell_gid: The nr_bn_cell_gid of this MeasRepUeNotificationNrBNCsNrBNCellInfo. # noqa: E501 + :type nr_bn_cell_gid: NrCellId + :param nr_bn_cell_plmn: The nr_bn_cell_plmn of this MeasRepUeNotificationNrBNCsNrBNCellInfo. # noqa: E501 + :type nr_bn_cell_plmn: List[Plmn] + """ + self.swagger_types = { + 'nr_bn_cell_gid': NrCellId, + 'nr_bn_cell_plmn': List[Plmn] + } + + self.attribute_map = { + 'nr_bn_cell_gid': 'nrBNCellGId', + 'nr_bn_cell_plmn': 'nrBNCellPlmn' + } + self._nr_bn_cell_gid = nr_bn_cell_gid + self._nr_bn_cell_plmn = nr_bn_cell_plmn + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationNrBNCsNrBNCellInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_nrBNCs_nrBNCellInfo of this MeasRepUeNotificationNrBNCsNrBNCellInfo. # noqa: E501 + :rtype: MeasRepUeNotificationNrBNCsNrBNCellInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def nr_bn_cell_gid(self) -> NrCellId: + """Gets the nr_bn_cell_gid of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + + + :return: The nr_bn_cell_gid of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + :rtype: NrCellId + """ + return self._nr_bn_cell_gid + + @nr_bn_cell_gid.setter + def nr_bn_cell_gid(self, nr_bn_cell_gid: NrCellId): + """Sets the nr_bn_cell_gid of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + + + :param nr_bn_cell_gid: The nr_bn_cell_gid of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + :type nr_bn_cell_gid: NrCellId + """ + + self._nr_bn_cell_gid = nr_bn_cell_gid + + @property + def nr_bn_cell_plmn(self) -> List[Plmn]: + """Gets the nr_bn_cell_plmn of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + + Public land mobile network identities # noqa: E501 + + :return: The nr_bn_cell_plmn of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + :rtype: List[Plmn] + """ + return self._nr_bn_cell_plmn + + @nr_bn_cell_plmn.setter + def nr_bn_cell_plmn(self, nr_bn_cell_plmn: List[Plmn]): + """Sets the nr_bn_cell_plmn of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + + Public land mobile network identities # noqa: E501 + + :param nr_bn_cell_plmn: The nr_bn_cell_plmn of this MeasRepUeNotificationNrBNCsNrBNCellInfo. + :type nr_bn_cell_plmn: List[Plmn] + """ + + self._nr_bn_cell_plmn = nr_bn_cell_plmn diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_n_cell_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_n_cell_info.py new file mode 100644 index 0000000..e210c31 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_n_cell_info.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.nr_cell_id import NrCellId # noqa: F401,E501 +from swagger_server.models.plmn import Plmn # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationNrNCellInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nr_n_cell_gid: NrCellId=None, nr_n_cell_plmn: List[Plmn]=None): # noqa: E501 + """MeasRepUeNotificationNrNCellInfo - a model defined in Swagger + + :param nr_n_cell_gid: The nr_n_cell_gid of this MeasRepUeNotificationNrNCellInfo. # noqa: E501 + :type nr_n_cell_gid: NrCellId + :param nr_n_cell_plmn: The nr_n_cell_plmn of this MeasRepUeNotificationNrNCellInfo. # noqa: E501 + :type nr_n_cell_plmn: List[Plmn] + """ + self.swagger_types = { + 'nr_n_cell_gid': NrCellId, + 'nr_n_cell_plmn': List[Plmn] + } + + self.attribute_map = { + 'nr_n_cell_gid': 'nrNCellGId', + 'nr_n_cell_plmn': 'nrNCellPlmn' + } + self._nr_n_cell_gid = nr_n_cell_gid + self._nr_n_cell_plmn = nr_n_cell_plmn + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationNrNCellInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_nrNCellInfo of this MeasRepUeNotificationNrNCellInfo. # noqa: E501 + :rtype: MeasRepUeNotificationNrNCellInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def nr_n_cell_gid(self) -> NrCellId: + """Gets the nr_n_cell_gid of this MeasRepUeNotificationNrNCellInfo. + + + :return: The nr_n_cell_gid of this MeasRepUeNotificationNrNCellInfo. + :rtype: NrCellId + """ + return self._nr_n_cell_gid + + @nr_n_cell_gid.setter + def nr_n_cell_gid(self, nr_n_cell_gid: NrCellId): + """Sets the nr_n_cell_gid of this MeasRepUeNotificationNrNCellInfo. + + + :param nr_n_cell_gid: The nr_n_cell_gid of this MeasRepUeNotificationNrNCellInfo. + :type nr_n_cell_gid: NrCellId + """ + + self._nr_n_cell_gid = nr_n_cell_gid + + @property + def nr_n_cell_plmn(self) -> List[Plmn]: + """Gets the nr_n_cell_plmn of this MeasRepUeNotificationNrNCellInfo. + + Public land mobile network identities. # noqa: E501 + + :return: The nr_n_cell_plmn of this MeasRepUeNotificationNrNCellInfo. + :rtype: List[Plmn] + """ + return self._nr_n_cell_plmn + + @nr_n_cell_plmn.setter + def nr_n_cell_plmn(self, nr_n_cell_plmn: List[Plmn]): + """Sets the nr_n_cell_plmn of this MeasRepUeNotificationNrNCellInfo. + + Public land mobile network identities. # noqa: E501 + + :param nr_n_cell_plmn: The nr_n_cell_plmn of this MeasRepUeNotificationNrNCellInfo. + :type nr_n_cell_plmn: List[Plmn] + """ + + self._nr_n_cell_plmn = nr_n_cell_plmn diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs.py new file mode 100644 index 0000000..f4877e8 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs.py @@ -0,0 +1,151 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_rep_ue_notification_nr_scs_nr_s_cell_info import MeasRepUeNotificationNrSCsNrSCellInfo # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationNrSCs(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nr_s_cell_info: List[MeasRepUeNotificationNrSCsNrSCellInfo]=None, nr_s_cell_rsrp: int=None, nr_s_cell_rsrq: int=None, nr_s_cell_rssi: int=None): # noqa: E501 + """MeasRepUeNotificationNrSCs - a model defined in Swagger + + :param nr_s_cell_info: The nr_s_cell_info of this MeasRepUeNotificationNrSCs. # noqa: E501 + :type nr_s_cell_info: List[MeasRepUeNotificationNrSCsNrSCellInfo] + :param nr_s_cell_rsrp: The nr_s_cell_rsrp of this MeasRepUeNotificationNrSCs. # noqa: E501 + :type nr_s_cell_rsrp: int + :param nr_s_cell_rsrq: The nr_s_cell_rsrq of this MeasRepUeNotificationNrSCs. # noqa: E501 + :type nr_s_cell_rsrq: int + :param nr_s_cell_rssi: The nr_s_cell_rssi of this MeasRepUeNotificationNrSCs. # noqa: E501 + :type nr_s_cell_rssi: int + """ + self.swagger_types = { + 'nr_s_cell_info': List[MeasRepUeNotificationNrSCsNrSCellInfo], + 'nr_s_cell_rsrp': int, + 'nr_s_cell_rsrq': int, + 'nr_s_cell_rssi': int + } + + self.attribute_map = { + 'nr_s_cell_info': 'nrSCellInfo', + 'nr_s_cell_rsrp': 'nrSCellRsrp', + 'nr_s_cell_rsrq': 'nrSCellRsrq', + 'nr_s_cell_rssi': 'nrSCellRssi' + } + self._nr_s_cell_info = nr_s_cell_info + self._nr_s_cell_rsrp = nr_s_cell_rsrp + self._nr_s_cell_rsrq = nr_s_cell_rsrq + self._nr_s_cell_rssi = nr_s_cell_rssi + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationNrSCs': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_nrSCs of this MeasRepUeNotificationNrSCs. # noqa: E501 + :rtype: MeasRepUeNotificationNrSCs + """ + return util.deserialize_model(dikt, cls) + + @property + def nr_s_cell_info(self) -> List[MeasRepUeNotificationNrSCsNrSCellInfo]: + """Gets the nr_s_cell_info of this MeasRepUeNotificationNrSCs. + + Secondary serving cell(s) info. # noqa: E501 + + :return: The nr_s_cell_info of this MeasRepUeNotificationNrSCs. + :rtype: List[MeasRepUeNotificationNrSCsNrSCellInfo] + """ + return self._nr_s_cell_info + + @nr_s_cell_info.setter + def nr_s_cell_info(self, nr_s_cell_info: List[MeasRepUeNotificationNrSCsNrSCellInfo]): + """Sets the nr_s_cell_info of this MeasRepUeNotificationNrSCs. + + Secondary serving cell(s) info. # noqa: E501 + + :param nr_s_cell_info: The nr_s_cell_info of this MeasRepUeNotificationNrSCs. + :type nr_s_cell_info: List[MeasRepUeNotificationNrSCsNrSCellInfo] + """ + if nr_s_cell_info is None: + raise ValueError("Invalid value for `nr_s_cell_info`, must not be `None`") # noqa: E501 + + self._nr_s_cell_info = nr_s_cell_info + + @property + def nr_s_cell_rsrp(self) -> int: + """Gets the nr_s_cell_rsrp of this MeasRepUeNotificationNrSCs. + + Reference Signal Received Power measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_s_cell_rsrp of this MeasRepUeNotificationNrSCs. + :rtype: int + """ + return self._nr_s_cell_rsrp + + @nr_s_cell_rsrp.setter + def nr_s_cell_rsrp(self, nr_s_cell_rsrp: int): + """Sets the nr_s_cell_rsrp of this MeasRepUeNotificationNrSCs. + + Reference Signal Received Power measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_s_cell_rsrp: The nr_s_cell_rsrp of this MeasRepUeNotificationNrSCs. + :type nr_s_cell_rsrp: int + """ + + self._nr_s_cell_rsrp = nr_s_cell_rsrp + + @property + def nr_s_cell_rsrq(self) -> int: + """Gets the nr_s_cell_rsrq of this MeasRepUeNotificationNrSCs. + + Reference Signal Received Quality measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_s_cell_rsrq of this MeasRepUeNotificationNrSCs. + :rtype: int + """ + return self._nr_s_cell_rsrq + + @nr_s_cell_rsrq.setter + def nr_s_cell_rsrq(self, nr_s_cell_rsrq: int): + """Sets the nr_s_cell_rsrq of this MeasRepUeNotificationNrSCs. + + Reference Signal Received Quality measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_s_cell_rsrq: The nr_s_cell_rsrq of this MeasRepUeNotificationNrSCs. + :type nr_s_cell_rsrq: int + """ + + self._nr_s_cell_rsrq = nr_s_cell_rsrq + + @property + def nr_s_cell_rssi(self) -> int: + """Gets the nr_s_cell_rssi of this MeasRepUeNotificationNrSCs. + + Reference signal SINR measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :return: The nr_s_cell_rssi of this MeasRepUeNotificationNrSCs. + :rtype: int + """ + return self._nr_s_cell_rssi + + @nr_s_cell_rssi.setter + def nr_s_cell_rssi(self, nr_s_cell_rssi: int): + """Sets the nr_s_cell_rssi of this MeasRepUeNotificationNrSCs. + + Reference signal SINR measurement according to mapping table in ETSI TS 138.133 [i.14]. # noqa: E501 + + :param nr_s_cell_rssi: The nr_s_cell_rssi of this MeasRepUeNotificationNrSCs. + :type nr_s_cell_rssi: int + """ + + self._nr_s_cell_rssi = nr_s_cell_rssi diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs_nr_s_cell_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs_nr_s_cell_info.py new file mode 100644 index 0000000..6dd572d --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_notification_nr_scs_nr_s_cell_info.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.nr_cell_id import NrCellId # noqa: F401,E501 +from swagger_server.models.plmn import Plmn # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeNotificationNrSCsNrSCellInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nr_s_cell_gid: NrCellId=None, nr_s_cell_plmn: List[Plmn]=None): # noqa: E501 + """MeasRepUeNotificationNrSCsNrSCellInfo - a model defined in Swagger + + :param nr_s_cell_gid: The nr_s_cell_gid of this MeasRepUeNotificationNrSCsNrSCellInfo. # noqa: E501 + :type nr_s_cell_gid: NrCellId + :param nr_s_cell_plmn: The nr_s_cell_plmn of this MeasRepUeNotificationNrSCsNrSCellInfo. # noqa: E501 + :type nr_s_cell_plmn: List[Plmn] + """ + self.swagger_types = { + 'nr_s_cell_gid': NrCellId, + 'nr_s_cell_plmn': List[Plmn] + } + + self.attribute_map = { + 'nr_s_cell_gid': 'nrSCellGId', + 'nr_s_cell_plmn': 'nrSCellPlmn' + } + self._nr_s_cell_gid = nr_s_cell_gid + self._nr_s_cell_plmn = nr_s_cell_plmn + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeNotificationNrSCsNrSCellInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeNotification_nrSCs_nrSCellInfo of this MeasRepUeNotificationNrSCsNrSCellInfo. # noqa: E501 + :rtype: MeasRepUeNotificationNrSCsNrSCellInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def nr_s_cell_gid(self) -> NrCellId: + """Gets the nr_s_cell_gid of this MeasRepUeNotificationNrSCsNrSCellInfo. + + + :return: The nr_s_cell_gid of this MeasRepUeNotificationNrSCsNrSCellInfo. + :rtype: NrCellId + """ + return self._nr_s_cell_gid + + @nr_s_cell_gid.setter + def nr_s_cell_gid(self, nr_s_cell_gid: NrCellId): + """Sets the nr_s_cell_gid of this MeasRepUeNotificationNrSCsNrSCellInfo. + + + :param nr_s_cell_gid: The nr_s_cell_gid of this MeasRepUeNotificationNrSCsNrSCellInfo. + :type nr_s_cell_gid: NrCellId + """ + + self._nr_s_cell_gid = nr_s_cell_gid + + @property + def nr_s_cell_plmn(self) -> List[Plmn]: + """Gets the nr_s_cell_plmn of this MeasRepUeNotificationNrSCsNrSCellInfo. + + Public land mobile network identities. # noqa: E501 + + :return: The nr_s_cell_plmn of this MeasRepUeNotificationNrSCsNrSCellInfo. + :rtype: List[Plmn] + """ + return self._nr_s_cell_plmn + + @nr_s_cell_plmn.setter + def nr_s_cell_plmn(self, nr_s_cell_plmn: List[Plmn]): + """Sets the nr_s_cell_plmn of this MeasRepUeNotificationNrSCsNrSCellInfo. + + Public land mobile network identities. # noqa: E501 + + :param nr_s_cell_plmn: The nr_s_cell_plmn of this MeasRepUeNotificationNrSCsNrSCellInfo. + :type nr_s_cell_plmn: List[Plmn] + """ + + self._nr_s_cell_plmn = nr_s_cell_plmn diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription.py new file mode 100644 index 0000000..6ab8e45 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.meas_rep_ue_subscription_filter_criteria_assoc_tri import MeasRepUeSubscriptionFilterCriteriaAssocTri # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_assoc_tri: MeasRepUeSubscriptionFilterCriteriaAssocTri=None, subscription_type: str=None): # noqa: E501 + """MeasRepUeSubscription - a model defined in Swagger + + :param links: The links of this MeasRepUeSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this MeasRepUeSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this MeasRepUeSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_assoc_tri: The filter_criteria_assoc_tri of this MeasRepUeSubscription. # noqa: E501 + :type filter_criteria_assoc_tri: MeasRepUeSubscriptionFilterCriteriaAssocTri + :param subscription_type: The subscription_type of this MeasRepUeSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_assoc_tri': MeasRepUeSubscriptionFilterCriteriaAssocTri, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_assoc_tri': 'filterCriteriaAssocTri', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_assoc_tri = filter_criteria_assoc_tri + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeSubscription of this MeasRepUeSubscription. # noqa: E501 + :rtype: MeasRepUeSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this MeasRepUeSubscription. + + + :return: The links of this MeasRepUeSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this MeasRepUeSubscription. + + + :param links: The links of this MeasRepUeSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this MeasRepUeSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this MeasRepUeSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this MeasRepUeSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this MeasRepUeSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this MeasRepUeSubscription. + + + :return: The expiry_deadline of this MeasRepUeSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this MeasRepUeSubscription. + + + :param expiry_deadline: The expiry_deadline of this MeasRepUeSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_assoc_tri(self) -> MeasRepUeSubscriptionFilterCriteriaAssocTri: + """Gets the filter_criteria_assoc_tri of this MeasRepUeSubscription. + + + :return: The filter_criteria_assoc_tri of this MeasRepUeSubscription. + :rtype: MeasRepUeSubscriptionFilterCriteriaAssocTri + """ + return self._filter_criteria_assoc_tri + + @filter_criteria_assoc_tri.setter + def filter_criteria_assoc_tri(self, filter_criteria_assoc_tri: MeasRepUeSubscriptionFilterCriteriaAssocTri): + """Sets the filter_criteria_assoc_tri of this MeasRepUeSubscription. + + + :param filter_criteria_assoc_tri: The filter_criteria_assoc_tri of this MeasRepUeSubscription. + :type filter_criteria_assoc_tri: MeasRepUeSubscriptionFilterCriteriaAssocTri + """ + if filter_criteria_assoc_tri is None: + raise ValueError("Invalid value for `filter_criteria_assoc_tri`, must not be `None`") # noqa: E501 + + self._filter_criteria_assoc_tri = filter_criteria_assoc_tri + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this MeasRepUeSubscription. + + Shall be set to \"MeasRepUeSubscription\". # noqa: E501 + + :return: The subscription_type of this MeasRepUeSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this MeasRepUeSubscription. + + Shall be set to \"MeasRepUeSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this MeasRepUeSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription_filter_criteria_assoc_tri.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription_filter_criteria_assoc_tri.py new file mode 100644 index 0000000..e03b279 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_rep_ue_subscription_filter_criteria_assoc_tri.py @@ -0,0 +1,151 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.trigger import Trigger # noqa: F401,E501 +from swagger_server import util + + +class MeasRepUeSubscriptionFilterCriteriaAssocTri(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, associate_id: List[AssociateId]=None, ecgi: List[Ecgi]=None, trigger: List[Trigger]=None): # noqa: E501 + """MeasRepUeSubscriptionFilterCriteriaAssocTri - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. # noqa: E501 + :type app_instance_id: str + :param associate_id: The associate_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this MeasRepUeSubscriptionFilterCriteriaAssocTri. # noqa: E501 + :type ecgi: List[Ecgi] + :param trigger: The trigger of this MeasRepUeSubscriptionFilterCriteriaAssocTri. # noqa: E501 + :type trigger: List[Trigger] + """ + self.swagger_types = { + 'app_instance_id': str, + 'associate_id': List[AssociateId], + 'ecgi': List[Ecgi], + 'trigger': List[Trigger] + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 'trigger': 'trigger' + } + self._app_instance_id = app_instance_id + self._associate_id = associate_id + self._ecgi = ecgi + self._trigger = trigger + + @classmethod + def from_dict(cls, dikt) -> 'MeasRepUeSubscriptionFilterCriteriaAssocTri': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasRepUeSubscription_filterCriteriaAssocTri of this MeasRepUeSubscriptionFilterCriteriaAssocTri. # noqa: E501 + :rtype: MeasRepUeSubscriptionFilterCriteriaAssocTri + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :type app_instance_id: str + """ + + self._app_instance_id = app_instance_id + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :type ecgi: List[Ecgi] + """ + + self._ecgi = ecgi + + @property + def trigger(self) -> List[Trigger]: + """Gets the trigger of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + Corresponds to a specific E-UTRAN UE Measurement Report trigger. # noqa: E501 + + :return: The trigger of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :rtype: List[Trigger] + """ + return self._trigger + + @trigger.setter + def trigger(self, trigger: List[Trigger]): + """Sets the trigger of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + + Corresponds to a specific E-UTRAN UE Measurement Report trigger. # noqa: E501 + + :param trigger: The trigger of this MeasRepUeSubscriptionFilterCriteriaAssocTri. + :type trigger: List[Trigger] + """ + + self._trigger = trigger diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_notification.py new file mode 100644 index 0000000..b1c78de --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_notification.py @@ -0,0 +1,181 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class MeasTaNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ecgi: Ecgi=None, notification_type: str=None, time_stamp: TimeStamp=None, timing_advance: int=None): # noqa: E501 + """MeasTaNotification - a model defined in Swagger + + :param associate_id: The associate_id of this MeasTaNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this MeasTaNotification. # noqa: E501 + :type ecgi: Ecgi + :param notification_type: The notification_type of this MeasTaNotification. # noqa: E501 + :type notification_type: str + :param time_stamp: The time_stamp of this MeasTaNotification. # noqa: E501 + :type time_stamp: TimeStamp + :param timing_advance: The timing_advance of this MeasTaNotification. # noqa: E501 + :type timing_advance: int + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ecgi': Ecgi, + 'notification_type': str, + 'time_stamp': TimeStamp, + 'timing_advance': int + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 'notification_type': 'notificationType', + 'time_stamp': 'timeStamp', + 'timing_advance': 'timingAdvance' + } + self._associate_id = associate_id + self._ecgi = ecgi + self._notification_type = notification_type + self._time_stamp = time_stamp + self._timing_advance = timing_advance + + @classmethod + def from_dict(cls, dikt) -> 'MeasTaNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasTaNotification of this MeasTaNotification. # noqa: E501 + :rtype: MeasTaNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this MeasTaNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this MeasTaNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this MeasTaNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this MeasTaNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this MeasTaNotification. + + + :return: The ecgi of this MeasTaNotification. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this MeasTaNotification. + + + :param ecgi: The ecgi of this MeasTaNotification. + :type ecgi: Ecgi + """ + if ecgi is None: + raise ValueError("Invalid value for `ecgi`, must not be `None`") # noqa: E501 + + self._ecgi = ecgi + + @property + def notification_type(self) -> str: + """Gets the notification_type of this MeasTaNotification. + + Shall be set to \"MeasTaNotification\". # noqa: E501 + + :return: The notification_type of this MeasTaNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this MeasTaNotification. + + Shall be set to \"MeasTaNotification\". # noqa: E501 + + :param notification_type: The notification_type of this MeasTaNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this MeasTaNotification. + + + :return: The time_stamp of this MeasTaNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this MeasTaNotification. + + + :param time_stamp: The time_stamp of this MeasTaNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp + + @property + def timing_advance(self) -> int: + """Gets the timing_advance of this MeasTaNotification. + + The timing advance as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :return: The timing_advance of this MeasTaNotification. + :rtype: int + """ + return self._timing_advance + + @timing_advance.setter + def timing_advance(self, timing_advance: int): + """Sets the timing_advance of this MeasTaNotification. + + The timing advance as defined in ETSI TS 136 214 [i.5]. # noqa: E501 + + :param timing_advance: The timing_advance of this MeasTaNotification. + :type timing_advance: int + """ + if timing_advance is None: + raise ValueError("Invalid value for `timing_advance`, must not be `None`") # noqa: E501 + + self._timing_advance = timing_advance diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_subscription.py new file mode 100644 index 0000000..7130ac3 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/meas_ta_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_filter_criteria_assoc import CaReconfSubscriptionFilterCriteriaAssoc # noqa: F401,E501 +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class MeasTaSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc=None, subscription_type: str=None): # noqa: E501 + """MeasTaSubscription - a model defined in Swagger + + :param links: The links of this MeasTaSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this MeasTaSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this MeasTaSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_assoc: The filter_criteria_assoc of this MeasTaSubscription. # noqa: E501 + :type filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc + :param subscription_type: The subscription_type of this MeasTaSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_assoc': CaReconfSubscriptionFilterCriteriaAssoc, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_assoc': 'filterCriteriaAssoc', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_assoc = filter_criteria_assoc + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'MeasTaSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The MeasTaSubscription of this MeasTaSubscription. # noqa: E501 + :rtype: MeasTaSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this MeasTaSubscription. + + + :return: The links of this MeasTaSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this MeasTaSubscription. + + + :param links: The links of this MeasTaSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this MeasTaSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this MeasTaSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this MeasTaSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this MeasTaSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this MeasTaSubscription. + + + :return: The expiry_deadline of this MeasTaSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this MeasTaSubscription. + + + :param expiry_deadline: The expiry_deadline of this MeasTaSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_assoc(self) -> CaReconfSubscriptionFilterCriteriaAssoc: + """Gets the filter_criteria_assoc of this MeasTaSubscription. + + + :return: The filter_criteria_assoc of this MeasTaSubscription. + :rtype: CaReconfSubscriptionFilterCriteriaAssoc + """ + return self._filter_criteria_assoc + + @filter_criteria_assoc.setter + def filter_criteria_assoc(self, filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc): + """Sets the filter_criteria_assoc of this MeasTaSubscription. + + + :param filter_criteria_assoc: The filter_criteria_assoc of this MeasTaSubscription. + :type filter_criteria_assoc: CaReconfSubscriptionFilterCriteriaAssoc + """ + if filter_criteria_assoc is None: + raise ValueError("Invalid value for `filter_criteria_assoc`, must not be `None`") # noqa: E501 + + self._filter_criteria_assoc = filter_criteria_assoc + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this MeasTaSubscription. + + Shall be set to \"MeasTaSubscription\". # noqa: E501 + + :return: The subscription_type of this MeasTaSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this MeasTaSubscription. + + Shall be set to \"MeasTaSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this MeasTaSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/n_rcgi.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/n_rcgi.py new file mode 100644 index 0000000..092d08f --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/n_rcgi.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.nr_cell_id import NrCellId # noqa: F401,E501 +from swagger_server.models.plmn import Plmn # noqa: F401,E501 +from swagger_server import util + + +class NRcgi(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nrcell_id: NrCellId=None, plmn: Plmn=None): # noqa: E501 + """NRcgi - a model defined in Swagger + + :param nrcell_id: The nrcell_id of this NRcgi. # noqa: E501 + :type nrcell_id: NrCellId + :param plmn: The plmn of this NRcgi. # noqa: E501 + :type plmn: Plmn + """ + self.swagger_types = { + 'nrcell_id': NrCellId, + 'plmn': Plmn + } + + self.attribute_map = { + 'nrcell_id': 'nrcellId', + 'plmn': 'plmn' + } + self._nrcell_id = nrcell_id + self._plmn = plmn + + @classmethod + def from_dict(cls, dikt) -> 'NRcgi': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NRcgi of this NRcgi. # noqa: E501 + :rtype: NRcgi + """ + return util.deserialize_model(dikt, cls) + + @property + def nrcell_id(self) -> NrCellId: + """Gets the nrcell_id of this NRcgi. + + + :return: The nrcell_id of this NRcgi. + :rtype: NrCellId + """ + return self._nrcell_id + + @nrcell_id.setter + def nrcell_id(self, nrcell_id: NrCellId): + """Sets the nrcell_id of this NRcgi. + + + :param nrcell_id: The nrcell_id of this NRcgi. + :type nrcell_id: NrCellId + """ + if nrcell_id is None: + raise ValueError("Invalid value for `nrcell_id`, must not be `None`") # noqa: E501 + + self._nrcell_id = nrcell_id + + @property + def plmn(self) -> Plmn: + """Gets the plmn of this NRcgi. + + + :return: The plmn of this NRcgi. + :rtype: Plmn + """ + return self._plmn + + @plmn.setter + def plmn(self, plmn: Plmn): + """Sets the plmn of this NRcgi. + + + :param plmn: The plmn of this NRcgi. + :type plmn: Plmn + """ + if plmn is None: + raise ValueError("Invalid value for `plmn`, must not be `None`") # noqa: E501 + + self._plmn = plmn diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_cell_id.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_cell_id.py new file mode 100644 index 0000000..ad69986 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_cell_id.py @@ -0,0 +1,36 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class NrCellId(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self): # noqa: E501 + """NrCellId - a model defined in Swagger + + """ + self.swagger_types = { + } + + self.attribute_map = { + } + + @classmethod + def from_dict(cls, dikt) -> 'NrCellId': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrCellId of this NrCellId. # noqa: E501 + :rtype: NrCellId + """ + return util.deserialize_model(dikt, cls) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification.py new file mode 100644 index 0000000..785c42a --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification.py @@ -0,0 +1,238 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.nr_meas_rep_ue_notification_eutra_neigh_cell_meas_info import NrMeasRepUeNotificationEutraNeighCellMeasInfo # noqa: F401,E501 +from swagger_server.models.nr_meas_rep_ue_notification_nr_neigh_cell_meas_info import NrMeasRepUeNotificationNrNeighCellMeasInfo # noqa: F401,E501 +from swagger_server.models.nr_meas_rep_ue_notification_serv_cell_meas_info import NrMeasRepUeNotificationServCellMeasInfo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server.models.trigger_nr import TriggerNr # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, eutra_neigh_cell_meas_info: List[NrMeasRepUeNotificationEutraNeighCellMeasInfo]=None, notification_type: str=None, nr_neigh_cell_meas_info: List[NrMeasRepUeNotificationNrNeighCellMeasInfo]=None, serv_cell_meas_info: List[NrMeasRepUeNotificationServCellMeasInfo]=None, time_stamp: TimeStamp=None, trigger_nr: TriggerNr=None): # noqa: E501 + """NrMeasRepUeNotification - a model defined in Swagger + + :param associate_id: The associate_id of this NrMeasRepUeNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param eutra_neigh_cell_meas_info: The eutra_neigh_cell_meas_info of this NrMeasRepUeNotification. # noqa: E501 + :type eutra_neigh_cell_meas_info: List[NrMeasRepUeNotificationEutraNeighCellMeasInfo] + :param notification_type: The notification_type of this NrMeasRepUeNotification. # noqa: E501 + :type notification_type: str + :param nr_neigh_cell_meas_info: The nr_neigh_cell_meas_info of this NrMeasRepUeNotification. # noqa: E501 + :type nr_neigh_cell_meas_info: List[NrMeasRepUeNotificationNrNeighCellMeasInfo] + :param serv_cell_meas_info: The serv_cell_meas_info of this NrMeasRepUeNotification. # noqa: E501 + :type serv_cell_meas_info: List[NrMeasRepUeNotificationServCellMeasInfo] + :param time_stamp: The time_stamp of this NrMeasRepUeNotification. # noqa: E501 + :type time_stamp: TimeStamp + :param trigger_nr: The trigger_nr of this NrMeasRepUeNotification. # noqa: E501 + :type trigger_nr: TriggerNr + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'eutra_neigh_cell_meas_info': List[NrMeasRepUeNotificationEutraNeighCellMeasInfo], + 'notification_type': str, + 'nr_neigh_cell_meas_info': List[NrMeasRepUeNotificationNrNeighCellMeasInfo], + 'serv_cell_meas_info': List[NrMeasRepUeNotificationServCellMeasInfo], + 'time_stamp': TimeStamp, + 'trigger_nr': TriggerNr + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'eutra_neigh_cell_meas_info': 'eutraNeighCellMeasInfo', + 'notification_type': 'notificationType', + 'nr_neigh_cell_meas_info': 'nrNeighCellMeasInfo', + 'serv_cell_meas_info': 'servCellMeasInfo', + 'time_stamp': 'timeStamp', + 'trigger_nr': 'triggerNr' + } + self._associate_id = associate_id + self._eutra_neigh_cell_meas_info = eutra_neigh_cell_meas_info + self._notification_type = notification_type + self._nr_neigh_cell_meas_info = nr_neigh_cell_meas_info + self._serv_cell_meas_info = serv_cell_meas_info + self._time_stamp = time_stamp + self._trigger_nr = trigger_nr + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeNotification of this NrMeasRepUeNotification. # noqa: E501 + :rtype: NrMeasRepUeNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this NrMeasRepUeNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this NrMeasRepUeNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this NrMeasRepUeNotification. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this NrMeasRepUeNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def eutra_neigh_cell_meas_info(self) -> List[NrMeasRepUeNotificationEutraNeighCellMeasInfo]: + """Gets the eutra_neigh_cell_meas_info of this NrMeasRepUeNotification. + + This parameter can be repeated to contain measurement information of all the neighbouring cells up to N. It shall not be included if nrNeighCellMeasInfo is included. # noqa: E501 + + :return: The eutra_neigh_cell_meas_info of this NrMeasRepUeNotification. + :rtype: List[NrMeasRepUeNotificationEutraNeighCellMeasInfo] + """ + return self._eutra_neigh_cell_meas_info + + @eutra_neigh_cell_meas_info.setter + def eutra_neigh_cell_meas_info(self, eutra_neigh_cell_meas_info: List[NrMeasRepUeNotificationEutraNeighCellMeasInfo]): + """Sets the eutra_neigh_cell_meas_info of this NrMeasRepUeNotification. + + This parameter can be repeated to contain measurement information of all the neighbouring cells up to N. It shall not be included if nrNeighCellMeasInfo is included. # noqa: E501 + + :param eutra_neigh_cell_meas_info: The eutra_neigh_cell_meas_info of this NrMeasRepUeNotification. + :type eutra_neigh_cell_meas_info: List[NrMeasRepUeNotificationEutraNeighCellMeasInfo] + """ + + self._eutra_neigh_cell_meas_info = eutra_neigh_cell_meas_info + + @property + def notification_type(self) -> str: + """Gets the notification_type of this NrMeasRepUeNotification. + + Shall be set to \"NrMeasRepUeNotification\". # noqa: E501 + + :return: The notification_type of this NrMeasRepUeNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this NrMeasRepUeNotification. + + Shall be set to \"NrMeasRepUeNotification\". # noqa: E501 + + :param notification_type: The notification_type of this NrMeasRepUeNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def nr_neigh_cell_meas_info(self) -> List[NrMeasRepUeNotificationNrNeighCellMeasInfo]: + """Gets the nr_neigh_cell_meas_info of this NrMeasRepUeNotification. + + This parameter can be repeated to contain measurement information of all the neighbouring cells up to N. It shall not be included if eutraNeighCellMeasInfo is included. # noqa: E501 + + :return: The nr_neigh_cell_meas_info of this NrMeasRepUeNotification. + :rtype: List[NrMeasRepUeNotificationNrNeighCellMeasInfo] + """ + return self._nr_neigh_cell_meas_info + + @nr_neigh_cell_meas_info.setter + def nr_neigh_cell_meas_info(self, nr_neigh_cell_meas_info: List[NrMeasRepUeNotificationNrNeighCellMeasInfo]): + """Sets the nr_neigh_cell_meas_info of this NrMeasRepUeNotification. + + This parameter can be repeated to contain measurement information of all the neighbouring cells up to N. It shall not be included if eutraNeighCellMeasInfo is included. # noqa: E501 + + :param nr_neigh_cell_meas_info: The nr_neigh_cell_meas_info of this NrMeasRepUeNotification. + :type nr_neigh_cell_meas_info: List[NrMeasRepUeNotificationNrNeighCellMeasInfo] + """ + + self._nr_neigh_cell_meas_info = nr_neigh_cell_meas_info + + @property + def serv_cell_meas_info(self) -> List[NrMeasRepUeNotificationServCellMeasInfo]: + """Gets the serv_cell_meas_info of this NrMeasRepUeNotification. + + This parameter can be repeated to contain information of all the serving cells up to N. # noqa: E501 + + :return: The serv_cell_meas_info of this NrMeasRepUeNotification. + :rtype: List[NrMeasRepUeNotificationServCellMeasInfo] + """ + return self._serv_cell_meas_info + + @serv_cell_meas_info.setter + def serv_cell_meas_info(self, serv_cell_meas_info: List[NrMeasRepUeNotificationServCellMeasInfo]): + """Sets the serv_cell_meas_info of this NrMeasRepUeNotification. + + This parameter can be repeated to contain information of all the serving cells up to N. # noqa: E501 + + :param serv_cell_meas_info: The serv_cell_meas_info of this NrMeasRepUeNotification. + :type serv_cell_meas_info: List[NrMeasRepUeNotificationServCellMeasInfo] + """ + + self._serv_cell_meas_info = serv_cell_meas_info + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this NrMeasRepUeNotification. + + + :return: The time_stamp of this NrMeasRepUeNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this NrMeasRepUeNotification. + + + :param time_stamp: The time_stamp of this NrMeasRepUeNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp + + @property + def trigger_nr(self) -> TriggerNr: + """Gets the trigger_nr of this NrMeasRepUeNotification. + + + :return: The trigger_nr of this NrMeasRepUeNotification. + :rtype: TriggerNr + """ + return self._trigger_nr + + @trigger_nr.setter + def trigger_nr(self, trigger_nr: TriggerNr): + """Sets the trigger_nr of this NrMeasRepUeNotification. + + + :param trigger_nr: The trigger_nr of this NrMeasRepUeNotification. + :type trigger_nr: TriggerNr + """ + if trigger_nr is None: + raise ValueError("Invalid value for `trigger_nr`, must not be `None`") # noqa: E501 + + self._trigger_nr = trigger_nr diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_eutra_neigh_cell_meas_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_eutra_neigh_cell_meas_info.py new file mode 100644 index 0000000..f5f3548 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_eutra_neigh_cell_meas_info.py @@ -0,0 +1,147 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeNotificationEutraNeighCellMeasInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ecgi: Ecgi=None, rsrp: int=None, rsrq: int=None, sinr: int=None): # noqa: E501 + """NrMeasRepUeNotificationEutraNeighCellMeasInfo - a model defined in Swagger + + :param ecgi: The ecgi of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. # noqa: E501 + :type ecgi: Ecgi + :param rsrp: The rsrp of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. # noqa: E501 + :type rsrp: int + :param rsrq: The rsrq of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. # noqa: E501 + :type rsrq: int + :param sinr: The sinr of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. # noqa: E501 + :type sinr: int + """ + self.swagger_types = { + 'ecgi': Ecgi, + 'rsrp': int, + 'rsrq': int, + 'sinr': int + } + + self.attribute_map = { + 'ecgi': 'ecgi', + 'rsrp': 'rsrp', + 'rsrq': 'rsrq', + 'sinr': 'sinr' + } + self._ecgi = ecgi + self._rsrp = rsrp + self._rsrq = rsrq + self._sinr = sinr + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeNotificationEutraNeighCellMeasInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeNotification_eutraNeighCellMeasInfo of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. # noqa: E501 + :rtype: NrMeasRepUeNotificationEutraNeighCellMeasInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + + :return: The ecgi of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + + :param ecgi: The ecgi of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :type ecgi: Ecgi + """ + + self._ecgi = ecgi + + @property + def rsrp(self) -> int: + """Gets the rsrp of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :return: The rsrp of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :rtype: int + """ + return self._rsrp + + @rsrp.setter + def rsrp(self, rsrp: int): + """Sets the rsrp of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + Reference Signal Received Power as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :param rsrp: The rsrp of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :type rsrp: int + """ + + self._rsrp = rsrp + + @property + def rsrq(self) -> int: + """Gets the rsrq of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :return: The rsrq of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :rtype: int + """ + return self._rsrq + + @rsrq.setter + def rsrq(self, rsrq: int): + """Sets the rsrq of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :param rsrq: The rsrq of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :type rsrq: int + """ + + self._rsrq = rsrq + + @property + def sinr(self) -> int: + """Gets the sinr of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + Reference Signal plus Interference Noise Ratio as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :return: The sinr of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :rtype: int + """ + return self._sinr + + @sinr.setter + def sinr(self, sinr: int): + """Sets the sinr of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + + Reference Signal plus Interference Noise Ratio as defined in ETSI TS 138 331 [i.13]. # noqa: E501 + + :param sinr: The sinr of this NrMeasRepUeNotificationEutraNeighCellMeasInfo. + :type sinr: int + """ + + self._sinr = sinr diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_n_cell.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_n_cell.py new file mode 100644 index 0000000..31aaaf2 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_n_cell.py @@ -0,0 +1,116 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr # noqa: F401,E501 +from swagger_server.models.rs_index_results import RsIndexResults # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeNotificationNCell(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr=None, meas_quantity_results_ssb_cell: MeasQuantityResultsNr=None, rs_index_results: RsIndexResults=None): # noqa: E501 + """NrMeasRepUeNotificationNCell - a model defined in Swagger + + :param meas_quantity_results_csi_rs_cell: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNCell. # noqa: E501 + :type meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr + :param meas_quantity_results_ssb_cell: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNCell. # noqa: E501 + :type meas_quantity_results_ssb_cell: MeasQuantityResultsNr + :param rs_index_results: The rs_index_results of this NrMeasRepUeNotificationNCell. # noqa: E501 + :type rs_index_results: RsIndexResults + """ + self.swagger_types = { + 'meas_quantity_results_csi_rs_cell': MeasQuantityResultsNr, + 'meas_quantity_results_ssb_cell': MeasQuantityResultsNr, + 'rs_index_results': RsIndexResults + } + + self.attribute_map = { + 'meas_quantity_results_csi_rs_cell': 'measQuantityResultsCsiRsCell', + 'meas_quantity_results_ssb_cell': 'measQuantityResultsSsbCell', + 'rs_index_results': 'rsIndexResults' + } + self._meas_quantity_results_csi_rs_cell = meas_quantity_results_csi_rs_cell + self._meas_quantity_results_ssb_cell = meas_quantity_results_ssb_cell + self._rs_index_results = rs_index_results + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeNotificationNCell': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeNotification_nCell of this NrMeasRepUeNotificationNCell. # noqa: E501 + :rtype: NrMeasRepUeNotificationNCell + """ + return util.deserialize_model(dikt, cls) + + @property + def meas_quantity_results_csi_rs_cell(self) -> MeasQuantityResultsNr: + """Gets the meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNCell. + + + :return: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNCell. + :rtype: MeasQuantityResultsNr + """ + return self._meas_quantity_results_csi_rs_cell + + @meas_quantity_results_csi_rs_cell.setter + def meas_quantity_results_csi_rs_cell(self, meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr): + """Sets the meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNCell. + + + :param meas_quantity_results_csi_rs_cell: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNCell. + :type meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr + """ + + self._meas_quantity_results_csi_rs_cell = meas_quantity_results_csi_rs_cell + + @property + def meas_quantity_results_ssb_cell(self) -> MeasQuantityResultsNr: + """Gets the meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNCell. + + + :return: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNCell. + :rtype: MeasQuantityResultsNr + """ + return self._meas_quantity_results_ssb_cell + + @meas_quantity_results_ssb_cell.setter + def meas_quantity_results_ssb_cell(self, meas_quantity_results_ssb_cell: MeasQuantityResultsNr): + """Sets the meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNCell. + + + :param meas_quantity_results_ssb_cell: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNCell. + :type meas_quantity_results_ssb_cell: MeasQuantityResultsNr + """ + + self._meas_quantity_results_ssb_cell = meas_quantity_results_ssb_cell + + @property + def rs_index_results(self) -> RsIndexResults: + """Gets the rs_index_results of this NrMeasRepUeNotificationNCell. + + + :return: The rs_index_results of this NrMeasRepUeNotificationNCell. + :rtype: RsIndexResults + """ + return self._rs_index_results + + @rs_index_results.setter + def rs_index_results(self, rs_index_results: RsIndexResults): + """Sets the rs_index_results of this NrMeasRepUeNotificationNCell. + + + :param rs_index_results: The rs_index_results of this NrMeasRepUeNotificationNCell. + :type rs_index_results: RsIndexResults + """ + + self._rs_index_results = rs_index_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_nr_neigh_cell_meas_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_nr_neigh_cell_meas_info.py new file mode 100644 index 0000000..c08448c --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_nr_neigh_cell_meas_info.py @@ -0,0 +1,143 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr # noqa: F401,E501 +from swagger_server.models.nr_cell_id import NrCellId # noqa: F401,E501 +from swagger_server.models.rs_index_results import RsIndexResults # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeNotificationNrNeighCellMeasInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr=None, meas_quantity_results_ssb_cell: MeasQuantityResultsNr=None, nrcgi: NrCellId=None, rs_index_results: RsIndexResults=None): # noqa: E501 + """NrMeasRepUeNotificationNrNeighCellMeasInfo - a model defined in Swagger + + :param meas_quantity_results_csi_rs_cell: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. # noqa: E501 + :type meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr + :param meas_quantity_results_ssb_cell: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. # noqa: E501 + :type meas_quantity_results_ssb_cell: MeasQuantityResultsNr + :param nrcgi: The nrcgi of this NrMeasRepUeNotificationNrNeighCellMeasInfo. # noqa: E501 + :type nrcgi: NrCellId + :param rs_index_results: The rs_index_results of this NrMeasRepUeNotificationNrNeighCellMeasInfo. # noqa: E501 + :type rs_index_results: RsIndexResults + """ + self.swagger_types = { + 'meas_quantity_results_csi_rs_cell': MeasQuantityResultsNr, + 'meas_quantity_results_ssb_cell': MeasQuantityResultsNr, + 'nrcgi': NrCellId, + 'rs_index_results': RsIndexResults + } + + self.attribute_map = { + 'meas_quantity_results_csi_rs_cell': 'measQuantityResultsCsiRsCell', + 'meas_quantity_results_ssb_cell': 'measQuantityResultsSsbCell', + 'nrcgi': 'nrcgi', + 'rs_index_results': 'rsIndexResults' + } + self._meas_quantity_results_csi_rs_cell = meas_quantity_results_csi_rs_cell + self._meas_quantity_results_ssb_cell = meas_quantity_results_ssb_cell + self._nrcgi = nrcgi + self._rs_index_results = rs_index_results + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeNotificationNrNeighCellMeasInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeNotification_nrNeighCellMeasInfo of this NrMeasRepUeNotificationNrNeighCellMeasInfo. # noqa: E501 + :rtype: NrMeasRepUeNotificationNrNeighCellMeasInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def meas_quantity_results_csi_rs_cell(self) -> MeasQuantityResultsNr: + """Gets the meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :return: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :rtype: MeasQuantityResultsNr + """ + return self._meas_quantity_results_csi_rs_cell + + @meas_quantity_results_csi_rs_cell.setter + def meas_quantity_results_csi_rs_cell(self, meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr): + """Sets the meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :param meas_quantity_results_csi_rs_cell: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :type meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr + """ + + self._meas_quantity_results_csi_rs_cell = meas_quantity_results_csi_rs_cell + + @property + def meas_quantity_results_ssb_cell(self) -> MeasQuantityResultsNr: + """Gets the meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :return: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :rtype: MeasQuantityResultsNr + """ + return self._meas_quantity_results_ssb_cell + + @meas_quantity_results_ssb_cell.setter + def meas_quantity_results_ssb_cell(self, meas_quantity_results_ssb_cell: MeasQuantityResultsNr): + """Sets the meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :param meas_quantity_results_ssb_cell: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :type meas_quantity_results_ssb_cell: MeasQuantityResultsNr + """ + + self._meas_quantity_results_ssb_cell = meas_quantity_results_ssb_cell + + @property + def nrcgi(self) -> NrCellId: + """Gets the nrcgi of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :return: The nrcgi of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :rtype: NrCellId + """ + return self._nrcgi + + @nrcgi.setter + def nrcgi(self, nrcgi: NrCellId): + """Sets the nrcgi of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :param nrcgi: The nrcgi of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :type nrcgi: NrCellId + """ + + self._nrcgi = nrcgi + + @property + def rs_index_results(self) -> RsIndexResults: + """Gets the rs_index_results of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :return: The rs_index_results of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :rtype: RsIndexResults + """ + return self._rs_index_results + + @rs_index_results.setter + def rs_index_results(self, rs_index_results: RsIndexResults): + """Sets the rs_index_results of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + + + :param rs_index_results: The rs_index_results of this NrMeasRepUeNotificationNrNeighCellMeasInfo. + :type rs_index_results: RsIndexResults + """ + + self._rs_index_results = rs_index_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_s_cell.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_s_cell.py new file mode 100644 index 0000000..2b58b60 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_s_cell.py @@ -0,0 +1,116 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr # noqa: F401,E501 +from swagger_server.models.rs_index_results import RsIndexResults # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeNotificationSCell(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr=None, meas_quantity_results_ssb_cell: MeasQuantityResultsNr=None, rs_index_results: RsIndexResults=None): # noqa: E501 + """NrMeasRepUeNotificationSCell - a model defined in Swagger + + :param meas_quantity_results_csi_rs_cell: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationSCell. # noqa: E501 + :type meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr + :param meas_quantity_results_ssb_cell: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationSCell. # noqa: E501 + :type meas_quantity_results_ssb_cell: MeasQuantityResultsNr + :param rs_index_results: The rs_index_results of this NrMeasRepUeNotificationSCell. # noqa: E501 + :type rs_index_results: RsIndexResults + """ + self.swagger_types = { + 'meas_quantity_results_csi_rs_cell': MeasQuantityResultsNr, + 'meas_quantity_results_ssb_cell': MeasQuantityResultsNr, + 'rs_index_results': RsIndexResults + } + + self.attribute_map = { + 'meas_quantity_results_csi_rs_cell': 'measQuantityResultsCsiRsCell', + 'meas_quantity_results_ssb_cell': 'measQuantityResultsSsbCell', + 'rs_index_results': 'rsIndexResults' + } + self._meas_quantity_results_csi_rs_cell = meas_quantity_results_csi_rs_cell + self._meas_quantity_results_ssb_cell = meas_quantity_results_ssb_cell + self._rs_index_results = rs_index_results + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeNotificationSCell': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeNotification_sCell of this NrMeasRepUeNotificationSCell. # noqa: E501 + :rtype: NrMeasRepUeNotificationSCell + """ + return util.deserialize_model(dikt, cls) + + @property + def meas_quantity_results_csi_rs_cell(self) -> MeasQuantityResultsNr: + """Gets the meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationSCell. + + + :return: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationSCell. + :rtype: MeasQuantityResultsNr + """ + return self._meas_quantity_results_csi_rs_cell + + @meas_quantity_results_csi_rs_cell.setter + def meas_quantity_results_csi_rs_cell(self, meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr): + """Sets the meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationSCell. + + + :param meas_quantity_results_csi_rs_cell: The meas_quantity_results_csi_rs_cell of this NrMeasRepUeNotificationSCell. + :type meas_quantity_results_csi_rs_cell: MeasQuantityResultsNr + """ + + self._meas_quantity_results_csi_rs_cell = meas_quantity_results_csi_rs_cell + + @property + def meas_quantity_results_ssb_cell(self) -> MeasQuantityResultsNr: + """Gets the meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationSCell. + + + :return: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationSCell. + :rtype: MeasQuantityResultsNr + """ + return self._meas_quantity_results_ssb_cell + + @meas_quantity_results_ssb_cell.setter + def meas_quantity_results_ssb_cell(self, meas_quantity_results_ssb_cell: MeasQuantityResultsNr): + """Sets the meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationSCell. + + + :param meas_quantity_results_ssb_cell: The meas_quantity_results_ssb_cell of this NrMeasRepUeNotificationSCell. + :type meas_quantity_results_ssb_cell: MeasQuantityResultsNr + """ + + self._meas_quantity_results_ssb_cell = meas_quantity_results_ssb_cell + + @property + def rs_index_results(self) -> RsIndexResults: + """Gets the rs_index_results of this NrMeasRepUeNotificationSCell. + + + :return: The rs_index_results of this NrMeasRepUeNotificationSCell. + :rtype: RsIndexResults + """ + return self._rs_index_results + + @rs_index_results.setter + def rs_index_results(self, rs_index_results: RsIndexResults): + """Sets the rs_index_results of this NrMeasRepUeNotificationSCell. + + + :param rs_index_results: The rs_index_results of this NrMeasRepUeNotificationSCell. + :type rs_index_results: RsIndexResults + """ + + self._rs_index_results = rs_index_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_serv_cell_meas_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_serv_cell_meas_info.py new file mode 100644 index 0000000..b69d9ad --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_notification_serv_cell_meas_info.py @@ -0,0 +1,117 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.n_rcgi import NRcgi # noqa: F401,E501 +from swagger_server.models.nr_meas_rep_ue_notification_n_cell import NrMeasRepUeNotificationNCell # noqa: F401,E501 +from swagger_server.models.nr_meas_rep_ue_notification_s_cell import NrMeasRepUeNotificationSCell # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeNotificationServCellMeasInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, n_cell: NrMeasRepUeNotificationNCell=None, nrcgi: NRcgi=None, s_cell: NrMeasRepUeNotificationSCell=None): # noqa: E501 + """NrMeasRepUeNotificationServCellMeasInfo - a model defined in Swagger + + :param n_cell: The n_cell of this NrMeasRepUeNotificationServCellMeasInfo. # noqa: E501 + :type n_cell: NrMeasRepUeNotificationNCell + :param nrcgi: The nrcgi of this NrMeasRepUeNotificationServCellMeasInfo. # noqa: E501 + :type nrcgi: NRcgi + :param s_cell: The s_cell of this NrMeasRepUeNotificationServCellMeasInfo. # noqa: E501 + :type s_cell: NrMeasRepUeNotificationSCell + """ + self.swagger_types = { + 'n_cell': NrMeasRepUeNotificationNCell, + 'nrcgi': NRcgi, + 's_cell': NrMeasRepUeNotificationSCell + } + + self.attribute_map = { + 'n_cell': 'nCell', + 'nrcgi': 'nrcgi', + 's_cell': 'sCell' + } + self._n_cell = n_cell + self._nrcgi = nrcgi + self._s_cell = s_cell + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeNotificationServCellMeasInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeNotification_servCellMeasInfo of this NrMeasRepUeNotificationServCellMeasInfo. # noqa: E501 + :rtype: NrMeasRepUeNotificationServCellMeasInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def n_cell(self) -> NrMeasRepUeNotificationNCell: + """Gets the n_cell of this NrMeasRepUeNotificationServCellMeasInfo. + + + :return: The n_cell of this NrMeasRepUeNotificationServCellMeasInfo. + :rtype: NrMeasRepUeNotificationNCell + """ + return self._n_cell + + @n_cell.setter + def n_cell(self, n_cell: NrMeasRepUeNotificationNCell): + """Sets the n_cell of this NrMeasRepUeNotificationServCellMeasInfo. + + + :param n_cell: The n_cell of this NrMeasRepUeNotificationServCellMeasInfo. + :type n_cell: NrMeasRepUeNotificationNCell + """ + + self._n_cell = n_cell + + @property + def nrcgi(self) -> NRcgi: + """Gets the nrcgi of this NrMeasRepUeNotificationServCellMeasInfo. + + + :return: The nrcgi of this NrMeasRepUeNotificationServCellMeasInfo. + :rtype: NRcgi + """ + return self._nrcgi + + @nrcgi.setter + def nrcgi(self, nrcgi: NRcgi): + """Sets the nrcgi of this NrMeasRepUeNotificationServCellMeasInfo. + + + :param nrcgi: The nrcgi of this NrMeasRepUeNotificationServCellMeasInfo. + :type nrcgi: NRcgi + """ + + self._nrcgi = nrcgi + + @property + def s_cell(self) -> NrMeasRepUeNotificationSCell: + """Gets the s_cell of this NrMeasRepUeNotificationServCellMeasInfo. + + + :return: The s_cell of this NrMeasRepUeNotificationServCellMeasInfo. + :rtype: NrMeasRepUeNotificationSCell + """ + return self._s_cell + + @s_cell.setter + def s_cell(self, s_cell: NrMeasRepUeNotificationSCell): + """Sets the s_cell of this NrMeasRepUeNotificationServCellMeasInfo. + + + :param s_cell: The s_cell of this NrMeasRepUeNotificationServCellMeasInfo. + :type s_cell: NrMeasRepUeNotificationSCell + """ + + self._s_cell = s_cell diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription.py new file mode 100644 index 0000000..ce99a4c --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.nr_meas_rep_ue_subscription_filter_criteria_nr_mrs import NrMeasRepUeSubscriptionFilterCriteriaNrMrs # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_nr_mrs: NrMeasRepUeSubscriptionFilterCriteriaNrMrs=None, subscription_type: str=None): # noqa: E501 + """NrMeasRepUeSubscription - a model defined in Swagger + + :param links: The links of this NrMeasRepUeSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this NrMeasRepUeSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this NrMeasRepUeSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_nr_mrs: The filter_criteria_nr_mrs of this NrMeasRepUeSubscription. # noqa: E501 + :type filter_criteria_nr_mrs: NrMeasRepUeSubscriptionFilterCriteriaNrMrs + :param subscription_type: The subscription_type of this NrMeasRepUeSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_nr_mrs': NrMeasRepUeSubscriptionFilterCriteriaNrMrs, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_nr_mrs': 'filterCriteriaNrMrs', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_nr_mrs = filter_criteria_nr_mrs + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeSubscription of this NrMeasRepUeSubscription. # noqa: E501 + :rtype: NrMeasRepUeSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this NrMeasRepUeSubscription. + + + :return: The links of this NrMeasRepUeSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this NrMeasRepUeSubscription. + + + :param links: The links of this NrMeasRepUeSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this NrMeasRepUeSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this NrMeasRepUeSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this NrMeasRepUeSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this NrMeasRepUeSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this NrMeasRepUeSubscription. + + + :return: The expiry_deadline of this NrMeasRepUeSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this NrMeasRepUeSubscription. + + + :param expiry_deadline: The expiry_deadline of this NrMeasRepUeSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_nr_mrs(self) -> NrMeasRepUeSubscriptionFilterCriteriaNrMrs: + """Gets the filter_criteria_nr_mrs of this NrMeasRepUeSubscription. + + + :return: The filter_criteria_nr_mrs of this NrMeasRepUeSubscription. + :rtype: NrMeasRepUeSubscriptionFilterCriteriaNrMrs + """ + return self._filter_criteria_nr_mrs + + @filter_criteria_nr_mrs.setter + def filter_criteria_nr_mrs(self, filter_criteria_nr_mrs: NrMeasRepUeSubscriptionFilterCriteriaNrMrs): + """Sets the filter_criteria_nr_mrs of this NrMeasRepUeSubscription. + + + :param filter_criteria_nr_mrs: The filter_criteria_nr_mrs of this NrMeasRepUeSubscription. + :type filter_criteria_nr_mrs: NrMeasRepUeSubscriptionFilterCriteriaNrMrs + """ + if filter_criteria_nr_mrs is None: + raise ValueError("Invalid value for `filter_criteria_nr_mrs`, must not be `None`") # noqa: E501 + + self._filter_criteria_nr_mrs = filter_criteria_nr_mrs + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this NrMeasRepUeSubscription. + + Shall be set to \"NrMeasRepUeSubscription\". # noqa: E501 + + :return: The subscription_type of this NrMeasRepUeSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this NrMeasRepUeSubscription. + + Shall be set to \"NrMeasRepUeSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this NrMeasRepUeSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription_filter_criteria_nr_mrs.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription_filter_criteria_nr_mrs.py new file mode 100644 index 0000000..fe36135 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/nr_meas_rep_ue_subscription_filter_criteria_nr_mrs.py @@ -0,0 +1,151 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.n_rcgi import NRcgi # noqa: F401,E501 +from swagger_server.models.trigger_nr import TriggerNr # noqa: F401,E501 +from swagger_server import util + + +class NrMeasRepUeSubscriptionFilterCriteriaNrMrs(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, associate_id: List[AssociateId]=None, nrcgi: List[NRcgi]=None, trigger_nr: List[TriggerNr]=None): # noqa: E501 + """NrMeasRepUeSubscriptionFilterCriteriaNrMrs - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. # noqa: E501 + :type app_instance_id: str + :param associate_id: The associate_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. # noqa: E501 + :type associate_id: List[AssociateId] + :param nrcgi: The nrcgi of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. # noqa: E501 + :type nrcgi: List[NRcgi] + :param trigger_nr: The trigger_nr of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. # noqa: E501 + :type trigger_nr: List[TriggerNr] + """ + self.swagger_types = { + 'app_instance_id': str, + 'associate_id': List[AssociateId], + 'nrcgi': List[NRcgi], + 'trigger_nr': List[TriggerNr] + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'associate_id': 'associateId', + 'nrcgi': 'nrcgi', + 'trigger_nr': 'triggerNr' + } + self._app_instance_id = app_instance_id + self._associate_id = associate_id + self._nrcgi = nrcgi + self._trigger_nr = trigger_nr + + @classmethod + def from_dict(cls, dikt) -> 'NrMeasRepUeSubscriptionFilterCriteriaNrMrs': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The NrMeasRepUeSubscription_filterCriteriaNrMrs of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. # noqa: E501 + :rtype: NrMeasRepUeSubscriptionFilterCriteriaNrMrs + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :type app_instance_id: str + """ + + self._app_instance_id = app_instance_id + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def nrcgi(self) -> List[NRcgi]: + """Gets the nrcgi of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + NR Cell Global Identier. # noqa: E501 + + :return: The nrcgi of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :rtype: List[NRcgi] + """ + return self._nrcgi + + @nrcgi.setter + def nrcgi(self, nrcgi: List[NRcgi]): + """Sets the nrcgi of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + NR Cell Global Identier. # noqa: E501 + + :param nrcgi: The nrcgi of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :type nrcgi: List[NRcgi] + """ + + self._nrcgi = nrcgi + + @property + def trigger_nr(self) -> List[TriggerNr]: + """Gets the trigger_nr of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + Corresponds to a specific 5G UE Measurement Report trigger. # noqa: E501 + + :return: The trigger_nr of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :rtype: List[TriggerNr] + """ + return self._trigger_nr + + @trigger_nr.setter + def trigger_nr(self, trigger_nr: List[TriggerNr]): + """Sets the trigger_nr of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + + Corresponds to a specific 5G UE Measurement Report trigger. # noqa: E501 + + :param trigger_nr: The trigger_nr of this NrMeasRepUeSubscriptionFilterCriteriaNrMrs. + :type trigger_nr: List[TriggerNr] + """ + + self._trigger_nr = trigger_nr diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn.py new file mode 100644 index 0000000..a4b02be --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class Plmn(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, mcc: str=None, mnc: str=None): # noqa: E501 + """Plmn - a model defined in Swagger + + :param mcc: The mcc of this Plmn. # noqa: E501 + :type mcc: str + :param mnc: The mnc of this Plmn. # noqa: E501 + :type mnc: str + """ + self.swagger_types = { + 'mcc': str, + 'mnc': str + } + + self.attribute_map = { + 'mcc': 'mcc', + 'mnc': 'mnc' + } + self._mcc = mcc + self._mnc = mnc + + @classmethod + def from_dict(cls, dikt) -> 'Plmn': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The Plmn of this Plmn. # noqa: E501 + :rtype: Plmn + """ + return util.deserialize_model(dikt, cls) + + @property + def mcc(self) -> str: + """Gets the mcc of this Plmn. + + The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The mcc of this Plmn. + :rtype: str + """ + return self._mcc + + @mcc.setter + def mcc(self, mcc: str): + """Sets the mcc of this Plmn. + + The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param mcc: The mcc of this Plmn. + :type mcc: str + """ + if mcc is None: + raise ValueError("Invalid value for `mcc`, must not be `None`") # noqa: E501 + + self._mcc = mcc + + @property + def mnc(self) -> str: + """Gets the mnc of this Plmn. + + The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The mnc of this Plmn. + :rtype: str + """ + return self._mnc + + @mnc.setter + def mnc(self, mnc: str): + """Sets the mnc of this Plmn. + + The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param mnc: The mnc of this Plmn. + :type mnc: str + """ + if mnc is None: + raise ValueError("Invalid value for `mnc`, must not be `None`") # noqa: E501 + + self._mnc = mnc diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn_info.py new file mode 100644 index 0000000..2ef00f0 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/plmn_info.py @@ -0,0 +1,124 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.plmn import Plmn # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class PlmnInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, plmn: List[Plmn]=None, time_stamp: TimeStamp=None): # noqa: E501 + """PlmnInfo - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this PlmnInfo. # noqa: E501 + :type app_instance_id: str + :param plmn: The plmn of this PlmnInfo. # noqa: E501 + :type plmn: List[Plmn] + :param time_stamp: The time_stamp of this PlmnInfo. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'app_instance_id': str, + 'plmn': List[Plmn], + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'plmn': 'plmn', + 'time_stamp': 'timeStamp' + } + self._app_instance_id = app_instance_id + self._plmn = plmn + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'PlmnInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The PlmnInfo of this PlmnInfo. # noqa: E501 + :rtype: PlmnInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this PlmnInfo. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this PlmnInfo. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this PlmnInfo. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this PlmnInfo. + :type app_instance_id: str + """ + if app_instance_id is None: + raise ValueError("Invalid value for `app_instance_id`, must not be `None`") # noqa: E501 + + self._app_instance_id = app_instance_id + + @property + def plmn(self) -> List[Plmn]: + """Gets the plmn of this PlmnInfo. + + Public Land Mobile Network Identity. # noqa: E501 + + :return: The plmn of this PlmnInfo. + :rtype: List[Plmn] + """ + return self._plmn + + @plmn.setter + def plmn(self, plmn: List[Plmn]): + """Sets the plmn of this PlmnInfo. + + Public Land Mobile Network Identity. # noqa: E501 + + :param plmn: The plmn of this PlmnInfo. + :type plmn: List[Plmn] + """ + if plmn is None: + raise ValueError("Invalid value for `plmn`, must not be `None`") # noqa: E501 + + self._plmn = plmn + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this PlmnInfo. + + + :return: The time_stamp of this PlmnInfo. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this PlmnInfo. + + + :param time_stamp: The time_stamp of this PlmnInfo. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/problem_details.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/problem_details.py new file mode 100644 index 0000000..cbb7c9d --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/problem_details.py @@ -0,0 +1,176 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class ProblemDetails(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, detail: str=None, instance: str=None, status: int=None, title: str=None, type: str=None): # noqa: E501 + """ProblemDetails - a model defined in Swagger + + :param detail: The detail of this ProblemDetails. # noqa: E501 + :type detail: str + :param instance: The instance of this ProblemDetails. # noqa: E501 + :type instance: str + :param status: The status of this ProblemDetails. # noqa: E501 + :type status: int + :param title: The title of this ProblemDetails. # noqa: E501 + :type title: str + :param type: The type of this ProblemDetails. # noqa: E501 + :type type: str + """ + self.swagger_types = { + 'detail': str, + 'instance': str, + 'status': int, + 'title': str, + 'type': str + } + + self.attribute_map = { + 'detail': 'detail', + 'instance': 'instance', + 'status': 'status', + 'title': 'title', + 'type': 'type' + } + self._detail = detail + self._instance = instance + self._status = status + self._title = title + self._type = type + + @classmethod + def from_dict(cls, dikt) -> 'ProblemDetails': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ProblemDetails of this ProblemDetails. # noqa: E501 + :rtype: ProblemDetails + """ + return util.deserialize_model(dikt, cls) + + @property + def detail(self) -> str: + """Gets the detail of this ProblemDetails. + + A human-readable explanation specific to this occurrence of the problem # noqa: E501 + + :return: The detail of this ProblemDetails. + :rtype: str + """ + return self._detail + + @detail.setter + def detail(self, detail: str): + """Sets the detail of this ProblemDetails. + + A human-readable explanation specific to this occurrence of the problem # noqa: E501 + + :param detail: The detail of this ProblemDetails. + :type detail: str + """ + + self._detail = detail + + @property + def instance(self) -> str: + """Gets the instance of this ProblemDetails. + + A URI reference that identifies the specific occurrence of the problem # noqa: E501 + + :return: The instance of this ProblemDetails. + :rtype: str + """ + return self._instance + + @instance.setter + def instance(self, instance: str): + """Sets the instance of this ProblemDetails. + + A URI reference that identifies the specific occurrence of the problem # noqa: E501 + + :param instance: The instance of this ProblemDetails. + :type instance: str + """ + + self._instance = instance + + @property + def status(self) -> int: + """Gets the status of this ProblemDetails. + + The HTTP status code for this occurrence of the problem # noqa: E501 + + :return: The status of this ProblemDetails. + :rtype: int + """ + return self._status + + @status.setter + def status(self, status: int): + """Sets the status of this ProblemDetails. + + The HTTP status code for this occurrence of the problem # noqa: E501 + + :param status: The status of this ProblemDetails. + :type status: int + """ + + self._status = status + + @property + def title(self) -> str: + """Gets the title of this ProblemDetails. + + A short, human-readable summary of the problem type # noqa: E501 + + :return: The title of this ProblemDetails. + :rtype: str + """ + return self._title + + @title.setter + def title(self, title: str): + """Sets the title of this ProblemDetails. + + A short, human-readable summary of the problem type # noqa: E501 + + :param title: The title of this ProblemDetails. + :type title: str + """ + + self._title = title + + @property + def type(self) -> str: + """Gets the type of this ProblemDetails. + + A URI reference according to IETF RFC 3986 that identifies the problem type # noqa: E501 + + :return: The type of this ProblemDetails. + :rtype: str + """ + return self._type + + @type.setter + def type(self, type: str): + """Sets the type of this ProblemDetails. + + A URI reference according to IETF RFC 3986 that identifies the problem type # noqa: E501 + + :param type: The type of this ProblemDetails. + :type type: str + """ + + self._type = type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification.py new file mode 100644 index 0000000..52e4b32 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification.py @@ -0,0 +1,235 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.rab_est_notification_erab_qos_parameters import RabEstNotificationErabQosParameters # noqa: F401,E501 +from swagger_server.models.rab_est_notification_temp_ue_id import RabEstNotificationTempUeId # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class RabEstNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ecgi: Ecgi=None, erab_id: int=None, erab_qos_parameters: RabEstNotificationErabQosParameters=None, notification_type: str=None, temp_ue_id: RabEstNotificationTempUeId=None, time_stamp: TimeStamp=None): # noqa: E501 + """RabEstNotification - a model defined in Swagger + + :param associate_id: The associate_id of this RabEstNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this RabEstNotification. # noqa: E501 + :type ecgi: Ecgi + :param erab_id: The erab_id of this RabEstNotification. # noqa: E501 + :type erab_id: int + :param erab_qos_parameters: The erab_qos_parameters of this RabEstNotification. # noqa: E501 + :type erab_qos_parameters: RabEstNotificationErabQosParameters + :param notification_type: The notification_type of this RabEstNotification. # noqa: E501 + :type notification_type: str + :param temp_ue_id: The temp_ue_id of this RabEstNotification. # noqa: E501 + :type temp_ue_id: RabEstNotificationTempUeId + :param time_stamp: The time_stamp of this RabEstNotification. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ecgi': Ecgi, + 'erab_id': int, + 'erab_qos_parameters': RabEstNotificationErabQosParameters, + 'notification_type': str, + 'temp_ue_id': RabEstNotificationTempUeId, + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 'erab_id': 'erabId', + 'erab_qos_parameters': 'erabQosParameters', + 'notification_type': 'notificationType', + 'temp_ue_id': 'tempUeId', + 'time_stamp': 'timeStamp' + } + self._associate_id = associate_id + self._ecgi = ecgi + self._erab_id = erab_id + self._erab_qos_parameters = erab_qos_parameters + self._notification_type = notification_type + self._temp_ue_id = temp_ue_id + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'RabEstNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabEstNotification of this RabEstNotification. # noqa: E501 + :rtype: RabEstNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this RabEstNotification. + + 0 to N identifiers to bind the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this RabEstNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this RabEstNotification. + + 0 to N identifiers to bind the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this RabEstNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this RabEstNotification. + + + :return: The ecgi of this RabEstNotification. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this RabEstNotification. + + + :param ecgi: The ecgi of this RabEstNotification. + :type ecgi: Ecgi + """ + if ecgi is None: + raise ValueError("Invalid value for `ecgi`, must not be `None`") # noqa: E501 + + self._ecgi = ecgi + + @property + def erab_id(self) -> int: + """Gets the erab_id of this RabEstNotification. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The erab_id of this RabEstNotification. + :rtype: int + """ + return self._erab_id + + @erab_id.setter + def erab_id(self, erab_id: int): + """Sets the erab_id of this RabEstNotification. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param erab_id: The erab_id of this RabEstNotification. + :type erab_id: int + """ + if erab_id is None: + raise ValueError("Invalid value for `erab_id`, must not be `None`") # noqa: E501 + + self._erab_id = erab_id + + @property + def erab_qos_parameters(self) -> RabEstNotificationErabQosParameters: + """Gets the erab_qos_parameters of this RabEstNotification. + + + :return: The erab_qos_parameters of this RabEstNotification. + :rtype: RabEstNotificationErabQosParameters + """ + return self._erab_qos_parameters + + @erab_qos_parameters.setter + def erab_qos_parameters(self, erab_qos_parameters: RabEstNotificationErabQosParameters): + """Sets the erab_qos_parameters of this RabEstNotification. + + + :param erab_qos_parameters: The erab_qos_parameters of this RabEstNotification. + :type erab_qos_parameters: RabEstNotificationErabQosParameters + """ + + self._erab_qos_parameters = erab_qos_parameters + + @property + def notification_type(self) -> str: + """Gets the notification_type of this RabEstNotification. + + Shall be set to \"RabEstNotification\". # noqa: E501 + + :return: The notification_type of this RabEstNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this RabEstNotification. + + Shall be set to \"RabEstNotification\". # noqa: E501 + + :param notification_type: The notification_type of this RabEstNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def temp_ue_id(self) -> RabEstNotificationTempUeId: + """Gets the temp_ue_id of this RabEstNotification. + + + :return: The temp_ue_id of this RabEstNotification. + :rtype: RabEstNotificationTempUeId + """ + return self._temp_ue_id + + @temp_ue_id.setter + def temp_ue_id(self, temp_ue_id: RabEstNotificationTempUeId): + """Sets the temp_ue_id of this RabEstNotification. + + + :param temp_ue_id: The temp_ue_id of this RabEstNotification. + :type temp_ue_id: RabEstNotificationTempUeId + """ + + self._temp_ue_id = temp_ue_id + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this RabEstNotification. + + + :return: The time_stamp of this RabEstNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this RabEstNotification. + + + :param time_stamp: The time_stamp of this RabEstNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters.py new file mode 100644 index 0000000..abe9c34 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters.py @@ -0,0 +1,93 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.rab_est_notification_erab_qos_parameters_qos_information import RabEstNotificationErabQosParametersQosInformation # noqa: F401,E501 +from swagger_server import util + + +class RabEstNotificationErabQosParameters(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, qci: int=None, qos_information: RabEstNotificationErabQosParametersQosInformation=None): # noqa: E501 + """RabEstNotificationErabQosParameters - a model defined in Swagger + + :param qci: The qci of this RabEstNotificationErabQosParameters. # noqa: E501 + :type qci: int + :param qos_information: The qos_information of this RabEstNotificationErabQosParameters. # noqa: E501 + :type qos_information: RabEstNotificationErabQosParametersQosInformation + """ + self.swagger_types = { + 'qci': int, + 'qos_information': RabEstNotificationErabQosParametersQosInformation + } + + self.attribute_map = { + 'qci': 'qci', + 'qos_information': 'qosInformation' + } + self._qci = qci + self._qos_information = qos_information + + @classmethod + def from_dict(cls, dikt) -> 'RabEstNotificationErabQosParameters': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabEstNotification_erabQosParameters of this RabEstNotificationErabQosParameters. # noqa: E501 + :rtype: RabEstNotificationErabQosParameters + """ + return util.deserialize_model(dikt, cls) + + @property + def qci(self) -> int: + """Gets the qci of this RabEstNotificationErabQosParameters. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :return: The qci of this RabEstNotificationErabQosParameters. + :rtype: int + """ + return self._qci + + @qci.setter + def qci(self, qci: int): + """Sets the qci of this RabEstNotificationErabQosParameters. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :param qci: The qci of this RabEstNotificationErabQosParameters. + :type qci: int + """ + if qci is None: + raise ValueError("Invalid value for `qci`, must not be `None`") # noqa: E501 + + self._qci = qci + + @property + def qos_information(self) -> RabEstNotificationErabQosParametersQosInformation: + """Gets the qos_information of this RabEstNotificationErabQosParameters. + + + :return: The qos_information of this RabEstNotificationErabQosParameters. + :rtype: RabEstNotificationErabQosParametersQosInformation + """ + return self._qos_information + + @qos_information.setter + def qos_information(self, qos_information: RabEstNotificationErabQosParametersQosInformation): + """Sets the qos_information of this RabEstNotificationErabQosParameters. + + + :param qos_information: The qos_information of this RabEstNotificationErabQosParameters. + :type qos_information: RabEstNotificationErabQosParametersQosInformation + """ + + self._qos_information = qos_information diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters_qos_information.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters_qos_information.py new file mode 100644 index 0000000..34e3669 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_erab_qos_parameters_qos_information.py @@ -0,0 +1,156 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class RabEstNotificationErabQosParametersQosInformation(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, erab_gbr_dl: int=None, erab_gbr_ul: int=None, erab_mbr_dl: int=None, erab_mbr_ul: int=None): # noqa: E501 + """RabEstNotificationErabQosParametersQosInformation - a model defined in Swagger + + :param erab_gbr_dl: The erab_gbr_dl of this RabEstNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_gbr_dl: int + :param erab_gbr_ul: The erab_gbr_ul of this RabEstNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_gbr_ul: int + :param erab_mbr_dl: The erab_mbr_dl of this RabEstNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_mbr_dl: int + :param erab_mbr_ul: The erab_mbr_ul of this RabEstNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_mbr_ul: int + """ + self.swagger_types = { + 'erab_gbr_dl': int, + 'erab_gbr_ul': int, + 'erab_mbr_dl': int, + 'erab_mbr_ul': int + } + + self.attribute_map = { + 'erab_gbr_dl': 'erabGbrDl', + 'erab_gbr_ul': 'erabGbrUl', + 'erab_mbr_dl': 'erabMbrDl', + 'erab_mbr_ul': 'erabMbrUl' + } + self._erab_gbr_dl = erab_gbr_dl + self._erab_gbr_ul = erab_gbr_ul + self._erab_mbr_dl = erab_mbr_dl + self._erab_mbr_ul = erab_mbr_ul + + @classmethod + def from_dict(cls, dikt) -> 'RabEstNotificationErabQosParametersQosInformation': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabEstNotification_erabQosParameters_qosInformation of this RabEstNotificationErabQosParametersQosInformation. # noqa: E501 + :rtype: RabEstNotificationErabQosParametersQosInformation + """ + return util.deserialize_model(dikt, cls) + + @property + def erab_gbr_dl(self) -> int: + """Gets the erab_gbr_dl of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_gbr_dl of this RabEstNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_gbr_dl + + @erab_gbr_dl.setter + def erab_gbr_dl(self, erab_gbr_dl: int): + """Sets the erab_gbr_dl of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_gbr_dl: The erab_gbr_dl of this RabEstNotificationErabQosParametersQosInformation. + :type erab_gbr_dl: int + """ + if erab_gbr_dl is None: + raise ValueError("Invalid value for `erab_gbr_dl`, must not be `None`") # noqa: E501 + + self._erab_gbr_dl = erab_gbr_dl + + @property + def erab_gbr_ul(self) -> int: + """Gets the erab_gbr_ul of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_gbr_ul of this RabEstNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_gbr_ul + + @erab_gbr_ul.setter + def erab_gbr_ul(self, erab_gbr_ul: int): + """Sets the erab_gbr_ul of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_gbr_ul: The erab_gbr_ul of this RabEstNotificationErabQosParametersQosInformation. + :type erab_gbr_ul: int + """ + if erab_gbr_ul is None: + raise ValueError("Invalid value for `erab_gbr_ul`, must not be `None`") # noqa: E501 + + self._erab_gbr_ul = erab_gbr_ul + + @property + def erab_mbr_dl(self) -> int: + """Gets the erab_mbr_dl of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_mbr_dl of this RabEstNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_mbr_dl + + @erab_mbr_dl.setter + def erab_mbr_dl(self, erab_mbr_dl: int): + """Sets the erab_mbr_dl of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_mbr_dl: The erab_mbr_dl of this RabEstNotificationErabQosParametersQosInformation. + :type erab_mbr_dl: int + """ + if erab_mbr_dl is None: + raise ValueError("Invalid value for `erab_mbr_dl`, must not be `None`") # noqa: E501 + + self._erab_mbr_dl = erab_mbr_dl + + @property + def erab_mbr_ul(self) -> int: + """Gets the erab_mbr_ul of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_mbr_ul of this RabEstNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_mbr_ul + + @erab_mbr_ul.setter + def erab_mbr_ul(self, erab_mbr_ul: int): + """Sets the erab_mbr_ul of this RabEstNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_mbr_ul: The erab_mbr_ul of this RabEstNotificationErabQosParametersQosInformation. + :type erab_mbr_ul: int + """ + if erab_mbr_ul is None: + raise ValueError("Invalid value for `erab_mbr_ul`, must not be `None`") # noqa: E501 + + self._erab_mbr_ul = erab_mbr_ul diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_temp_ue_id.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_temp_ue_id.py new file mode 100644 index 0000000..8b81917 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_notification_temp_ue_id.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class RabEstNotificationTempUeId(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, mmec: str=None, mtmsi: str=None): # noqa: E501 + """RabEstNotificationTempUeId - a model defined in Swagger + + :param mmec: The mmec of this RabEstNotificationTempUeId. # noqa: E501 + :type mmec: str + :param mtmsi: The mtmsi of this RabEstNotificationTempUeId. # noqa: E501 + :type mtmsi: str + """ + self.swagger_types = { + 'mmec': str, + 'mtmsi': str + } + + self.attribute_map = { + 'mmec': 'mmec', + 'mtmsi': 'mtmsi' + } + self._mmec = mmec + self._mtmsi = mtmsi + + @classmethod + def from_dict(cls, dikt) -> 'RabEstNotificationTempUeId': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabEstNotification_tempUeId of this RabEstNotificationTempUeId. # noqa: E501 + :rtype: RabEstNotificationTempUeId + """ + return util.deserialize_model(dikt, cls) + + @property + def mmec(self) -> str: + """Gets the mmec of this RabEstNotificationTempUeId. + + MMEC as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The mmec of this RabEstNotificationTempUeId. + :rtype: str + """ + return self._mmec + + @mmec.setter + def mmec(self, mmec: str): + """Sets the mmec of this RabEstNotificationTempUeId. + + MMEC as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param mmec: The mmec of this RabEstNotificationTempUeId. + :type mmec: str + """ + if mmec is None: + raise ValueError("Invalid value for `mmec`, must not be `None`") # noqa: E501 + + self._mmec = mmec + + @property + def mtmsi(self) -> str: + """Gets the mtmsi of this RabEstNotificationTempUeId. + + M-TMSI as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The mtmsi of this RabEstNotificationTempUeId. + :rtype: str + """ + return self._mtmsi + + @mtmsi.setter + def mtmsi(self, mtmsi: str): + """Sets the mtmsi of this RabEstNotificationTempUeId. + + M-TMSI as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param mtmsi: The mtmsi of this RabEstNotificationTempUeId. + :type mtmsi: str + """ + if mtmsi is None: + raise ValueError("Invalid value for `mtmsi`, must not be `None`") # noqa: E501 + + self._mtmsi = mtmsi diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription.py new file mode 100644 index 0000000..8ab9185 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.rab_est_subscription_filter_criteria_qci import RabEstSubscriptionFilterCriteriaQci # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class RabEstSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_qci: RabEstSubscriptionFilterCriteriaQci=None, subscription_type: str=None): # noqa: E501 + """RabEstSubscription - a model defined in Swagger + + :param links: The links of this RabEstSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this RabEstSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this RabEstSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_qci: The filter_criteria_qci of this RabEstSubscription. # noqa: E501 + :type filter_criteria_qci: RabEstSubscriptionFilterCriteriaQci + :param subscription_type: The subscription_type of this RabEstSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_qci': RabEstSubscriptionFilterCriteriaQci, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_qci': 'filterCriteriaQci', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_qci = filter_criteria_qci + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'RabEstSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabEstSubscription of this RabEstSubscription. # noqa: E501 + :rtype: RabEstSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this RabEstSubscription. + + + :return: The links of this RabEstSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this RabEstSubscription. + + + :param links: The links of this RabEstSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this RabEstSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this RabEstSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this RabEstSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this RabEstSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this RabEstSubscription. + + + :return: The expiry_deadline of this RabEstSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this RabEstSubscription. + + + :param expiry_deadline: The expiry_deadline of this RabEstSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_qci(self) -> RabEstSubscriptionFilterCriteriaQci: + """Gets the filter_criteria_qci of this RabEstSubscription. + + + :return: The filter_criteria_qci of this RabEstSubscription. + :rtype: RabEstSubscriptionFilterCriteriaQci + """ + return self._filter_criteria_qci + + @filter_criteria_qci.setter + def filter_criteria_qci(self, filter_criteria_qci: RabEstSubscriptionFilterCriteriaQci): + """Sets the filter_criteria_qci of this RabEstSubscription. + + + :param filter_criteria_qci: The filter_criteria_qci of this RabEstSubscription. + :type filter_criteria_qci: RabEstSubscriptionFilterCriteriaQci + """ + if filter_criteria_qci is None: + raise ValueError("Invalid value for `filter_criteria_qci`, must not be `None`") # noqa: E501 + + self._filter_criteria_qci = filter_criteria_qci + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this RabEstSubscription. + + Shall be set to \"RabEstSubscription\". # noqa: E501 + + :return: The subscription_type of this RabEstSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this RabEstSubscription. + + Shall be set to \"RabEstSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this RabEstSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription_filter_criteria_qci.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription_filter_criteria_qci.py new file mode 100644 index 0000000..563c591 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_est_subscription_filter_criteria_qci.py @@ -0,0 +1,123 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class RabEstSubscriptionFilterCriteriaQci(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, ecgi: List[Ecgi]=None, qci: int=None): # noqa: E501 + """RabEstSubscriptionFilterCriteriaQci - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this RabEstSubscriptionFilterCriteriaQci. # noqa: E501 + :type app_instance_id: str + :param ecgi: The ecgi of this RabEstSubscriptionFilterCriteriaQci. # noqa: E501 + :type ecgi: List[Ecgi] + :param qci: The qci of this RabEstSubscriptionFilterCriteriaQci. # noqa: E501 + :type qci: int + """ + self.swagger_types = { + 'app_instance_id': str, + 'ecgi': List[Ecgi], + 'qci': int + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'ecgi': 'ecgi', + 'qci': 'qci' + } + self._app_instance_id = app_instance_id + self._ecgi = ecgi + self._qci = qci + + @classmethod + def from_dict(cls, dikt) -> 'RabEstSubscriptionFilterCriteriaQci': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabEstSubscription_filterCriteriaQci of this RabEstSubscriptionFilterCriteriaQci. # noqa: E501 + :rtype: RabEstSubscriptionFilterCriteriaQci + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this RabEstSubscriptionFilterCriteriaQci. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this RabEstSubscriptionFilterCriteriaQci. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this RabEstSubscriptionFilterCriteriaQci. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this RabEstSubscriptionFilterCriteriaQci. + :type app_instance_id: str + """ + + self._app_instance_id = app_instance_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this RabEstSubscriptionFilterCriteriaQci. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this RabEstSubscriptionFilterCriteriaQci. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this RabEstSubscriptionFilterCriteriaQci. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this RabEstSubscriptionFilterCriteriaQci. + :type ecgi: List[Ecgi] + """ + + self._ecgi = ecgi + + @property + def qci(self) -> int: + """Gets the qci of this RabEstSubscriptionFilterCriteriaQci. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :return: The qci of this RabEstSubscriptionFilterCriteriaQci. + :rtype: int + """ + return self._qci + + @qci.setter + def qci(self, qci: int): + """Sets the qci of this RabEstSubscriptionFilterCriteriaQci. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :param qci: The qci of this RabEstSubscriptionFilterCriteriaQci. + :type qci: int + """ + if qci is None: + raise ValueError("Invalid value for `qci`, must not be `None`") # noqa: E501 + + self._qci = qci diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info.py new file mode 100644 index 0000000..c5eab7e --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info.py @@ -0,0 +1,152 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.rab_info_cell_user_info import RabInfoCellUserInfo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class RabInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, cell_user_info: List[RabInfoCellUserInfo]=None, request_id: str=None, time_stamp: TimeStamp=None): # noqa: E501 + """RabInfo - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this RabInfo. # noqa: E501 + :type app_instance_id: str + :param cell_user_info: The cell_user_info of this RabInfo. # noqa: E501 + :type cell_user_info: List[RabInfoCellUserInfo] + :param request_id: The request_id of this RabInfo. # noqa: E501 + :type request_id: str + :param time_stamp: The time_stamp of this RabInfo. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'app_instance_id': str, + 'cell_user_info': List[RabInfoCellUserInfo], + 'request_id': str, + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'cell_user_info': 'cellUserInfo', + 'request_id': 'requestId', + 'time_stamp': 'timeStamp' + } + self._app_instance_id = app_instance_id + self._cell_user_info = cell_user_info + self._request_id = request_id + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'RabInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabInfo of this RabInfo. # noqa: E501 + :rtype: RabInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this RabInfo. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this RabInfo. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this RabInfo. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this RabInfo. + :type app_instance_id: str + """ + if app_instance_id is None: + raise ValueError("Invalid value for `app_instance_id`, must not be `None`") # noqa: E501 + + self._app_instance_id = app_instance_id + + @property + def cell_user_info(self) -> List[RabInfoCellUserInfo]: + """Gets the cell_user_info of this RabInfo. + + The information on users per cell as defined below. # noqa: E501 + + :return: The cell_user_info of this RabInfo. + :rtype: List[RabInfoCellUserInfo] + """ + return self._cell_user_info + + @cell_user_info.setter + def cell_user_info(self, cell_user_info: List[RabInfoCellUserInfo]): + """Sets the cell_user_info of this RabInfo. + + The information on users per cell as defined below. # noqa: E501 + + :param cell_user_info: The cell_user_info of this RabInfo. + :type cell_user_info: List[RabInfoCellUserInfo] + """ + + self._cell_user_info = cell_user_info + + @property + def request_id(self) -> str: + """Gets the request_id of this RabInfo. + + Unique identifier allocated by the service consumer for the RAB Information request. # noqa: E501 + + :return: The request_id of this RabInfo. + :rtype: str + """ + return self._request_id + + @request_id.setter + def request_id(self, request_id: str): + """Sets the request_id of this RabInfo. + + Unique identifier allocated by the service consumer for the RAB Information request. # noqa: E501 + + :param request_id: The request_id of this RabInfo. + :type request_id: str + """ + if request_id is None: + raise ValueError("Invalid value for `request_id`, must not be `None`") # noqa: E501 + + self._request_id = request_id + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this RabInfo. + + + :return: The time_stamp of this RabInfo. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this RabInfo. + + + :param time_stamp: The time_stamp of this RabInfo. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_cell_user_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_cell_user_info.py new file mode 100644 index 0000000..597a79b --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_cell_user_info.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.rab_info_ue_info import RabInfoUeInfo # noqa: F401,E501 +from swagger_server import util + + +class RabInfoCellUserInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ecgi: Ecgi=None, ue_info: List[RabInfoUeInfo]=None): # noqa: E501 + """RabInfoCellUserInfo - a model defined in Swagger + + :param ecgi: The ecgi of this RabInfoCellUserInfo. # noqa: E501 + :type ecgi: Ecgi + :param ue_info: The ue_info of this RabInfoCellUserInfo. # noqa: E501 + :type ue_info: List[RabInfoUeInfo] + """ + self.swagger_types = { + 'ecgi': Ecgi, + 'ue_info': List[RabInfoUeInfo] + } + + self.attribute_map = { + 'ecgi': 'ecgi', + 'ue_info': 'ueInfo' + } + self._ecgi = ecgi + self._ue_info = ue_info + + @classmethod + def from_dict(cls, dikt) -> 'RabInfoCellUserInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabInfo_cellUserInfo of this RabInfoCellUserInfo. # noqa: E501 + :rtype: RabInfoCellUserInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this RabInfoCellUserInfo. + + + :return: The ecgi of this RabInfoCellUserInfo. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this RabInfoCellUserInfo. + + + :param ecgi: The ecgi of this RabInfoCellUserInfo. + :type ecgi: Ecgi + """ + + self._ecgi = ecgi + + @property + def ue_info(self) -> List[RabInfoUeInfo]: + """Gets the ue_info of this RabInfoCellUserInfo. + + Information on UEs in the specific cell as defined below. # noqa: E501 + + :return: The ue_info of this RabInfoCellUserInfo. + :rtype: List[RabInfoUeInfo] + """ + return self._ue_info + + @ue_info.setter + def ue_info(self, ue_info: List[RabInfoUeInfo]): + """Sets the ue_info of this RabInfoCellUserInfo. + + Information on UEs in the specific cell as defined below. # noqa: E501 + + :param ue_info: The ue_info of this RabInfoCellUserInfo. + :type ue_info: List[RabInfoUeInfo] + """ + + self._ue_info = ue_info diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_erab_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_erab_info.py new file mode 100644 index 0000000..1c19ab6 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_erab_info.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.rab_est_notification_erab_qos_parameters import RabEstNotificationErabQosParameters # noqa: F401,E501 +from swagger_server import util + + +class RabInfoErabInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, erab_id: int=None, erab_qos_parameters: RabEstNotificationErabQosParameters=None): # noqa: E501 + """RabInfoErabInfo - a model defined in Swagger + + :param erab_id: The erab_id of this RabInfoErabInfo. # noqa: E501 + :type erab_id: int + :param erab_qos_parameters: The erab_qos_parameters of this RabInfoErabInfo. # noqa: E501 + :type erab_qos_parameters: RabEstNotificationErabQosParameters + """ + self.swagger_types = { + 'erab_id': int, + 'erab_qos_parameters': RabEstNotificationErabQosParameters + } + + self.attribute_map = { + 'erab_id': 'erabId', + 'erab_qos_parameters': 'erabQosParameters' + } + self._erab_id = erab_id + self._erab_qos_parameters = erab_qos_parameters + + @classmethod + def from_dict(cls, dikt) -> 'RabInfoErabInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabInfo_erabInfo of this RabInfoErabInfo. # noqa: E501 + :rtype: RabInfoErabInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def erab_id(self) -> int: + """Gets the erab_id of this RabInfoErabInfo. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The erab_id of this RabInfoErabInfo. + :rtype: int + """ + return self._erab_id + + @erab_id.setter + def erab_id(self, erab_id: int): + """Sets the erab_id of this RabInfoErabInfo. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param erab_id: The erab_id of this RabInfoErabInfo. + :type erab_id: int + """ + + self._erab_id = erab_id + + @property + def erab_qos_parameters(self) -> RabEstNotificationErabQosParameters: + """Gets the erab_qos_parameters of this RabInfoErabInfo. + + + :return: The erab_qos_parameters of this RabInfoErabInfo. + :rtype: RabEstNotificationErabQosParameters + """ + return self._erab_qos_parameters + + @erab_qos_parameters.setter + def erab_qos_parameters(self, erab_qos_parameters: RabEstNotificationErabQosParameters): + """Sets the erab_qos_parameters of this RabInfoErabInfo. + + + :param erab_qos_parameters: The erab_qos_parameters of this RabInfoErabInfo. + :type erab_qos_parameters: RabEstNotificationErabQosParameters + """ + + self._erab_qos_parameters = erab_qos_parameters diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_ue_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_ue_info.py new file mode 100644 index 0000000..b1e7052 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_info_ue_info.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.rab_info_erab_info import RabInfoErabInfo # noqa: F401,E501 +from swagger_server import util + + +class RabInfoUeInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, erab_info: List[RabInfoErabInfo]=None): # noqa: E501 + """RabInfoUeInfo - a model defined in Swagger + + :param associate_id: The associate_id of this RabInfoUeInfo. # noqa: E501 + :type associate_id: List[AssociateId] + :param erab_info: The erab_info of this RabInfoUeInfo. # noqa: E501 + :type erab_info: List[RabInfoErabInfo] + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'erab_info': List[RabInfoErabInfo] + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'erab_info': 'erabInfo' + } + self._associate_id = associate_id + self._erab_info = erab_info + + @classmethod + def from_dict(cls, dikt) -> 'RabInfoUeInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabInfo_ueInfo of this RabInfoUeInfo. # noqa: E501 + :rtype: RabInfoUeInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this RabInfoUeInfo. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this RabInfoUeInfo. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this RabInfoUeInfo. + + 0 to N identifiers to associate the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this RabInfoUeInfo. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def erab_info(self) -> List[RabInfoErabInfo]: + """Gets the erab_info of this RabInfoUeInfo. + + Information on E-RAB as defined below. # noqa: E501 + + :return: The erab_info of this RabInfoUeInfo. + :rtype: List[RabInfoErabInfo] + """ + return self._erab_info + + @erab_info.setter + def erab_info(self, erab_info: List[RabInfoErabInfo]): + """Sets the erab_info of this RabInfoUeInfo. + + Information on E-RAB as defined below. # noqa: E501 + + :param erab_info: The erab_info of this RabInfoUeInfo. + :type erab_info: List[RabInfoErabInfo] + """ + + self._erab_info = erab_info diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification.py new file mode 100644 index 0000000..d6ae839 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification.py @@ -0,0 +1,208 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.rab_mod_notification_erab_qos_parameters import RabModNotificationErabQosParameters # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class RabModNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ecgi: Ecgi=None, erab_id: int=None, erab_qos_parameters: RabModNotificationErabQosParameters=None, notification_type: str=None, time_stamp: TimeStamp=None): # noqa: E501 + """RabModNotification - a model defined in Swagger + + :param associate_id: The associate_id of this RabModNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this RabModNotification. # noqa: E501 + :type ecgi: Ecgi + :param erab_id: The erab_id of this RabModNotification. # noqa: E501 + :type erab_id: int + :param erab_qos_parameters: The erab_qos_parameters of this RabModNotification. # noqa: E501 + :type erab_qos_parameters: RabModNotificationErabQosParameters + :param notification_type: The notification_type of this RabModNotification. # noqa: E501 + :type notification_type: str + :param time_stamp: The time_stamp of this RabModNotification. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ecgi': Ecgi, + 'erab_id': int, + 'erab_qos_parameters': RabModNotificationErabQosParameters, + 'notification_type': str, + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 'erab_id': 'erabId', + 'erab_qos_parameters': 'erabQosParameters', + 'notification_type': 'notificationType', + 'time_stamp': 'timeStamp' + } + self._associate_id = associate_id + self._ecgi = ecgi + self._erab_id = erab_id + self._erab_qos_parameters = erab_qos_parameters + self._notification_type = notification_type + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'RabModNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabModNotification of this RabModNotification. # noqa: E501 + :rtype: RabModNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this RabModNotification. + + 0 to N identifiers to bind the event for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this RabModNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this RabModNotification. + + 0 to N identifiers to bind the event for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this RabModNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this RabModNotification. + + + :return: The ecgi of this RabModNotification. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this RabModNotification. + + + :param ecgi: The ecgi of this RabModNotification. + :type ecgi: Ecgi + """ + if ecgi is None: + raise ValueError("Invalid value for `ecgi`, must not be `None`") # noqa: E501 + + self._ecgi = ecgi + + @property + def erab_id(self) -> int: + """Gets the erab_id of this RabModNotification. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The erab_id of this RabModNotification. + :rtype: int + """ + return self._erab_id + + @erab_id.setter + def erab_id(self, erab_id: int): + """Sets the erab_id of this RabModNotification. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param erab_id: The erab_id of this RabModNotification. + :type erab_id: int + """ + if erab_id is None: + raise ValueError("Invalid value for `erab_id`, must not be `None`") # noqa: E501 + + self._erab_id = erab_id + + @property + def erab_qos_parameters(self) -> RabModNotificationErabQosParameters: + """Gets the erab_qos_parameters of this RabModNotification. + + + :return: The erab_qos_parameters of this RabModNotification. + :rtype: RabModNotificationErabQosParameters + """ + return self._erab_qos_parameters + + @erab_qos_parameters.setter + def erab_qos_parameters(self, erab_qos_parameters: RabModNotificationErabQosParameters): + """Sets the erab_qos_parameters of this RabModNotification. + + + :param erab_qos_parameters: The erab_qos_parameters of this RabModNotification. + :type erab_qos_parameters: RabModNotificationErabQosParameters + """ + + self._erab_qos_parameters = erab_qos_parameters + + @property + def notification_type(self) -> str: + """Gets the notification_type of this RabModNotification. + + Shall be set to \"RabModNotification\". # noqa: E501 + + :return: The notification_type of this RabModNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this RabModNotification. + + Shall be set to \"RabModNotification\". # noqa: E501 + + :param notification_type: The notification_type of this RabModNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this RabModNotification. + + + :return: The time_stamp of this RabModNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this RabModNotification. + + + :param time_stamp: The time_stamp of this RabModNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters.py new file mode 100644 index 0000000..43c3ad3 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters.py @@ -0,0 +1,93 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.rab_mod_notification_erab_qos_parameters_qos_information import RabModNotificationErabQosParametersQosInformation # noqa: F401,E501 +from swagger_server import util + + +class RabModNotificationErabQosParameters(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, qci: int=None, qos_information: RabModNotificationErabQosParametersQosInformation=None): # noqa: E501 + """RabModNotificationErabQosParameters - a model defined in Swagger + + :param qci: The qci of this RabModNotificationErabQosParameters. # noqa: E501 + :type qci: int + :param qos_information: The qos_information of this RabModNotificationErabQosParameters. # noqa: E501 + :type qos_information: RabModNotificationErabQosParametersQosInformation + """ + self.swagger_types = { + 'qci': int, + 'qos_information': RabModNotificationErabQosParametersQosInformation + } + + self.attribute_map = { + 'qci': 'qci', + 'qos_information': 'qosInformation' + } + self._qci = qci + self._qos_information = qos_information + + @classmethod + def from_dict(cls, dikt) -> 'RabModNotificationErabQosParameters': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabModNotification_erabQosParameters of this RabModNotificationErabQosParameters. # noqa: E501 + :rtype: RabModNotificationErabQosParameters + """ + return util.deserialize_model(dikt, cls) + + @property + def qci(self) -> int: + """Gets the qci of this RabModNotificationErabQosParameters. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :return: The qci of this RabModNotificationErabQosParameters. + :rtype: int + """ + return self._qci + + @qci.setter + def qci(self, qci: int): + """Sets the qci of this RabModNotificationErabQosParameters. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :param qci: The qci of this RabModNotificationErabQosParameters. + :type qci: int + """ + if qci is None: + raise ValueError("Invalid value for `qci`, must not be `None`") # noqa: E501 + + self._qci = qci + + @property + def qos_information(self) -> RabModNotificationErabQosParametersQosInformation: + """Gets the qos_information of this RabModNotificationErabQosParameters. + + + :return: The qos_information of this RabModNotificationErabQosParameters. + :rtype: RabModNotificationErabQosParametersQosInformation + """ + return self._qos_information + + @qos_information.setter + def qos_information(self, qos_information: RabModNotificationErabQosParametersQosInformation): + """Sets the qos_information of this RabModNotificationErabQosParameters. + + + :param qos_information: The qos_information of this RabModNotificationErabQosParameters. + :type qos_information: RabModNotificationErabQosParametersQosInformation + """ + + self._qos_information = qos_information diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters_qos_information.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters_qos_information.py new file mode 100644 index 0000000..103239a --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_notification_erab_qos_parameters_qos_information.py @@ -0,0 +1,156 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class RabModNotificationErabQosParametersQosInformation(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, erab_gbr_dl: int=None, erab_gbr_ul: int=None, erab_mbr_dl: int=None, erab_mbr_ul: int=None): # noqa: E501 + """RabModNotificationErabQosParametersQosInformation - a model defined in Swagger + + :param erab_gbr_dl: The erab_gbr_dl of this RabModNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_gbr_dl: int + :param erab_gbr_ul: The erab_gbr_ul of this RabModNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_gbr_ul: int + :param erab_mbr_dl: The erab_mbr_dl of this RabModNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_mbr_dl: int + :param erab_mbr_ul: The erab_mbr_ul of this RabModNotificationErabQosParametersQosInformation. # noqa: E501 + :type erab_mbr_ul: int + """ + self.swagger_types = { + 'erab_gbr_dl': int, + 'erab_gbr_ul': int, + 'erab_mbr_dl': int, + 'erab_mbr_ul': int + } + + self.attribute_map = { + 'erab_gbr_dl': 'erabGbrDl', + 'erab_gbr_ul': 'erabGbrUl', + 'erab_mbr_dl': 'erabMbrDl', + 'erab_mbr_ul': 'erabMbrUl' + } + self._erab_gbr_dl = erab_gbr_dl + self._erab_gbr_ul = erab_gbr_ul + self._erab_mbr_dl = erab_mbr_dl + self._erab_mbr_ul = erab_mbr_ul + + @classmethod + def from_dict(cls, dikt) -> 'RabModNotificationErabQosParametersQosInformation': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabModNotification_erabQosParameters_qosInformation of this RabModNotificationErabQosParametersQosInformation. # noqa: E501 + :rtype: RabModNotificationErabQosParametersQosInformation + """ + return util.deserialize_model(dikt, cls) + + @property + def erab_gbr_dl(self) -> int: + """Gets the erab_gbr_dl of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_gbr_dl of this RabModNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_gbr_dl + + @erab_gbr_dl.setter + def erab_gbr_dl(self, erab_gbr_dl: int): + """Sets the erab_gbr_dl of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_gbr_dl: The erab_gbr_dl of this RabModNotificationErabQosParametersQosInformation. + :type erab_gbr_dl: int + """ + if erab_gbr_dl is None: + raise ValueError("Invalid value for `erab_gbr_dl`, must not be `None`") # noqa: E501 + + self._erab_gbr_dl = erab_gbr_dl + + @property + def erab_gbr_ul(self) -> int: + """Gets the erab_gbr_ul of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_gbr_ul of this RabModNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_gbr_ul + + @erab_gbr_ul.setter + def erab_gbr_ul(self, erab_gbr_ul: int): + """Sets the erab_gbr_ul of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_gbr_ul: The erab_gbr_ul of this RabModNotificationErabQosParametersQosInformation. + :type erab_gbr_ul: int + """ + if erab_gbr_ul is None: + raise ValueError("Invalid value for `erab_gbr_ul`, must not be `None`") # noqa: E501 + + self._erab_gbr_ul = erab_gbr_ul + + @property + def erab_mbr_dl(self) -> int: + """Gets the erab_mbr_dl of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_mbr_dl of this RabModNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_mbr_dl + + @erab_mbr_dl.setter + def erab_mbr_dl(self, erab_mbr_dl: int): + """Sets the erab_mbr_dl of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_mbr_dl: The erab_mbr_dl of this RabModNotificationErabQosParametersQosInformation. + :type erab_mbr_dl: int + """ + if erab_mbr_dl is None: + raise ValueError("Invalid value for `erab_mbr_dl`, must not be `None`") # noqa: E501 + + self._erab_mbr_dl = erab_mbr_dl + + @property + def erab_mbr_ul(self) -> int: + """Gets the erab_mbr_ul of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :return: The erab_mbr_ul of this RabModNotificationErabQosParametersQosInformation. + :rtype: int + """ + return self._erab_mbr_ul + + @erab_mbr_ul.setter + def erab_mbr_ul(self, erab_mbr_ul: int): + """Sets the erab_mbr_ul of this RabModNotificationErabQosParametersQosInformation. + + This attribute indicates the maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer. # noqa: E501 + + :param erab_mbr_ul: The erab_mbr_ul of this RabModNotificationErabQosParametersQosInformation. + :type erab_mbr_ul: int + """ + if erab_mbr_ul is None: + raise ValueError("Invalid value for `erab_mbr_ul`, must not be `None`") # noqa: E501 + + self._erab_mbr_ul = erab_mbr_ul diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription.py new file mode 100644 index 0000000..4419251 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.rab_mod_subscription_filter_criteria_qci import RabModSubscriptionFilterCriteriaQci # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class RabModSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_qci: RabModSubscriptionFilterCriteriaQci=None, subscription_type: str=None): # noqa: E501 + """RabModSubscription - a model defined in Swagger + + :param links: The links of this RabModSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this RabModSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this RabModSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_qci: The filter_criteria_qci of this RabModSubscription. # noqa: E501 + :type filter_criteria_qci: RabModSubscriptionFilterCriteriaQci + :param subscription_type: The subscription_type of this RabModSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_qci': RabModSubscriptionFilterCriteriaQci, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_qci': 'filterCriteriaQci', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_qci = filter_criteria_qci + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'RabModSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabModSubscription of this RabModSubscription. # noqa: E501 + :rtype: RabModSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this RabModSubscription. + + + :return: The links of this RabModSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this RabModSubscription. + + + :param links: The links of this RabModSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this RabModSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this RabModSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this RabModSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this RabModSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this RabModSubscription. + + + :return: The expiry_deadline of this RabModSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this RabModSubscription. + + + :param expiry_deadline: The expiry_deadline of this RabModSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_qci(self) -> RabModSubscriptionFilterCriteriaQci: + """Gets the filter_criteria_qci of this RabModSubscription. + + + :return: The filter_criteria_qci of this RabModSubscription. + :rtype: RabModSubscriptionFilterCriteriaQci + """ + return self._filter_criteria_qci + + @filter_criteria_qci.setter + def filter_criteria_qci(self, filter_criteria_qci: RabModSubscriptionFilterCriteriaQci): + """Sets the filter_criteria_qci of this RabModSubscription. + + + :param filter_criteria_qci: The filter_criteria_qci of this RabModSubscription. + :type filter_criteria_qci: RabModSubscriptionFilterCriteriaQci + """ + if filter_criteria_qci is None: + raise ValueError("Invalid value for `filter_criteria_qci`, must not be `None`") # noqa: E501 + + self._filter_criteria_qci = filter_criteria_qci + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this RabModSubscription. + + Shall be set to \"RabModSubscription\". # noqa: E501 + + :return: The subscription_type of this RabModSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this RabModSubscription. + + Shall be set to \"RabModSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this RabModSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription_filter_criteria_qci.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription_filter_criteria_qci.py new file mode 100644 index 0000000..3d8e510 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_mod_subscription_filter_criteria_qci.py @@ -0,0 +1,153 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class RabModSubscriptionFilterCriteriaQci(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, app_instance_id: str=None, ecgi: List[Ecgi]=None, erab_id: int=None, qci: int=None): # noqa: E501 + """RabModSubscriptionFilterCriteriaQci - a model defined in Swagger + + :param app_instance_id: The app_instance_id of this RabModSubscriptionFilterCriteriaQci. # noqa: E501 + :type app_instance_id: str + :param ecgi: The ecgi of this RabModSubscriptionFilterCriteriaQci. # noqa: E501 + :type ecgi: List[Ecgi] + :param erab_id: The erab_id of this RabModSubscriptionFilterCriteriaQci. # noqa: E501 + :type erab_id: int + :param qci: The qci of this RabModSubscriptionFilterCriteriaQci. # noqa: E501 + :type qci: int + """ + self.swagger_types = { + 'app_instance_id': str, + 'ecgi': List[Ecgi], + 'erab_id': int, + 'qci': int + } + + self.attribute_map = { + 'app_instance_id': 'appInstanceId', + 'ecgi': 'ecgi', + 'erab_id': 'erabId', + 'qci': 'qci' + } + self._app_instance_id = app_instance_id + self._ecgi = ecgi + self._erab_id = erab_id + self._qci = qci + + @classmethod + def from_dict(cls, dikt) -> 'RabModSubscriptionFilterCriteriaQci': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabModSubscription_filterCriteriaQci of this RabModSubscriptionFilterCriteriaQci. # noqa: E501 + :rtype: RabModSubscriptionFilterCriteriaQci + """ + return util.deserialize_model(dikt, cls) + + @property + def app_instance_id(self) -> str: + """Gets the app_instance_id of this RabModSubscriptionFilterCriteriaQci. + + Unique identifier for the MEC application instance. # noqa: E501 + + :return: The app_instance_id of this RabModSubscriptionFilterCriteriaQci. + :rtype: str + """ + return self._app_instance_id + + @app_instance_id.setter + def app_instance_id(self, app_instance_id: str): + """Sets the app_instance_id of this RabModSubscriptionFilterCriteriaQci. + + Unique identifier for the MEC application instance. # noqa: E501 + + :param app_instance_id: The app_instance_id of this RabModSubscriptionFilterCriteriaQci. + :type app_instance_id: str + """ + + self._app_instance_id = app_instance_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this RabModSubscriptionFilterCriteriaQci. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this RabModSubscriptionFilterCriteriaQci. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this RabModSubscriptionFilterCriteriaQci. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this RabModSubscriptionFilterCriteriaQci. + :type ecgi: List[Ecgi] + """ + + self._ecgi = ecgi + + @property + def erab_id(self) -> int: + """Gets the erab_id of this RabModSubscriptionFilterCriteriaQci. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The erab_id of this RabModSubscriptionFilterCriteriaQci. + :rtype: int + """ + return self._erab_id + + @erab_id.setter + def erab_id(self, erab_id: int): + """Sets the erab_id of this RabModSubscriptionFilterCriteriaQci. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param erab_id: The erab_id of this RabModSubscriptionFilterCriteriaQci. + :type erab_id: int + """ + if erab_id is None: + raise ValueError("Invalid value for `erab_id`, must not be `None`") # noqa: E501 + + self._erab_id = erab_id + + @property + def qci(self) -> int: + """Gets the qci of this RabModSubscriptionFilterCriteriaQci. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :return: The qci of this RabModSubscriptionFilterCriteriaQci. + :rtype: int + """ + return self._qci + + @qci.setter + def qci(self, qci: int): + """Sets the qci of this RabModSubscriptionFilterCriteriaQci. + + QoS Class Identifier as defined in ETSI TS 123 401 [i.4]. # noqa: E501 + + :param qci: The qci of this RabModSubscriptionFilterCriteriaQci. + :type qci: int + """ + if qci is None: + raise ValueError("Invalid value for `qci`, must not be `None`") # noqa: E501 + + self._qci = qci diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification.py new file mode 100644 index 0000000..b2b0273 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification.py @@ -0,0 +1,180 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.rab_rel_notification_erab_release_info import RabRelNotificationErabReleaseInfo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class RabRelNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ecgi: Ecgi=None, erab_release_info: RabRelNotificationErabReleaseInfo=None, notification_type: str=None, time_stamp: TimeStamp=None): # noqa: E501 + """RabRelNotification - a model defined in Swagger + + :param associate_id: The associate_id of this RabRelNotification. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this RabRelNotification. # noqa: E501 + :type ecgi: Ecgi + :param erab_release_info: The erab_release_info of this RabRelNotification. # noqa: E501 + :type erab_release_info: RabRelNotificationErabReleaseInfo + :param notification_type: The notification_type of this RabRelNotification. # noqa: E501 + :type notification_type: str + :param time_stamp: The time_stamp of this RabRelNotification. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ecgi': Ecgi, + 'erab_release_info': RabRelNotificationErabReleaseInfo, + 'notification_type': str, + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 'erab_release_info': 'erabReleaseInfo', + 'notification_type': 'notificationType', + 'time_stamp': 'timeStamp' + } + self._associate_id = associate_id + self._ecgi = ecgi + self._erab_release_info = erab_release_info + self._notification_type = notification_type + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'RabRelNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabRelNotification of this RabRelNotification. # noqa: E501 + :rtype: RabRelNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this RabRelNotification. + + 0 to N identifiers to bind the event for a specific UE or flow as defined below. # noqa: E501 + + :return: The associate_id of this RabRelNotification. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this RabRelNotification. + + 0 to N identifiers to bind the event for a specific UE or flow as defined below. # noqa: E501 + + :param associate_id: The associate_id of this RabRelNotification. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> Ecgi: + """Gets the ecgi of this RabRelNotification. + + + :return: The ecgi of this RabRelNotification. + :rtype: Ecgi + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: Ecgi): + """Sets the ecgi of this RabRelNotification. + + + :param ecgi: The ecgi of this RabRelNotification. + :type ecgi: Ecgi + """ + if ecgi is None: + raise ValueError("Invalid value for `ecgi`, must not be `None`") # noqa: E501 + + self._ecgi = ecgi + + @property + def erab_release_info(self) -> RabRelNotificationErabReleaseInfo: + """Gets the erab_release_info of this RabRelNotification. + + + :return: The erab_release_info of this RabRelNotification. + :rtype: RabRelNotificationErabReleaseInfo + """ + return self._erab_release_info + + @erab_release_info.setter + def erab_release_info(self, erab_release_info: RabRelNotificationErabReleaseInfo): + """Sets the erab_release_info of this RabRelNotification. + + + :param erab_release_info: The erab_release_info of this RabRelNotification. + :type erab_release_info: RabRelNotificationErabReleaseInfo + """ + if erab_release_info is None: + raise ValueError("Invalid value for `erab_release_info`, must not be `None`") # noqa: E501 + + self._erab_release_info = erab_release_info + + @property + def notification_type(self) -> str: + """Gets the notification_type of this RabRelNotification. + + Shall be set to \"RabRelNotification\". # noqa: E501 + + :return: The notification_type of this RabRelNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this RabRelNotification. + + Shall be set to \"RabRelNotification\". # noqa: E501 + + :param notification_type: The notification_type of this RabRelNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this RabRelNotification. + + + :return: The time_stamp of this RabRelNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this RabRelNotification. + + + :param time_stamp: The time_stamp of this RabRelNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification_erab_release_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification_erab_release_info.py new file mode 100644 index 0000000..3a669ab --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_notification_erab_release_info.py @@ -0,0 +1,66 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class RabRelNotificationErabReleaseInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, erab_id: int=None): # noqa: E501 + """RabRelNotificationErabReleaseInfo - a model defined in Swagger + + :param erab_id: The erab_id of this RabRelNotificationErabReleaseInfo. # noqa: E501 + :type erab_id: int + """ + self.swagger_types = { + 'erab_id': int + } + + self.attribute_map = { + 'erab_id': 'erabId' + } + self._erab_id = erab_id + + @classmethod + def from_dict(cls, dikt) -> 'RabRelNotificationErabReleaseInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabRelNotification_erabReleaseInfo of this RabRelNotificationErabReleaseInfo. # noqa: E501 + :rtype: RabRelNotificationErabReleaseInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def erab_id(self) -> int: + """Gets the erab_id of this RabRelNotificationErabReleaseInfo. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The erab_id of this RabRelNotificationErabReleaseInfo. + :rtype: int + """ + return self._erab_id + + @erab_id.setter + def erab_id(self, erab_id: int): + """Sets the erab_id of this RabRelNotificationErabReleaseInfo. + + The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param erab_id: The erab_id of this RabRelNotificationErabReleaseInfo. + :type erab_id: int + """ + if erab_id is None: + raise ValueError("Invalid value for `erab_id`, must not be `None`") # noqa: E501 + + self._erab_id = erab_id diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_subscription.py new file mode 100644 index 0000000..9ff7b36 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rab_rel_subscription.py @@ -0,0 +1,179 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.rab_mod_subscription_filter_criteria_qci import RabModSubscriptionFilterCriteriaQci # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class RabRelSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, expiry_deadline: TimeStamp=None, filter_criteria_qci: RabModSubscriptionFilterCriteriaQci=None, subscription_type: str=None): # noqa: E501 + """RabRelSubscription - a model defined in Swagger + + :param links: The links of this RabRelSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this RabRelSubscription. # noqa: E501 + :type callback_reference: str + :param expiry_deadline: The expiry_deadline of this RabRelSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param filter_criteria_qci: The filter_criteria_qci of this RabRelSubscription. # noqa: E501 + :type filter_criteria_qci: RabModSubscriptionFilterCriteriaQci + :param subscription_type: The subscription_type of this RabRelSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'expiry_deadline': TimeStamp, + 'filter_criteria_qci': RabModSubscriptionFilterCriteriaQci, + 'subscription_type': str + } + + self.attribute_map = { + 'links': '_links', + 'callback_reference': 'callbackReference', + 'expiry_deadline': 'expiryDeadline', + 'filter_criteria_qci': 'filterCriteriaQci', + 'subscription_type': 'subscriptionType' + } + self._links = links + self._callback_reference = callback_reference + self._expiry_deadline = expiry_deadline + self._filter_criteria_qci = filter_criteria_qci + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'RabRelSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RabRelSubscription of this RabRelSubscription. # noqa: E501 + :rtype: RabRelSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this RabRelSubscription. + + + :return: The links of this RabRelSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this RabRelSubscription. + + + :param links: The links of this RabRelSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this RabRelSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :return: The callback_reference of this RabRelSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this RabRelSubscription. + + URI selected by the service consumer to receive notifications on the subscribed RNIS information. This shall be included both in the request and in response. # noqa: E501 + + :param callback_reference: The callback_reference of this RabRelSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this RabRelSubscription. + + + :return: The expiry_deadline of this RabRelSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this RabRelSubscription. + + + :param expiry_deadline: The expiry_deadline of this RabRelSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def filter_criteria_qci(self) -> RabModSubscriptionFilterCriteriaQci: + """Gets the filter_criteria_qci of this RabRelSubscription. + + + :return: The filter_criteria_qci of this RabRelSubscription. + :rtype: RabModSubscriptionFilterCriteriaQci + """ + return self._filter_criteria_qci + + @filter_criteria_qci.setter + def filter_criteria_qci(self, filter_criteria_qci: RabModSubscriptionFilterCriteriaQci): + """Sets the filter_criteria_qci of this RabRelSubscription. + + + :param filter_criteria_qci: The filter_criteria_qci of this RabRelSubscription. + :type filter_criteria_qci: RabModSubscriptionFilterCriteriaQci + """ + if filter_criteria_qci is None: + raise ValueError("Invalid value for `filter_criteria_qci`, must not be `None`") # noqa: E501 + + self._filter_criteria_qci = filter_criteria_qci + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this RabRelSubscription. + + Shall be set to \"RabRelSubscription\". # noqa: E501 + + :return: The subscription_type of this RabRelSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this RabRelSubscription. + + Shall be set to \"RabRelSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this RabRelSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index.py new file mode 100644 index 0000000..72d1572 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr # noqa: F401,E501 +from swagger_server import util + + +class ResultsPerCsiRsIndex(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, csi_rs_index: int=None, csi_rs_results: MeasQuantityResultsNr=None): # noqa: E501 + """ResultsPerCsiRsIndex - a model defined in Swagger + + :param csi_rs_index: The csi_rs_index of this ResultsPerCsiRsIndex. # noqa: E501 + :type csi_rs_index: int + :param csi_rs_results: The csi_rs_results of this ResultsPerCsiRsIndex. # noqa: E501 + :type csi_rs_results: MeasQuantityResultsNr + """ + self.swagger_types = { + 'csi_rs_index': int, + 'csi_rs_results': MeasQuantityResultsNr + } + + self.attribute_map = { + 'csi_rs_index': 'csiRsIndex', + 'csi_rs_results': 'csiRsResults' + } + self._csi_rs_index = csi_rs_index + self._csi_rs_results = csi_rs_results + + @classmethod + def from_dict(cls, dikt) -> 'ResultsPerCsiRsIndex': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ResultsPerCsiRsIndex of this ResultsPerCsiRsIndex. # noqa: E501 + :rtype: ResultsPerCsiRsIndex + """ + return util.deserialize_model(dikt, cls) + + @property + def csi_rs_index(self) -> int: + """Gets the csi_rs_index of this ResultsPerCsiRsIndex. + + + :return: The csi_rs_index of this ResultsPerCsiRsIndex. + :rtype: int + """ + return self._csi_rs_index + + @csi_rs_index.setter + def csi_rs_index(self, csi_rs_index: int): + """Sets the csi_rs_index of this ResultsPerCsiRsIndex. + + + :param csi_rs_index: The csi_rs_index of this ResultsPerCsiRsIndex. + :type csi_rs_index: int + """ + if csi_rs_index is None: + raise ValueError("Invalid value for `csi_rs_index`, must not be `None`") # noqa: E501 + + self._csi_rs_index = csi_rs_index + + @property + def csi_rs_results(self) -> MeasQuantityResultsNr: + """Gets the csi_rs_results of this ResultsPerCsiRsIndex. + + + :return: The csi_rs_results of this ResultsPerCsiRsIndex. + :rtype: MeasQuantityResultsNr + """ + return self._csi_rs_results + + @csi_rs_results.setter + def csi_rs_results(self, csi_rs_results: MeasQuantityResultsNr): + """Sets the csi_rs_results of this ResultsPerCsiRsIndex. + + + :param csi_rs_results: The csi_rs_results of this ResultsPerCsiRsIndex. + :type csi_rs_results: MeasQuantityResultsNr + """ + + self._csi_rs_results = csi_rs_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list.py new file mode 100644 index 0000000..6707ad9 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.results_per_csi_rs_index_list_results_per_csi_rs_index import ResultsPerCsiRsIndexListResultsPerCsiRsIndex # noqa: F401,E501 +from swagger_server import util + + +class ResultsPerCsiRsIndexList(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, results_per_csi_rs_index: List[ResultsPerCsiRsIndexListResultsPerCsiRsIndex]=None): # noqa: E501 + """ResultsPerCsiRsIndexList - a model defined in Swagger + + :param results_per_csi_rs_index: The results_per_csi_rs_index of this ResultsPerCsiRsIndexList. # noqa: E501 + :type results_per_csi_rs_index: List[ResultsPerCsiRsIndexListResultsPerCsiRsIndex] + """ + self.swagger_types = { + 'results_per_csi_rs_index': List[ResultsPerCsiRsIndexListResultsPerCsiRsIndex] + } + + self.attribute_map = { + 'results_per_csi_rs_index': 'resultsPerCsiRsIndex' + } + self._results_per_csi_rs_index = results_per_csi_rs_index + + @classmethod + def from_dict(cls, dikt) -> 'ResultsPerCsiRsIndexList': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ResultsPerCsiRsIndexList of this ResultsPerCsiRsIndexList. # noqa: E501 + :rtype: ResultsPerCsiRsIndexList + """ + return util.deserialize_model(dikt, cls) + + @property + def results_per_csi_rs_index(self) -> List[ResultsPerCsiRsIndexListResultsPerCsiRsIndex]: + """Gets the results_per_csi_rs_index of this ResultsPerCsiRsIndexList. + + + :return: The results_per_csi_rs_index of this ResultsPerCsiRsIndexList. + :rtype: List[ResultsPerCsiRsIndexListResultsPerCsiRsIndex] + """ + return self._results_per_csi_rs_index + + @results_per_csi_rs_index.setter + def results_per_csi_rs_index(self, results_per_csi_rs_index: List[ResultsPerCsiRsIndexListResultsPerCsiRsIndex]): + """Sets the results_per_csi_rs_index of this ResultsPerCsiRsIndexList. + + + :param results_per_csi_rs_index: The results_per_csi_rs_index of this ResultsPerCsiRsIndexList. + :type results_per_csi_rs_index: List[ResultsPerCsiRsIndexListResultsPerCsiRsIndex] + """ + + self._results_per_csi_rs_index = results_per_csi_rs_index diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list_results_per_csi_rs_index.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list_results_per_csi_rs_index.py new file mode 100644 index 0000000..3b4aa24 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_csi_rs_index_list_results_per_csi_rs_index.py @@ -0,0 +1,89 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr # noqa: F401,E501 +from swagger_server import util + + +class ResultsPerCsiRsIndexListResultsPerCsiRsIndex(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, csi_rs_index: int=None, csi_rs_results: MeasQuantityResultsNr=None): # noqa: E501 + """ResultsPerCsiRsIndexListResultsPerCsiRsIndex - a model defined in Swagger + + :param csi_rs_index: The csi_rs_index of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. # noqa: E501 + :type csi_rs_index: int + :param csi_rs_results: The csi_rs_results of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. # noqa: E501 + :type csi_rs_results: MeasQuantityResultsNr + """ + self.swagger_types = { + 'csi_rs_index': int, + 'csi_rs_results': MeasQuantityResultsNr + } + + self.attribute_map = { + 'csi_rs_index': 'csiRsIndex', + 'csi_rs_results': 'csiRsResults' + } + self._csi_rs_index = csi_rs_index + self._csi_rs_results = csi_rs_results + + @classmethod + def from_dict(cls, dikt) -> 'ResultsPerCsiRsIndexListResultsPerCsiRsIndex': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ResultsPerCsiRsIndexList_resultsPerCsiRsIndex of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. # noqa: E501 + :rtype: ResultsPerCsiRsIndexListResultsPerCsiRsIndex + """ + return util.deserialize_model(dikt, cls) + + @property + def csi_rs_index(self) -> int: + """Gets the csi_rs_index of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + + + :return: The csi_rs_index of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + :rtype: int + """ + return self._csi_rs_index + + @csi_rs_index.setter + def csi_rs_index(self, csi_rs_index: int): + """Sets the csi_rs_index of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + + + :param csi_rs_index: The csi_rs_index of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + :type csi_rs_index: int + """ + + self._csi_rs_index = csi_rs_index + + @property + def csi_rs_results(self) -> MeasQuantityResultsNr: + """Gets the csi_rs_results of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + + + :return: The csi_rs_results of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + :rtype: MeasQuantityResultsNr + """ + return self._csi_rs_results + + @csi_rs_results.setter + def csi_rs_results(self, csi_rs_results: MeasQuantityResultsNr): + """Sets the csi_rs_results of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + + + :param csi_rs_results: The csi_rs_results of this ResultsPerCsiRsIndexListResultsPerCsiRsIndex. + :type csi_rs_results: MeasQuantityResultsNr + """ + + self._csi_rs_results = csi_rs_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index.py new file mode 100644 index 0000000..5577d1d --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index.py @@ -0,0 +1,91 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr # noqa: F401,E501 +from swagger_server import util + + +class ResultsPerSsbIndex(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ssb_index: int=None, ssb_results: MeasQuantityResultsNr=None): # noqa: E501 + """ResultsPerSsbIndex - a model defined in Swagger + + :param ssb_index: The ssb_index of this ResultsPerSsbIndex. # noqa: E501 + :type ssb_index: int + :param ssb_results: The ssb_results of this ResultsPerSsbIndex. # noqa: E501 + :type ssb_results: MeasQuantityResultsNr + """ + self.swagger_types = { + 'ssb_index': int, + 'ssb_results': MeasQuantityResultsNr + } + + self.attribute_map = { + 'ssb_index': 'ssbIndex', + 'ssb_results': 'ssbResults' + } + self._ssb_index = ssb_index + self._ssb_results = ssb_results + + @classmethod + def from_dict(cls, dikt) -> 'ResultsPerSsbIndex': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ResultsPerSsbIndex of this ResultsPerSsbIndex. # noqa: E501 + :rtype: ResultsPerSsbIndex + """ + return util.deserialize_model(dikt, cls) + + @property + def ssb_index(self) -> int: + """Gets the ssb_index of this ResultsPerSsbIndex. + + + :return: The ssb_index of this ResultsPerSsbIndex. + :rtype: int + """ + return self._ssb_index + + @ssb_index.setter + def ssb_index(self, ssb_index: int): + """Sets the ssb_index of this ResultsPerSsbIndex. + + + :param ssb_index: The ssb_index of this ResultsPerSsbIndex. + :type ssb_index: int + """ + if ssb_index is None: + raise ValueError("Invalid value for `ssb_index`, must not be `None`") # noqa: E501 + + self._ssb_index = ssb_index + + @property + def ssb_results(self) -> MeasQuantityResultsNr: + """Gets the ssb_results of this ResultsPerSsbIndex. + + + :return: The ssb_results of this ResultsPerSsbIndex. + :rtype: MeasQuantityResultsNr + """ + return self._ssb_results + + @ssb_results.setter + def ssb_results(self, ssb_results: MeasQuantityResultsNr): + """Sets the ssb_results of this ResultsPerSsbIndex. + + + :param ssb_results: The ssb_results of this ResultsPerSsbIndex. + :type ssb_results: MeasQuantityResultsNr + """ + + self._ssb_results = ssb_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list.py new file mode 100644 index 0000000..cea0f8f --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.results_per_ssb_index_list_results_per_ssb_index import ResultsPerSsbIndexListResultsPerSsbIndex # noqa: F401,E501 +from swagger_server import util + + +class ResultsPerSsbIndexList(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, results_per_ssb_index: List[ResultsPerSsbIndexListResultsPerSsbIndex]=None): # noqa: E501 + """ResultsPerSsbIndexList - a model defined in Swagger + + :param results_per_ssb_index: The results_per_ssb_index of this ResultsPerSsbIndexList. # noqa: E501 + :type results_per_ssb_index: List[ResultsPerSsbIndexListResultsPerSsbIndex] + """ + self.swagger_types = { + 'results_per_ssb_index': List[ResultsPerSsbIndexListResultsPerSsbIndex] + } + + self.attribute_map = { + 'results_per_ssb_index': 'resultsPerSsbIndex' + } + self._results_per_ssb_index = results_per_ssb_index + + @classmethod + def from_dict(cls, dikt) -> 'ResultsPerSsbIndexList': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ResultsPerSsbIndexList of this ResultsPerSsbIndexList. # noqa: E501 + :rtype: ResultsPerSsbIndexList + """ + return util.deserialize_model(dikt, cls) + + @property + def results_per_ssb_index(self) -> List[ResultsPerSsbIndexListResultsPerSsbIndex]: + """Gets the results_per_ssb_index of this ResultsPerSsbIndexList. + + + :return: The results_per_ssb_index of this ResultsPerSsbIndexList. + :rtype: List[ResultsPerSsbIndexListResultsPerSsbIndex] + """ + return self._results_per_ssb_index + + @results_per_ssb_index.setter + def results_per_ssb_index(self, results_per_ssb_index: List[ResultsPerSsbIndexListResultsPerSsbIndex]): + """Sets the results_per_ssb_index of this ResultsPerSsbIndexList. + + + :param results_per_ssb_index: The results_per_ssb_index of this ResultsPerSsbIndexList. + :type results_per_ssb_index: List[ResultsPerSsbIndexListResultsPerSsbIndex] + """ + + self._results_per_ssb_index = results_per_ssb_index diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list_results_per_ssb_index.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list_results_per_ssb_index.py new file mode 100644 index 0000000..dcf1f3f --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/results_per_ssb_index_list_results_per_ssb_index.py @@ -0,0 +1,89 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.meas_quantity_results_nr import MeasQuantityResultsNr # noqa: F401,E501 +from swagger_server import util + + +class ResultsPerSsbIndexListResultsPerSsbIndex(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ssb_index: int=None, ssb_results: MeasQuantityResultsNr=None): # noqa: E501 + """ResultsPerSsbIndexListResultsPerSsbIndex - a model defined in Swagger + + :param ssb_index: The ssb_index of this ResultsPerSsbIndexListResultsPerSsbIndex. # noqa: E501 + :type ssb_index: int + :param ssb_results: The ssb_results of this ResultsPerSsbIndexListResultsPerSsbIndex. # noqa: E501 + :type ssb_results: MeasQuantityResultsNr + """ + self.swagger_types = { + 'ssb_index': int, + 'ssb_results': MeasQuantityResultsNr + } + + self.attribute_map = { + 'ssb_index': 'ssbIndex', + 'ssb_results': 'ssbResults' + } + self._ssb_index = ssb_index + self._ssb_results = ssb_results + + @classmethod + def from_dict(cls, dikt) -> 'ResultsPerSsbIndexListResultsPerSsbIndex': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The ResultsPerSsbIndexList_resultsPerSsbIndex of this ResultsPerSsbIndexListResultsPerSsbIndex. # noqa: E501 + :rtype: ResultsPerSsbIndexListResultsPerSsbIndex + """ + return util.deserialize_model(dikt, cls) + + @property + def ssb_index(self) -> int: + """Gets the ssb_index of this ResultsPerSsbIndexListResultsPerSsbIndex. + + + :return: The ssb_index of this ResultsPerSsbIndexListResultsPerSsbIndex. + :rtype: int + """ + return self._ssb_index + + @ssb_index.setter + def ssb_index(self, ssb_index: int): + """Sets the ssb_index of this ResultsPerSsbIndexListResultsPerSsbIndex. + + + :param ssb_index: The ssb_index of this ResultsPerSsbIndexListResultsPerSsbIndex. + :type ssb_index: int + """ + + self._ssb_index = ssb_index + + @property + def ssb_results(self) -> MeasQuantityResultsNr: + """Gets the ssb_results of this ResultsPerSsbIndexListResultsPerSsbIndex. + + + :return: The ssb_results of this ResultsPerSsbIndexListResultsPerSsbIndex. + :rtype: MeasQuantityResultsNr + """ + return self._ssb_results + + @ssb_results.setter + def ssb_results(self, ssb_results: MeasQuantityResultsNr): + """Sets the ssb_results of this ResultsPerSsbIndexListResultsPerSsbIndex. + + + :param ssb_results: The ssb_results of this ResultsPerSsbIndexListResultsPerSsbIndex. + :type ssb_results: MeasQuantityResultsNr + """ + + self._ssb_results = ssb_results diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rs_index_results.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rs_index_results.py new file mode 100644 index 0000000..4171a3e --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/rs_index_results.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.results_per_csi_rs_index_list import ResultsPerCsiRsIndexList # noqa: F401,E501 +from swagger_server.models.results_per_ssb_index_list import ResultsPerSsbIndexList # noqa: F401,E501 +from swagger_server import util + + +class RsIndexResults(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, results_csi_rs_indexes: ResultsPerCsiRsIndexList=None, results_ssb_indexes: ResultsPerSsbIndexList=None): # noqa: E501 + """RsIndexResults - a model defined in Swagger + + :param results_csi_rs_indexes: The results_csi_rs_indexes of this RsIndexResults. # noqa: E501 + :type results_csi_rs_indexes: ResultsPerCsiRsIndexList + :param results_ssb_indexes: The results_ssb_indexes of this RsIndexResults. # noqa: E501 + :type results_ssb_indexes: ResultsPerSsbIndexList + """ + self.swagger_types = { + 'results_csi_rs_indexes': ResultsPerCsiRsIndexList, + 'results_ssb_indexes': ResultsPerSsbIndexList + } + + self.attribute_map = { + 'results_csi_rs_indexes': 'resultsCsiRsIndexes', + 'results_ssb_indexes': 'resultsSsbIndexes' + } + self._results_csi_rs_indexes = results_csi_rs_indexes + self._results_ssb_indexes = results_ssb_indexes + + @classmethod + def from_dict(cls, dikt) -> 'RsIndexResults': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The RsIndexResults of this RsIndexResults. # noqa: E501 + :rtype: RsIndexResults + """ + return util.deserialize_model(dikt, cls) + + @property + def results_csi_rs_indexes(self) -> ResultsPerCsiRsIndexList: + """Gets the results_csi_rs_indexes of this RsIndexResults. + + + :return: The results_csi_rs_indexes of this RsIndexResults. + :rtype: ResultsPerCsiRsIndexList + """ + return self._results_csi_rs_indexes + + @results_csi_rs_indexes.setter + def results_csi_rs_indexes(self, results_csi_rs_indexes: ResultsPerCsiRsIndexList): + """Sets the results_csi_rs_indexes of this RsIndexResults. + + + :param results_csi_rs_indexes: The results_csi_rs_indexes of this RsIndexResults. + :type results_csi_rs_indexes: ResultsPerCsiRsIndexList + """ + if results_csi_rs_indexes is None: + raise ValueError("Invalid value for `results_csi_rs_indexes`, must not be `None`") # noqa: E501 + + self._results_csi_rs_indexes = results_csi_rs_indexes + + @property + def results_ssb_indexes(self) -> ResultsPerSsbIndexList: + """Gets the results_ssb_indexes of this RsIndexResults. + + + :return: The results_ssb_indexes of this RsIndexResults. + :rtype: ResultsPerSsbIndexList + """ + return self._results_ssb_indexes + + @results_ssb_indexes.setter + def results_ssb_indexes(self, results_ssb_indexes: ResultsPerSsbIndexList): + """Sets the results_ssb_indexes of this RsIndexResults. + + + :param results_ssb_indexes: The results_ssb_indexes of this RsIndexResults. + :type results_ssb_indexes: ResultsPerSsbIndexList + """ + if results_ssb_indexes is None: + raise ValueError("Invalid value for `results_ssb_indexes`, must not be `None`") # noqa: E501 + + self._results_ssb_indexes = results_ssb_indexes diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info.py new file mode 100644 index 0000000..c1c091c --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.s1_bearer_info_s1_ue_info import S1BearerInfoS1UeInfo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class S1BearerInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, s1_ue_info: List[S1BearerInfoS1UeInfo]=None, time_stamp: TimeStamp=None): # noqa: E501 + """S1BearerInfo - a model defined in Swagger + + :param s1_ue_info: The s1_ue_info of this S1BearerInfo. # noqa: E501 + :type s1_ue_info: List[S1BearerInfoS1UeInfo] + :param time_stamp: The time_stamp of this S1BearerInfo. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 's1_ue_info': List[S1BearerInfoS1UeInfo], + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 's1_ue_info': 's1UeInfo', + 'time_stamp': 'timeStamp' + } + self._s1_ue_info = s1_ue_info + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerInfo of this S1BearerInfo. # noqa: E501 + :rtype: S1BearerInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def s1_ue_info(self) -> List[S1BearerInfoS1UeInfo]: + """Gets the s1_ue_info of this S1BearerInfo. + + Information on a specific UE as defined below. # noqa: E501 + + :return: The s1_ue_info of this S1BearerInfo. + :rtype: List[S1BearerInfoS1UeInfo] + """ + return self._s1_ue_info + + @s1_ue_info.setter + def s1_ue_info(self, s1_ue_info: List[S1BearerInfoS1UeInfo]): + """Sets the s1_ue_info of this S1BearerInfo. + + Information on a specific UE as defined below. # noqa: E501 + + :param s1_ue_info: The s1_ue_info of this S1BearerInfo. + :type s1_ue_info: List[S1BearerInfoS1UeInfo] + """ + if s1_ue_info is None: + raise ValueError("Invalid value for `s1_ue_info`, must not be `None`") # noqa: E501 + + self._s1_ue_info = s1_ue_info + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this S1BearerInfo. + + + :return: The time_stamp of this S1BearerInfo. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this S1BearerInfo. + + + :param time_stamp: The time_stamp of this S1BearerInfo. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_enb_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_enb_info.py new file mode 100644 index 0000000..fd6693c --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_enb_info.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class S1BearerInfoEnbInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ip_address: str=None, tunnel_id: str=None): # noqa: E501 + """S1BearerInfoEnbInfo - a model defined in Swagger + + :param ip_address: The ip_address of this S1BearerInfoEnbInfo. # noqa: E501 + :type ip_address: str + :param tunnel_id: The tunnel_id of this S1BearerInfoEnbInfo. # noqa: E501 + :type tunnel_id: str + """ + self.swagger_types = { + 'ip_address': str, + 'tunnel_id': str + } + + self.attribute_map = { + 'ip_address': 'ipAddress', + 'tunnel_id': 'tunnelId' + } + self._ip_address = ip_address + self._tunnel_id = tunnel_id + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerInfoEnbInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerInfo_enbInfo of this S1BearerInfoEnbInfo. # noqa: E501 + :rtype: S1BearerInfoEnbInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def ip_address(self) -> str: + """Gets the ip_address of this S1BearerInfoEnbInfo. + + eNB transport layer address of this S1 bearer. # noqa: E501 + + :return: The ip_address of this S1BearerInfoEnbInfo. + :rtype: str + """ + return self._ip_address + + @ip_address.setter + def ip_address(self, ip_address: str): + """Sets the ip_address of this S1BearerInfoEnbInfo. + + eNB transport layer address of this S1 bearer. # noqa: E501 + + :param ip_address: The ip_address of this S1BearerInfoEnbInfo. + :type ip_address: str + """ + if ip_address is None: + raise ValueError("Invalid value for `ip_address`, must not be `None`") # noqa: E501 + + self._ip_address = ip_address + + @property + def tunnel_id(self) -> str: + """Gets the tunnel_id of this S1BearerInfoEnbInfo. + + eNB GTP-U TEID of this S1 bearer. # noqa: E501 + + :return: The tunnel_id of this S1BearerInfoEnbInfo. + :rtype: str + """ + return self._tunnel_id + + @tunnel_id.setter + def tunnel_id(self, tunnel_id: str): + """Sets the tunnel_id of this S1BearerInfoEnbInfo. + + eNB GTP-U TEID of this S1 bearer. # noqa: E501 + + :param tunnel_id: The tunnel_id of this S1BearerInfoEnbInfo. + :type tunnel_id: str + """ + if tunnel_id is None: + raise ValueError("Invalid value for `tunnel_id`, must not be `None`") # noqa: E501 + + self._tunnel_id = tunnel_id diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_bearer_info_detailed.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_bearer_info_detailed.py new file mode 100644 index 0000000..6005588 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_bearer_info_detailed.py @@ -0,0 +1,118 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.s1_bearer_info_enb_info import S1BearerInfoEnbInfo # noqa: F401,E501 +from swagger_server.models.s1_bearer_info_sgw_info import S1BearerInfoSGwInfo # noqa: F401,E501 +from swagger_server import util + + +class S1BearerInfoS1BearerInfoDetailed(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, enb_info: S1BearerInfoEnbInfo=None, erab_id: int=None, s_gw_info: S1BearerInfoSGwInfo=None): # noqa: E501 + """S1BearerInfoS1BearerInfoDetailed - a model defined in Swagger + + :param enb_info: The enb_info of this S1BearerInfoS1BearerInfoDetailed. # noqa: E501 + :type enb_info: S1BearerInfoEnbInfo + :param erab_id: The erab_id of this S1BearerInfoS1BearerInfoDetailed. # noqa: E501 + :type erab_id: int + :param s_gw_info: The s_gw_info of this S1BearerInfoS1BearerInfoDetailed. # noqa: E501 + :type s_gw_info: S1BearerInfoSGwInfo + """ + self.swagger_types = { + 'enb_info': S1BearerInfoEnbInfo, + 'erab_id': int, + 's_gw_info': S1BearerInfoSGwInfo + } + + self.attribute_map = { + 'enb_info': 'enbInfo', + 'erab_id': 'erabId', + 's_gw_info': 'sGwInfo' + } + self._enb_info = enb_info + self._erab_id = erab_id + self._s_gw_info = s_gw_info + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerInfoS1BearerInfoDetailed': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerInfo_s1BearerInfoDetailed of this S1BearerInfoS1BearerInfoDetailed. # noqa: E501 + :rtype: S1BearerInfoS1BearerInfoDetailed + """ + return util.deserialize_model(dikt, cls) + + @property + def enb_info(self) -> S1BearerInfoEnbInfo: + """Gets the enb_info of this S1BearerInfoS1BearerInfoDetailed. + + + :return: The enb_info of this S1BearerInfoS1BearerInfoDetailed. + :rtype: S1BearerInfoEnbInfo + """ + return self._enb_info + + @enb_info.setter + def enb_info(self, enb_info: S1BearerInfoEnbInfo): + """Sets the enb_info of this S1BearerInfoS1BearerInfoDetailed. + + + :param enb_info: The enb_info of this S1BearerInfoS1BearerInfoDetailed. + :type enb_info: S1BearerInfoEnbInfo + """ + + self._enb_info = enb_info + + @property + def erab_id(self) -> int: + """Gets the erab_id of this S1BearerInfoS1BearerInfoDetailed. + + The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The erab_id of this S1BearerInfoS1BearerInfoDetailed. + :rtype: int + """ + return self._erab_id + + @erab_id.setter + def erab_id(self, erab_id: int): + """Sets the erab_id of this S1BearerInfoS1BearerInfoDetailed. + + The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param erab_id: The erab_id of this S1BearerInfoS1BearerInfoDetailed. + :type erab_id: int + """ + + self._erab_id = erab_id + + @property + def s_gw_info(self) -> S1BearerInfoSGwInfo: + """Gets the s_gw_info of this S1BearerInfoS1BearerInfoDetailed. + + + :return: The s_gw_info of this S1BearerInfoS1BearerInfoDetailed. + :rtype: S1BearerInfoSGwInfo + """ + return self._s_gw_info + + @s_gw_info.setter + def s_gw_info(self, s_gw_info: S1BearerInfoSGwInfo): + """Sets the s_gw_info of this S1BearerInfoS1BearerInfoDetailed. + + + :param s_gw_info: The s_gw_info of this S1BearerInfoS1BearerInfoDetailed. + :type s_gw_info: S1BearerInfoSGwInfo + """ + + self._s_gw_info = s_gw_info diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_ue_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_ue_info.py new file mode 100644 index 0000000..cb0cd02 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_s1_ue_info.py @@ -0,0 +1,150 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.cell_change_notification_temp_ue_id import CellChangeNotificationTempUeId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.s1_bearer_info_s1_bearer_info_detailed import S1BearerInfoS1BearerInfoDetailed # noqa: F401,E501 +from swagger_server import util + + +class S1BearerInfoS1UeInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ecgi: List[Ecgi]=None, s1_bearer_info_detailed: List[S1BearerInfoS1BearerInfoDetailed]=None, temp_ue_id: CellChangeNotificationTempUeId=None): # noqa: E501 + """S1BearerInfoS1UeInfo - a model defined in Swagger + + :param associate_id: The associate_id of this S1BearerInfoS1UeInfo. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this S1BearerInfoS1UeInfo. # noqa: E501 + :type ecgi: List[Ecgi] + :param s1_bearer_info_detailed: The s1_bearer_info_detailed of this S1BearerInfoS1UeInfo. # noqa: E501 + :type s1_bearer_info_detailed: List[S1BearerInfoS1BearerInfoDetailed] + :param temp_ue_id: The temp_ue_id of this S1BearerInfoS1UeInfo. # noqa: E501 + :type temp_ue_id: CellChangeNotificationTempUeId + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ecgi': List[Ecgi], + 's1_bearer_info_detailed': List[S1BearerInfoS1BearerInfoDetailed], + 'temp_ue_id': CellChangeNotificationTempUeId + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 's1_bearer_info_detailed': 's1BearerInfoDetailed', + 'temp_ue_id': 'tempUeId' + } + self._associate_id = associate_id + self._ecgi = ecgi + self._s1_bearer_info_detailed = s1_bearer_info_detailed + self._temp_ue_id = temp_ue_id + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerInfoS1UeInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerInfo_s1UeInfo of this S1BearerInfoS1UeInfo. # noqa: E501 + :rtype: S1BearerInfoS1UeInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this S1BearerInfoS1UeInfo. + + 1 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this S1BearerInfoS1UeInfo. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this S1BearerInfoS1UeInfo. + + 1 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this S1BearerInfoS1UeInfo. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this S1BearerInfoS1UeInfo. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this S1BearerInfoS1UeInfo. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this S1BearerInfoS1UeInfo. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this S1BearerInfoS1UeInfo. + :type ecgi: List[Ecgi] + """ + + self._ecgi = ecgi + + @property + def s1_bearer_info_detailed(self) -> List[S1BearerInfoS1BearerInfoDetailed]: + """Gets the s1_bearer_info_detailed of this S1BearerInfoS1UeInfo. + + S1 bearer information as defined below. # noqa: E501 + + :return: The s1_bearer_info_detailed of this S1BearerInfoS1UeInfo. + :rtype: List[S1BearerInfoS1BearerInfoDetailed] + """ + return self._s1_bearer_info_detailed + + @s1_bearer_info_detailed.setter + def s1_bearer_info_detailed(self, s1_bearer_info_detailed: List[S1BearerInfoS1BearerInfoDetailed]): + """Sets the s1_bearer_info_detailed of this S1BearerInfoS1UeInfo. + + S1 bearer information as defined below. # noqa: E501 + + :param s1_bearer_info_detailed: The s1_bearer_info_detailed of this S1BearerInfoS1UeInfo. + :type s1_bearer_info_detailed: List[S1BearerInfoS1BearerInfoDetailed] + """ + + self._s1_bearer_info_detailed = s1_bearer_info_detailed + + @property + def temp_ue_id(self) -> CellChangeNotificationTempUeId: + """Gets the temp_ue_id of this S1BearerInfoS1UeInfo. + + + :return: The temp_ue_id of this S1BearerInfoS1UeInfo. + :rtype: CellChangeNotificationTempUeId + """ + return self._temp_ue_id + + @temp_ue_id.setter + def temp_ue_id(self, temp_ue_id: CellChangeNotificationTempUeId): + """Sets the temp_ue_id of this S1BearerInfoS1UeInfo. + + + :param temp_ue_id: The temp_ue_id of this S1BearerInfoS1UeInfo. + :type temp_ue_id: CellChangeNotificationTempUeId + """ + + self._temp_ue_id = temp_ue_id diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_sgw_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_sgw_info.py new file mode 100644 index 0000000..6a71a6e --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_info_sgw_info.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class S1BearerInfoSGwInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, ip_address: str=None, tunnel_id: str=None): # noqa: E501 + """S1BearerInfoSGwInfo - a model defined in Swagger + + :param ip_address: The ip_address of this S1BearerInfoSGwInfo. # noqa: E501 + :type ip_address: str + :param tunnel_id: The tunnel_id of this S1BearerInfoSGwInfo. # noqa: E501 + :type tunnel_id: str + """ + self.swagger_types = { + 'ip_address': str, + 'tunnel_id': str + } + + self.attribute_map = { + 'ip_address': 'ipAddress', + 'tunnel_id': 'tunnelId' + } + self._ip_address = ip_address + self._tunnel_id = tunnel_id + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerInfoSGwInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerInfo_sGwInfo of this S1BearerInfoSGwInfo. # noqa: E501 + :rtype: S1BearerInfoSGwInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def ip_address(self) -> str: + """Gets the ip_address of this S1BearerInfoSGwInfo. + + SGW transport layer address of this S1 bearer. # noqa: E501 + + :return: The ip_address of this S1BearerInfoSGwInfo. + :rtype: str + """ + return self._ip_address + + @ip_address.setter + def ip_address(self, ip_address: str): + """Sets the ip_address of this S1BearerInfoSGwInfo. + + SGW transport layer address of this S1 bearer. # noqa: E501 + + :param ip_address: The ip_address of this S1BearerInfoSGwInfo. + :type ip_address: str + """ + if ip_address is None: + raise ValueError("Invalid value for `ip_address`, must not be `None`") # noqa: E501 + + self._ip_address = ip_address + + @property + def tunnel_id(self) -> str: + """Gets the tunnel_id of this S1BearerInfoSGwInfo. + + SGW GTP-U TEID of this S1 bearer. # noqa: E501 + + :return: The tunnel_id of this S1BearerInfoSGwInfo. + :rtype: str + """ + return self._tunnel_id + + @tunnel_id.setter + def tunnel_id(self, tunnel_id: str): + """Sets the tunnel_id of this S1BearerInfoSGwInfo. + + SGW GTP-U TEID of this S1 bearer. # noqa: E501 + + :param tunnel_id: The tunnel_id of this S1BearerInfoSGwInfo. + :type tunnel_id: str + """ + if tunnel_id is None: + raise ValueError("Invalid value for `tunnel_id`, must not be `None`") # noqa: E501 + + self._tunnel_id = tunnel_id diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification.py new file mode 100644 index 0000000..fcb261e --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification.py @@ -0,0 +1,152 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.s1_bearer_notification_s1_ue_info import S1BearerNotificationS1UeInfo # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class S1BearerNotification(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, notification_type: str=None, s1_event: int=None, s1_ue_info: S1BearerNotificationS1UeInfo=None, time_stamp: TimeStamp=None): # noqa: E501 + """S1BearerNotification - a model defined in Swagger + + :param notification_type: The notification_type of this S1BearerNotification. # noqa: E501 + :type notification_type: str + :param s1_event: The s1_event of this S1BearerNotification. # noqa: E501 + :type s1_event: int + :param s1_ue_info: The s1_ue_info of this S1BearerNotification. # noqa: E501 + :type s1_ue_info: S1BearerNotificationS1UeInfo + :param time_stamp: The time_stamp of this S1BearerNotification. # noqa: E501 + :type time_stamp: TimeStamp + """ + self.swagger_types = { + 'notification_type': str, + 's1_event': int, + 's1_ue_info': S1BearerNotificationS1UeInfo, + 'time_stamp': TimeStamp + } + + self.attribute_map = { + 'notification_type': 'notificationType', + 's1_event': 's1Event', + 's1_ue_info': 's1UeInfo', + 'time_stamp': 'timeStamp' + } + self._notification_type = notification_type + self._s1_event = s1_event + self._s1_ue_info = s1_ue_info + self._time_stamp = time_stamp + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerNotification': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerNotification of this S1BearerNotification. # noqa: E501 + :rtype: S1BearerNotification + """ + return util.deserialize_model(dikt, cls) + + @property + def notification_type(self) -> str: + """Gets the notification_type of this S1BearerNotification. + + Shall be set to \"S1BearerNotification\". # noqa: E501 + + :return: The notification_type of this S1BearerNotification. + :rtype: str + """ + return self._notification_type + + @notification_type.setter + def notification_type(self, notification_type: str): + """Sets the notification_type of this S1BearerNotification. + + Shall be set to \"S1BearerNotification\". # noqa: E501 + + :param notification_type: The notification_type of this S1BearerNotification. + :type notification_type: str + """ + if notification_type is None: + raise ValueError("Invalid value for `notification_type`, must not be `None`") # noqa: E501 + + self._notification_type = notification_type + + @property + def s1_event(self) -> int: + """Gets the s1_event of this S1BearerNotification. + + The subscribed event that triggered this notification in S1BearerSubscription. # noqa: E501 + + :return: The s1_event of this S1BearerNotification. + :rtype: int + """ + return self._s1_event + + @s1_event.setter + def s1_event(self, s1_event: int): + """Sets the s1_event of this S1BearerNotification. + + The subscribed event that triggered this notification in S1BearerSubscription. # noqa: E501 + + :param s1_event: The s1_event of this S1BearerNotification. + :type s1_event: int + """ + if s1_event is None: + raise ValueError("Invalid value for `s1_event`, must not be `None`") # noqa: E501 + + self._s1_event = s1_event + + @property + def s1_ue_info(self) -> S1BearerNotificationS1UeInfo: + """Gets the s1_ue_info of this S1BearerNotification. + + + :return: The s1_ue_info of this S1BearerNotification. + :rtype: S1BearerNotificationS1UeInfo + """ + return self._s1_ue_info + + @s1_ue_info.setter + def s1_ue_info(self, s1_ue_info: S1BearerNotificationS1UeInfo): + """Sets the s1_ue_info of this S1BearerNotification. + + + :param s1_ue_info: The s1_ue_info of this S1BearerNotification. + :type s1_ue_info: S1BearerNotificationS1UeInfo + """ + if s1_ue_info is None: + raise ValueError("Invalid value for `s1_ue_info`, must not be `None`") # noqa: E501 + + self._s1_ue_info = s1_ue_info + + @property + def time_stamp(self) -> TimeStamp: + """Gets the time_stamp of this S1BearerNotification. + + + :return: The time_stamp of this S1BearerNotification. + :rtype: TimeStamp + """ + return self._time_stamp + + @time_stamp.setter + def time_stamp(self, time_stamp: TimeStamp): + """Sets the time_stamp of this S1BearerNotification. + + + :param time_stamp: The time_stamp of this S1BearerNotification. + :type time_stamp: TimeStamp + """ + + self._time_stamp = time_stamp diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification_s1_ue_info.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification_s1_ue_info.py new file mode 100644 index 0000000..dcca900 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_notification_s1_ue_info.py @@ -0,0 +1,154 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.cell_change_notification_temp_ue_id import CellChangeNotificationTempUeId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server.models.s1_bearer_info_s1_bearer_info_detailed import S1BearerInfoS1BearerInfoDetailed # noqa: F401,E501 +from swagger_server import util + + +class S1BearerNotificationS1UeInfo(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ecgi: List[Ecgi]=None, s1_bearer_info: List[S1BearerInfoS1BearerInfoDetailed]=None, temp_ue_id: CellChangeNotificationTempUeId=None): # noqa: E501 + """S1BearerNotificationS1UeInfo - a model defined in Swagger + + :param associate_id: The associate_id of this S1BearerNotificationS1UeInfo. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this S1BearerNotificationS1UeInfo. # noqa: E501 + :type ecgi: List[Ecgi] + :param s1_bearer_info: The s1_bearer_info of this S1BearerNotificationS1UeInfo. # noqa: E501 + :type s1_bearer_info: List[S1BearerInfoS1BearerInfoDetailed] + :param temp_ue_id: The temp_ue_id of this S1BearerNotificationS1UeInfo. # noqa: E501 + :type temp_ue_id: CellChangeNotificationTempUeId + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ecgi': List[Ecgi], + 's1_bearer_info': List[S1BearerInfoS1BearerInfoDetailed], + 'temp_ue_id': CellChangeNotificationTempUeId + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 's1_bearer_info': 's1BearerInfo', + 'temp_ue_id': 'tempUeId' + } + self._associate_id = associate_id + self._ecgi = ecgi + self._s1_bearer_info = s1_bearer_info + self._temp_ue_id = temp_ue_id + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerNotificationS1UeInfo': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerNotification_s1UeInfo of this S1BearerNotificationS1UeInfo. # noqa: E501 + :rtype: S1BearerNotificationS1UeInfo + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this S1BearerNotificationS1UeInfo. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :return: The associate_id of this S1BearerNotificationS1UeInfo. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this S1BearerNotificationS1UeInfo. + + 0 to N identifiers to associate the information for a specific UE or flow. # noqa: E501 + + :param associate_id: The associate_id of this S1BearerNotificationS1UeInfo. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this S1BearerNotificationS1UeInfo. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this S1BearerNotificationS1UeInfo. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this S1BearerNotificationS1UeInfo. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this S1BearerNotificationS1UeInfo. + :type ecgi: List[Ecgi] + """ + if ecgi is None: + raise ValueError("Invalid value for `ecgi`, must not be `None`") # noqa: E501 + + self._ecgi = ecgi + + @property + def s1_bearer_info(self) -> List[S1BearerInfoS1BearerInfoDetailed]: + """Gets the s1_bearer_info of this S1BearerNotificationS1UeInfo. + + S1 bearer information as defined below. # noqa: E501 + + :return: The s1_bearer_info of this S1BearerNotificationS1UeInfo. + :rtype: List[S1BearerInfoS1BearerInfoDetailed] + """ + return self._s1_bearer_info + + @s1_bearer_info.setter + def s1_bearer_info(self, s1_bearer_info: List[S1BearerInfoS1BearerInfoDetailed]): + """Sets the s1_bearer_info of this S1BearerNotificationS1UeInfo. + + S1 bearer information as defined below. # noqa: E501 + + :param s1_bearer_info: The s1_bearer_info of this S1BearerNotificationS1UeInfo. + :type s1_bearer_info: List[S1BearerInfoS1BearerInfoDetailed] + """ + if s1_bearer_info is None: + raise ValueError("Invalid value for `s1_bearer_info`, must not be `None`") # noqa: E501 + + self._s1_bearer_info = s1_bearer_info + + @property + def temp_ue_id(self) -> CellChangeNotificationTempUeId: + """Gets the temp_ue_id of this S1BearerNotificationS1UeInfo. + + + :return: The temp_ue_id of this S1BearerNotificationS1UeInfo. + :rtype: CellChangeNotificationTempUeId + """ + return self._temp_ue_id + + @temp_ue_id.setter + def temp_ue_id(self, temp_ue_id: CellChangeNotificationTempUeId): + """Sets the temp_ue_id of this S1BearerNotificationS1UeInfo. + + + :param temp_ue_id: The temp_ue_id of this S1BearerNotificationS1UeInfo. + :type temp_ue_id: CellChangeNotificationTempUeId + """ + + self._temp_ue_id = temp_ue_id diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription.py new file mode 100644 index 0000000..9c2b66f --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription.py @@ -0,0 +1,210 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.ca_reconf_subscription_links import CaReconfSubscriptionLinks # noqa: F401,E501 +from swagger_server.models.enum import Enum # noqa: F401,E501 +from swagger_server.models.s1_bearer_subscription_s1_bearer_subscription_criteria import S1BearerSubscriptionS1BearerSubscriptionCriteria # noqa: F401,E501 +from swagger_server.models.time_stamp import TimeStamp # noqa: F401,E501 +from swagger_server import util + + +class S1BearerSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, s1_bearer_subscription_criteria: S1BearerSubscriptionS1BearerSubscriptionCriteria=None, links: CaReconfSubscriptionLinks=None, callback_reference: str=None, event_type: List[Enum]=None, expiry_deadline: TimeStamp=None, subscription_type: str=None): # noqa: E501 + """S1BearerSubscription - a model defined in Swagger + + :param s1_bearer_subscription_criteria: The s1_bearer_subscription_criteria of this S1BearerSubscription. # noqa: E501 + :type s1_bearer_subscription_criteria: S1BearerSubscriptionS1BearerSubscriptionCriteria + :param links: The links of this S1BearerSubscription. # noqa: E501 + :type links: CaReconfSubscriptionLinks + :param callback_reference: The callback_reference of this S1BearerSubscription. # noqa: E501 + :type callback_reference: str + :param event_type: The event_type of this S1BearerSubscription. # noqa: E501 + :type event_type: List[Enum] + :param expiry_deadline: The expiry_deadline of this S1BearerSubscription. # noqa: E501 + :type expiry_deadline: TimeStamp + :param subscription_type: The subscription_type of this S1BearerSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 's1_bearer_subscription_criteria': S1BearerSubscriptionS1BearerSubscriptionCriteria, + 'links': CaReconfSubscriptionLinks, + 'callback_reference': str, + 'event_type': List[Enum], + 'expiry_deadline': TimeStamp, + 'subscription_type': str + } + + self.attribute_map = { + 's1_bearer_subscription_criteria': 'S1BearerSubscriptionCriteria', + 'links': '_links', + 'callback_reference': 'callbackReference', + 'event_type': 'eventType', + 'expiry_deadline': 'expiryDeadline', + 'subscription_type': 'subscriptionType' + } + self._s1_bearer_subscription_criteria = s1_bearer_subscription_criteria + self._links = links + self._callback_reference = callback_reference + self._event_type = event_type + self._expiry_deadline = expiry_deadline + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerSubscription of this S1BearerSubscription. # noqa: E501 + :rtype: S1BearerSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def s1_bearer_subscription_criteria(self) -> S1BearerSubscriptionS1BearerSubscriptionCriteria: + """Gets the s1_bearer_subscription_criteria of this S1BearerSubscription. + + + :return: The s1_bearer_subscription_criteria of this S1BearerSubscription. + :rtype: S1BearerSubscriptionS1BearerSubscriptionCriteria + """ + return self._s1_bearer_subscription_criteria + + @s1_bearer_subscription_criteria.setter + def s1_bearer_subscription_criteria(self, s1_bearer_subscription_criteria: S1BearerSubscriptionS1BearerSubscriptionCriteria): + """Sets the s1_bearer_subscription_criteria of this S1BearerSubscription. + + + :param s1_bearer_subscription_criteria: The s1_bearer_subscription_criteria of this S1BearerSubscription. + :type s1_bearer_subscription_criteria: S1BearerSubscriptionS1BearerSubscriptionCriteria + """ + if s1_bearer_subscription_criteria is None: + raise ValueError("Invalid value for `s1_bearer_subscription_criteria`, must not be `None`") # noqa: E501 + + self._s1_bearer_subscription_criteria = s1_bearer_subscription_criteria + + @property + def links(self) -> CaReconfSubscriptionLinks: + """Gets the links of this S1BearerSubscription. + + + :return: The links of this S1BearerSubscription. + :rtype: CaReconfSubscriptionLinks + """ + return self._links + + @links.setter + def links(self, links: CaReconfSubscriptionLinks): + """Sets the links of this S1BearerSubscription. + + + :param links: The links of this S1BearerSubscription. + :type links: CaReconfSubscriptionLinks + """ + + self._links = links + + @property + def callback_reference(self) -> str: + """Gets the callback_reference of this S1BearerSubscription. + + URI selected by the service consumer, to receive notifications on the subscribed RNIS information. This shall be included in the request and response. # noqa: E501 + + :return: The callback_reference of this S1BearerSubscription. + :rtype: str + """ + return self._callback_reference + + @callback_reference.setter + def callback_reference(self, callback_reference: str): + """Sets the callback_reference of this S1BearerSubscription. + + URI selected by the service consumer, to receive notifications on the subscribed RNIS information. This shall be included in the request and response. # noqa: E501 + + :param callback_reference: The callback_reference of this S1BearerSubscription. + :type callback_reference: str + """ + if callback_reference is None: + raise ValueError("Invalid value for `callback_reference`, must not be `None`") # noqa: E501 + + self._callback_reference = callback_reference + + @property + def event_type(self) -> List[Enum]: + """Gets the event_type of this S1BearerSubscription. + + Description of the subscribed event. The event is included both in the request and in the response. \\nFor the eventType, the following values are currently defined: <p>0 = RESERVED. <p>1 = S1_BEARER_ESTABLISH. <p>2 = S1_BEARER_MODIFY. <p>3 = S1_BEARER_RELEASE. # noqa: E501 + + :return: The event_type of this S1BearerSubscription. + :rtype: List[Enum] + """ + return self._event_type + + @event_type.setter + def event_type(self, event_type: List[Enum]): + """Sets the event_type of this S1BearerSubscription. + + Description of the subscribed event. The event is included both in the request and in the response. \\nFor the eventType, the following values are currently defined: <p>0 = RESERVED. <p>1 = S1_BEARER_ESTABLISH. <p>2 = S1_BEARER_MODIFY. <p>3 = S1_BEARER_RELEASE. # noqa: E501 + + :param event_type: The event_type of this S1BearerSubscription. + :type event_type: List[Enum] + """ + if event_type is None: + raise ValueError("Invalid value for `event_type`, must not be `None`") # noqa: E501 + + self._event_type = event_type + + @property + def expiry_deadline(self) -> TimeStamp: + """Gets the expiry_deadline of this S1BearerSubscription. + + + :return: The expiry_deadline of this S1BearerSubscription. + :rtype: TimeStamp + """ + return self._expiry_deadline + + @expiry_deadline.setter + def expiry_deadline(self, expiry_deadline: TimeStamp): + """Sets the expiry_deadline of this S1BearerSubscription. + + + :param expiry_deadline: The expiry_deadline of this S1BearerSubscription. + :type expiry_deadline: TimeStamp + """ + + self._expiry_deadline = expiry_deadline + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this S1BearerSubscription. + + Shall be set to \"S1BearerSubscription\". # noqa: E501 + + :return: The subscription_type of this S1BearerSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this S1BearerSubscription. + + Shall be set to \"S1BearerSubscription\". # noqa: E501 + + :param subscription_type: The subscription_type of this S1BearerSubscription. + :type subscription_type: str + """ + if subscription_type is None: + raise ValueError("Invalid value for `subscription_type`, must not be `None`") # noqa: E501 + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription_s1_bearer_subscription_criteria.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription_s1_bearer_subscription_criteria.py new file mode 100644 index 0000000..3a52127 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/s1_bearer_subscription_s1_bearer_subscription_criteria.py @@ -0,0 +1,122 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.associate_id import AssociateId # noqa: F401,E501 +from swagger_server.models.ecgi import Ecgi # noqa: F401,E501 +from swagger_server import util + + +class S1BearerSubscriptionS1BearerSubscriptionCriteria(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, associate_id: List[AssociateId]=None, ecgi: List[Ecgi]=None, erab_id: List[int]=None): # noqa: E501 + """S1BearerSubscriptionS1BearerSubscriptionCriteria - a model defined in Swagger + + :param associate_id: The associate_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. # noqa: E501 + :type associate_id: List[AssociateId] + :param ecgi: The ecgi of this S1BearerSubscriptionS1BearerSubscriptionCriteria. # noqa: E501 + :type ecgi: List[Ecgi] + :param erab_id: The erab_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. # noqa: E501 + :type erab_id: List[int] + """ + self.swagger_types = { + 'associate_id': List[AssociateId], + 'ecgi': List[Ecgi], + 'erab_id': List[int] + } + + self.attribute_map = { + 'associate_id': 'associateId', + 'ecgi': 'ecgi', + 'erab_id': 'erabId' + } + self._associate_id = associate_id + self._ecgi = ecgi + self._erab_id = erab_id + + @classmethod + def from_dict(cls, dikt) -> 'S1BearerSubscriptionS1BearerSubscriptionCriteria': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The S1BearerSubscription_S1BearerSubscriptionCriteria of this S1BearerSubscriptionS1BearerSubscriptionCriteria. # noqa: E501 + :rtype: S1BearerSubscriptionS1BearerSubscriptionCriteria + """ + return util.deserialize_model(dikt, cls) + + @property + def associate_id(self) -> List[AssociateId]: + """Gets the associate_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + + 0 to N identifiers to associate the events for a specific UE or a flow. # noqa: E501 + + :return: The associate_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + :rtype: List[AssociateId] + """ + return self._associate_id + + @associate_id.setter + def associate_id(self, associate_id: List[AssociateId]): + """Sets the associate_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + + 0 to N identifiers to associate the events for a specific UE or a flow. # noqa: E501 + + :param associate_id: The associate_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + :type associate_id: List[AssociateId] + """ + + self._associate_id = associate_id + + @property + def ecgi(self) -> List[Ecgi]: + """Gets the ecgi of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :return: The ecgi of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + :rtype: List[Ecgi] + """ + return self._ecgi + + @ecgi.setter + def ecgi(self, ecgi: List[Ecgi]): + """Sets the ecgi of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + + E-UTRAN Cell Global Identifier. # noqa: E501 + + :param ecgi: The ecgi of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + :type ecgi: List[Ecgi] + """ + + self._ecgi = ecgi + + @property + def erab_id(self) -> List[int]: + """Gets the erab_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + + The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :return: The erab_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + :rtype: List[int] + """ + return self._erab_id + + @erab_id.setter + def erab_id(self, erab_id: List[int]): + """Sets the erab_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + + The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 [i.3]. # noqa: E501 + + :param erab_id: The erab_id of this S1BearerSubscriptionS1BearerSubscriptionCriteria. + :type erab_id: List[int] + """ + + self._erab_id = erab_id diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list.py new file mode 100644 index 0000000..e4551d4 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list.py @@ -0,0 +1,65 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.subscription_link_list_links import SubscriptionLinkListLinks # noqa: F401,E501 +from swagger_server import util + + +class SubscriptionLinkList(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, links: SubscriptionLinkListLinks=None): # noqa: E501 + """SubscriptionLinkList - a model defined in Swagger + + :param links: The links of this SubscriptionLinkList. # noqa: E501 + :type links: SubscriptionLinkListLinks + """ + self.swagger_types = { + 'links': SubscriptionLinkListLinks + } + + self.attribute_map = { + 'links': '_links' + } + self._links = links + + @classmethod + def from_dict(cls, dikt) -> 'SubscriptionLinkList': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The SubscriptionLinkList of this SubscriptionLinkList. # noqa: E501 + :rtype: SubscriptionLinkList + """ + return util.deserialize_model(dikt, cls) + + @property + def links(self) -> SubscriptionLinkListLinks: + """Gets the links of this SubscriptionLinkList. + + + :return: The links of this SubscriptionLinkList. + :rtype: SubscriptionLinkListLinks + """ + return self._links + + @links.setter + def links(self, links: SubscriptionLinkListLinks): + """Sets the links of this SubscriptionLinkList. + + + :param links: The links of this SubscriptionLinkList. + :type links: SubscriptionLinkListLinks + """ + if links is None: + raise ValueError("Invalid value for `links`, must not be `None`") # noqa: E501 + + self._links = links diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links.py new file mode 100644 index 0000000..552fe6f --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links.py @@ -0,0 +1,94 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server.models.link_type import LinkType # noqa: F401,E501 +from swagger_server.models.subscription_link_list_links_subscription import SubscriptionLinkListLinksSubscription # noqa: F401,E501 +from swagger_server import util + + +class SubscriptionLinkListLinks(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, _self: LinkType=None, subscription: List[SubscriptionLinkListLinksSubscription]=None): # noqa: E501 + """SubscriptionLinkListLinks - a model defined in Swagger + + :param _self: The _self of this SubscriptionLinkListLinks. # noqa: E501 + :type _self: LinkType + :param subscription: The subscription of this SubscriptionLinkListLinks. # noqa: E501 + :type subscription: List[SubscriptionLinkListLinksSubscription] + """ + self.swagger_types = { + '_self': LinkType, + 'subscription': List[SubscriptionLinkListLinksSubscription] + } + + self.attribute_map = { + '_self': 'self', + 'subscription': 'subscription' + } + self.__self = _self + self._subscription = subscription + + @classmethod + def from_dict(cls, dikt) -> 'SubscriptionLinkListLinks': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The SubscriptionLinkList__links of this SubscriptionLinkListLinks. # noqa: E501 + :rtype: SubscriptionLinkListLinks + """ + return util.deserialize_model(dikt, cls) + + @property + def _self(self) -> LinkType: + """Gets the _self of this SubscriptionLinkListLinks. + + + :return: The _self of this SubscriptionLinkListLinks. + :rtype: LinkType + """ + return self.__self + + @_self.setter + def _self(self, _self: LinkType): + """Sets the _self of this SubscriptionLinkListLinks. + + + :param _self: The _self of this SubscriptionLinkListLinks. + :type _self: LinkType + """ + if _self is None: + raise ValueError("Invalid value for `_self`, must not be `None`") # noqa: E501 + + self.__self = _self + + @property + def subscription(self) -> List[SubscriptionLinkListLinksSubscription]: + """Gets the subscription of this SubscriptionLinkListLinks. + + A link to a subscription. # noqa: E501 + + :return: The subscription of this SubscriptionLinkListLinks. + :rtype: List[SubscriptionLinkListLinksSubscription] + """ + return self._subscription + + @subscription.setter + def subscription(self, subscription: List[SubscriptionLinkListLinksSubscription]): + """Sets the subscription of this SubscriptionLinkListLinks. + + A link to a subscription. # noqa: E501 + + :param subscription: The subscription of this SubscriptionLinkListLinks. + :type subscription: List[SubscriptionLinkListLinksSubscription] + """ + + self._subscription = subscription diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links_subscription.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links_subscription.py new file mode 100644 index 0000000..3479b51 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/subscription_link_list_links_subscription.py @@ -0,0 +1,92 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class SubscriptionLinkListLinksSubscription(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, href: str=None, subscription_type: str=None): # noqa: E501 + """SubscriptionLinkListLinksSubscription - a model defined in Swagger + + :param href: The href of this SubscriptionLinkListLinksSubscription. # noqa: E501 + :type href: str + :param subscription_type: The subscription_type of this SubscriptionLinkListLinksSubscription. # noqa: E501 + :type subscription_type: str + """ + self.swagger_types = { + 'href': str, + 'subscription_type': str + } + + self.attribute_map = { + 'href': 'href', + 'subscription_type': 'subscriptionType' + } + self._href = href + self._subscription_type = subscription_type + + @classmethod + def from_dict(cls, dikt) -> 'SubscriptionLinkListLinksSubscription': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The SubscriptionLinkList__links_subscription of this SubscriptionLinkListLinksSubscription. # noqa: E501 + :rtype: SubscriptionLinkListLinksSubscription + """ + return util.deserialize_model(dikt, cls) + + @property + def href(self) -> str: + """Gets the href of this SubscriptionLinkListLinksSubscription. + + The URI referring to the subscription. # noqa: E501 + + :return: The href of this SubscriptionLinkListLinksSubscription. + :rtype: str + """ + return self._href + + @href.setter + def href(self, href: str): + """Sets the href of this SubscriptionLinkListLinksSubscription. + + The URI referring to the subscription. # noqa: E501 + + :param href: The href of this SubscriptionLinkListLinksSubscription. + :type href: str + """ + + self._href = href + + @property + def subscription_type(self) -> str: + """Gets the subscription_type of this SubscriptionLinkListLinksSubscription. + + Type of the subscription. The string shall be set according to the \"subscriptionType\" attribute of the associated subscription data type event defined in clause 6.3. # noqa: E501 + + :return: The subscription_type of this SubscriptionLinkListLinksSubscription. + :rtype: str + """ + return self._subscription_type + + @subscription_type.setter + def subscription_type(self, subscription_type: str): + """Sets the subscription_type of this SubscriptionLinkListLinksSubscription. + + Type of the subscription. The string shall be set according to the \"subscriptionType\" attribute of the associated subscription data type event defined in clause 6.3. # noqa: E501 + + :param subscription_type: The subscription_type of this SubscriptionLinkListLinksSubscription. + :type subscription_type: str + """ + + self._subscription_type = subscription_type diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/time_stamp.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/time_stamp.py new file mode 100644 index 0000000..b59df50 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/time_stamp.py @@ -0,0 +1,96 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class TimeStamp(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + def __init__(self, nano_seconds: int=None, seconds: int=None): # noqa: E501 + """TimeStamp - a model defined in Swagger + + :param nano_seconds: The nano_seconds of this TimeStamp. # noqa: E501 + :type nano_seconds: int + :param seconds: The seconds of this TimeStamp. # noqa: E501 + :type seconds: int + """ + self.swagger_types = { + 'nano_seconds': int, + 'seconds': int + } + + self.attribute_map = { + 'nano_seconds': 'nanoSeconds', + 'seconds': 'seconds' + } + self._nano_seconds = nano_seconds + self._seconds = seconds + + @classmethod + def from_dict(cls, dikt) -> 'TimeStamp': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The TimeStamp of this TimeStamp. # noqa: E501 + :rtype: TimeStamp + """ + return util.deserialize_model(dikt, cls) + + @property + def nano_seconds(self) -> int: + """Gets the nano_seconds of this TimeStamp. + + The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. # noqa: E501 + + :return: The nano_seconds of this TimeStamp. + :rtype: int + """ + return self._nano_seconds + + @nano_seconds.setter + def nano_seconds(self, nano_seconds: int): + """Sets the nano_seconds of this TimeStamp. + + The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC. # noqa: E501 + + :param nano_seconds: The nano_seconds of this TimeStamp. + :type nano_seconds: int + """ + if nano_seconds is None: + raise ValueError("Invalid value for `nano_seconds`, must not be `None`") # noqa: E501 + + self._nano_seconds = nano_seconds + + @property + def seconds(self) -> int: + """Gets the seconds of this TimeStamp. + + The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC. # noqa: E501 + + :return: The seconds of this TimeStamp. + :rtype: int + """ + return self._seconds + + @seconds.setter + def seconds(self, seconds: int): + """Sets the seconds of this TimeStamp. + + The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC. # noqa: E501 + + :param seconds: The seconds of this TimeStamp. + :type seconds: int + """ + if seconds is None: + raise ValueError("Invalid value for `seconds`, must not be `None`") # noqa: E501 + + self._seconds = seconds diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger.py new file mode 100644 index 0000000..ea0e056 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger.py @@ -0,0 +1,63 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class Trigger(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + allowed enum values + """ + _0 = "0" + _1 = "1" + _2 = "2" + _3 = "3" + _4 = "4" + _5 = "5" + _10 = "10" + _11 = "11" + _12 = "12" + _13 = "13" + _14 = "14" + _15 = "15" + _20 = "20" + _21 = "21" + _30 = "30" + _31 = "31" + _40 = "40" + _41 = "41" + _42 = "42" + _50 = "50" + _51 = "51" + _60 = "60" + _61 = "61" + def __init__(self): # noqa: E501 + """Trigger - a model defined in Swagger + + """ + self.swagger_types = { + } + + self.attribute_map = { + } + + @classmethod + def from_dict(cls, dikt) -> 'Trigger': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The Trigger of this Trigger. # noqa: E501 + :rtype: Trigger + """ + return util.deserialize_model(dikt, cls) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger_nr.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger_nr.py new file mode 100644 index 0000000..a90d390 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/models/trigger_nr.py @@ -0,0 +1,53 @@ +# coding: utf-8 + +from __future__ import absolute_import +from datetime import date, datetime # noqa: F401 + +from typing import List, Dict # noqa: F401 + +from swagger_server.models.base_model_ import Model +from swagger_server import util + + +class TriggerNr(Model): + """NOTE: This class is auto generated by the swagger code generator program. + + Do not edit the class manually. + """ + + """ + allowed enum values + """ + _0 = "0" + _1 = "1" + _2 = "2" + _10 = "10" + _11 = "11" + _12 = "12" + _13 = "13" + _14 = "14" + _15 = "15" + _20 = "20" + _21 = "21" + _30 = "30" + _31 = "31" + def __init__(self): # noqa: E501 + """TriggerNr - a model defined in Swagger + + """ + self.swagger_types = { + } + + self.attribute_map = { + } + + @classmethod + def from_dict(cls, dikt) -> 'TriggerNr': + """Returns the dict as a model + + :param dikt: A dict. + :type: dict + :return: The TriggerNr of this TriggerNr. # noqa: E501 + :rtype: TriggerNr + """ + return util.deserialize_model(dikt, cls) diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/swagger/swagger.yaml b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/swagger/swagger.yaml new file mode 100644 index 0000000..fdba56e --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/swagger/swagger.yaml @@ -0,0 +1,4932 @@ +openapi: 3.0.0 +info: + title: ETSI GS MEC 012 - Radio Network Information API + description: The ETSI MEC ISG MEC012 Radio Network Information API described using + OpenAPI. + contact: + url: https://forge.etsi.org/rep/mec/gs012-rnis-api + license: + name: BSD-3-Clause + url: https://forge.etsi.org/legal-matters + version: 2.1.1 +externalDocs: + description: "ETSI GS MEC 012 Radio Network Information API, V2.1.1" + url: http://www.etsi.org/deliver/etsi_gs/MEC/001_099/012/02.01.01_60/gs_mec012v020101p.pdf +servers: +- url: https://localhost/rni/v2 +tags: +- name: rni +paths: + /queries/rab_info: + get: + tags: + - rni + summary: Retrieve information on Radio Access Bearers + description: Queries information about the Radio Access Bearers + operationId: rab_info_get + parameters: + - name: app_ins_id + in: query + description: Application instance identifier + required: false + style: form + explode: true + schema: + type: string + x-exportParamName: AppInsId + x-optionalDataType: String + - name: cell_id + in: query + description: Comma separated list of E-UTRAN Cell Identities + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: CellId + - name: ue_ipv4_address + in: query + description: Comma separated list of IE IPv4 addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv4Address + - name: ue_ipv6_address + in: query + description: Comma separated list of IE IPv6 addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv6Address + - name: nated_ip_address + in: query + description: Comma separated list of IE NATed IP addresses as defined for + the type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: NatedIpAddress + - name: gtp_teid + in: query + description: Comma separated list of GTP TEID addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: GtpTeid + - name: erab_id + in: query + description: E-RAB identifier + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabId + x-optionalDataType: Int32 + - name: qci + in: query + description: QoS Class Identifier as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: Qci + x-optionalDataType: Int32 + - name: erab_mbr_dl + in: query + description: Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabMbrDl + x-optionalDataType: Int32 + - name: erab_mbr_ul + in: query + description: Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabMbrUl + x-optionalDataType: Int32 + - name: erab_gbr_dl + in: query + description: Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 + 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabGbrDl + x-optionalDataType: Int32 + - name: erab_gbr_ul + in: query + description: Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabGbrUl + x-optionalDataType: Int32 + responses: + "200": + description: Successful response to rab_info request + content: + application/json: + schema: + $ref: '#/components/schemas/RabInfo' + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: queries + x-openapi-router-controller: swagger_server.controllers.rni_controller + /queries/plmn_info: + get: + tags: + - rni + summary: Retrieve information on the underlying Mobile Network that the MEC + application is associated to + description: Queries information about the Mobile Network + operationId: plmn_info_get + parameters: + - name: app_ins_id + in: query + description: Comma separated list of Application instance identifiers + required: true + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: AppInsIdArr + responses: + "200": + description: Successful response to plmn_info request + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/PlmnInfo' + x-content-type: application/json + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: queries + x-openapi-router-controller: swagger_server.controllers.rni_controller + /queries/s1_bearer_info: + get: + tags: + - rni + summary: Retrieve S1-U bearer information related to specific UE(s) + description: Queries information about the S1 bearer(s) + operationId: s1_bearer_info_get + parameters: + - name: temp_ue_id + in: query + description: Comma separated list of temporary identifiers allocated for the + specific UE as defined in ETSI TS 136 413 + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: TempUeId + - name: ue_ipv4_address + in: query + description: Comma separated list of IE IPv4 addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv4Address + - name: ue_ipv6_address + in: query + description: Comma separated list of IE IPv6 addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv6Address + - name: nated_ip_address + in: query + description: Comma separated list of IE NATed IP addresses as defined for + the type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: NatedIpAddress + - name: gtp_teid + in: query + description: Comma separated list of GTP TEID addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: GtpTeid + - name: cell_id + in: query + description: Comma separated list of E-UTRAN Cell Identities + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: CellId + - name: erab_id + in: query + description: Comma separated list of E-RAB identifiers + required: false + style: form + explode: true + schema: + type: array + items: + type: integer + format: int32 + x-exportParamName: ErabIdArr + responses: + "200": + description: Successful response to s1_bearer_info request + content: + application/json: + schema: + $ref: '#/components/schemas/S1BearerInfo' + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: queries + x-openapi-router-controller: swagger_server.controllers.rni_controller + /queries/layer2_meas: + get: + tags: + - rni + summary: Retrieve information on layer 2 measurements + description: Queries information about the layer 2 measurements. + operationId: layer2_meas_info_get + parameters: + - name: app_ins_id + in: query + description: Application instance identifier + required: false + style: form + explode: true + schema: + type: string + x-exportParamName: AppInsId + x-optionalDataType: String + - name: cell_id + in: query + description: Comma separated list of E-UTRAN Cell Identities + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: CellId + - name: ue_ipv4_address + in: query + description: Comma separated list of IE IPv4 addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv4Address + - name: ue_ipv6_address + in: query + description: Comma separated list of IE IPv6 addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv6Address + - name: nated_ip_address + in: query + description: Comma separated list of IE NATed IP addresses as defined for + the type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: NatedIpAddress + - name: gtp_teid + in: query + description: Comma separated list of GTP TEID addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: GtpTeid + - name: dl_gbr_prb_usage_cell + in: query + description: PRB usage for downlink GBR traffic in percentage as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrPrbUsageCell + - name: ul_gbr_prb_usage_cell + in: query + description: PRB usage for uplink GBR traffic in percentage as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrPrbUsageCell + - name: dl_nongbr_prb_usage_cell + in: query + description: PRB usage for downlink non-GBR traffic in percentage as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrPrbUsageCell + - name: ul_nongbr_prb_usage_cell + in: query + description: PRB usage for uplink non-GBR traffic in percentage as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrPrbUsageCell + - name: dl_total_prb_usage_cell + in: query + description: PRB usage for total downlink traffic in percentage as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlTotalPrbUsageCell + - name: ul_total_prb_usage_cell + in: query + description: PRB usage for total uplink traffic in percentage as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlTotalPrbUsageCell + - name: received_dedicated_preambles_cell + in: query + description: Received dedicated preambles in percentage as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: ReceivedDedicatedPreamblesCell + - name: received_randomly_selected_preambles_low_range_cell + in: query + description: Received randomly selected preambles in the low range in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: ReceivedRandomPreamblesLowRangeCell + - name: received_randomly_selected_preambles_high_range_cell + in: query + description: Received rendomly selected preambles in the high range in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: ReceivedRandomPreamblesHighRangeCell + - name: number_of_active_ue_dl_gbr_cell + in: query + description: Number of active UEs with downlink GBR traffic as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeDlGbrCell + - name: number_of_active_ue_ul_gbr_cell + in: query + description: Number of active UEs with uplink GBR traffic as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeUlGbrCell + - name: number_of_active_ue_dl_nongbr_cell + in: query + description: Number of active UEs with downlink non-GBR traffic as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeDlNonGbrCell + - name: number_of_active_ue_ul_nongbr_cell + in: query + description: Number of active UEs with uplink non-GBR traffic as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeUlNonGbrCell + - name: dl_gbr_pdr_cell + in: query + description: Packet discard rate for downlink GBR traffic in percentage as + defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrPdrCell + - name: ul_gbr_pdr_cell + in: query + description: Packet discard rate for uplink GBR traffic in percentage as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrPdrCell + - name: dl_nongbr_pdr_cell + in: query + description: Packet discard rate for downlink non-GBR traffic in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrPdrCell + - name: ul_nongbr_pdr_cell + in: query + description: Packet discard rate for uplink non-GBR traffic in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrPdrCell + - name: dl_gbr_delay_ue + in: query + description: Packet delay of downlink GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrDelayUe + - name: ul_gbr_delay_ue + in: query + description: Packet delay of uplink GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrDelayUe + - name: dl_nongbr_delay_ue + in: query + description: Packet delay of downlink non-GBR traffic of a UE as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrDelayUe + - name: ul_nongbr_delay_ue + in: query + description: Packet delay of uplink non-GBR traffic of a UE as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrDelayUe + - name: dl_gbr_pdr_ue + in: query + description: Packet discard rate of downlink GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrPdrUe + - name: ul_gbr_pdr_ue + in: query + description: Packet discard rate of uplink GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrPdrUe + - name: dl_nongbr_pdr_ue + in: query + description: Packet discard rate of downlink non-GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrPdrUe + - name: ul_nongbr_pdr_ue + in: query + description: Packet discard rate of uplink non-GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrPdrUe + - name: dl_gbr_throughput_ue + in: query + description: Scheduled throughput of downlink GBR traffic of a UE as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrThroughputUe + - name: ul_gbr_throughput_ue + in: query + description: Scheduled throughput of uplink GBR traffic of a UE as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrThroughputUe + - name: dl_nongbr_throughput_ue + in: query + description: Scheduled throughput of downlink non-GBR traffic of a UE as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrThroughputUe + - name: ul_nongbr_throughput_ue + in: query + description: Scheduled throughput of uplink non-GBR traffic of a UE as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrThroughputUe + - name: dl_gbr_data_volume_ue + in: query + description: Data volume of downlink GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrDataVolumeUe + - name: ul_gbr_data_volume_ue + in: query + description: Data volume of uplink GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrDataVolumeUe + - name: dl_nongbr_data_volume_ue + in: query + description: Data volume of downlink non-GBR traffic of a UE as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrDataVolumeUe + - name: ul_nongbr_data_volume_ue + in: query + description: Data volume of uplink non-GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrDataVolumeUe + responses: + "200": + description: Successful response to layer2 measurements info request + content: + application/json: + schema: + $ref: '#/components/schemas/L2Meas' + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "414": + description: "URI Too Long : used to indicate that the server is refusing\ + \ to process the request because the request URI is longer than the server\ + \ is willing or able to process." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: queries + x-openapi-router-controller: swagger_server.controllers.rni_controller + /subscriptions: + get: + tags: + - rni + summary: Retrieve information on subscriptions for notifications + description: Queries information on subscriptions for notifications + operationId: subscription_link_list_subscriptions_get + parameters: + - name: subscription_type + in: query + description: "Filter on a specific subscription type. Permitted values: cell_change,\ + \ rab_est, rab_mod, rab_rel, meas_rep_ue, nr_meas_rep_ue, timing_advance_ue,\ + \ ca_reconf, s1_bearer." + required: false + style: form + explode: true + schema: + type: string + x-exportParamName: SubscriptionType + responses: + "200": + description: Response body contains the list of links to requestors subscriptions. + content: + application/json: + schema: + $ref: '#/components/schemas/SubscriptionLinkList' + example: + _links: + self: + href: http://meAppServer.example.com/rni/v2/subscriptions + subscription: + - _links: + self: + href: http://meAppServer.example.com/rni/v2/subscriptions/sub123 + callbackReference: http://my.callback.com/rni-cell-change/some-id + subscriptionType: CellChangeSubscription + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: subscriptions + x-openapi-router-controller: swagger_server.controllers.rni_controller + post: + tags: + - rni + summary: Create a new subscription + description: Creates a new subscription to Radio Network Information notifications + operationId: subscriptions_post + requestBody: + description: Subscription to be created + content: + application/json: + schema: + $ref: '#/components/schemas/InlineSubscription' + example: + subscriptionType: CellChangeSubscription + callbackReference: http://my.callback.com/rni-cell-change/some-id + filterCriteriaAssocHo: + appInstanceId: myApp + associateId: + - type: 1 + value: 10.100.0.1 + ecgi: + - plmn: + mnc: "01" + mcc: "001" + cellId: ACBDEFA + hoStatus: + - 1 + - 2 + expiryDeadline: + seconds: 1977836800 + nanoseconds: 0 + required: true + responses: + "201": + description: Successful subscription + content: + application/json: + schema: + $ref: '#/components/schemas/InlineSubscription' + example: + subscriptionType: CellChangeSubscription + callbackReference: http://my.callback.com/rni-cell-change/some-id + _links: + self: + href: http://meAppServer.example.com/rni/v2/subscriptions/sub123 + filterCriteriaAssocHo: + appInstanceId: myApp + associateId: + - type: 1 + value: 10.100.0.1 + ecgi: + - plmn: + mnc: "01" + mcc: "001" + cellId: ACBDEFA + hoStatus: + - 1 + - 2 + expiryDeadline: + seconds: 1977836800 + nanoseconds: 0 + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "415": + description: "Precondition failed : used when a condition has failed during\ + \ conditional requests, e.g. when using ETags to avoid write conflicts\ + \ when using PUT" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "422": + description: "Unprocessable Entity : used to indicate that the server understands\ + \ the content type of the request entity and that the syntax of the request\ + \ entity is correct but that the server is unable to process the contained\ + \ instructions. This error condition can occur if an JSON request body\ + \ is syntactically correct but semantically incorrect, for example if\ + \ the target area for the request is considered too large. This error\ + \ condition can also occur if the capabilities required by the request\ + \ are not supported." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + example: + application/problem+json: + type: https://meAppServer.example.com/rni/v2/probs/too-many targets + title: Too many targets + status: "422" + detail: The target area for the request is considered too large + instance: /meAppClient.example.com/77777/msgs/abc + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + callbacks: + notification: + '{$request.body#/notificationSubscription.callbackReference}': + post: + summary: Callback POST used to send a notification + description: "Notification from RNIS, content based on subscription\ + \ type" + operationId: notificationPOST + requestBody: + description: Subscription notification + content: + application/json: + schema: + $ref: '#/components/schemas/InlineNotification' + example: + notificationType: CellChangeNotification + associateId: + - type: 1 + value: 10.100.0.1 + hoStatus: 1 + srcEcgi: + plmn: + mnc: "01" + mcc: "001" + cellId: ACBDEFA + tempUeId: + mmec: 1 + mtmsi: 1011231231234 + timeStamp: + seconds: 1977836800 + nanoseconds: 0 + trgEcgi: + plmn: + mnc: "01" + mcc: "001" + cellId: FEDCBAA + required: true + responses: + "204": + description: No Content + x-swagger-router-controller: subscriptions + x-openapi-router-controller: swagger_server.controllers.rni_controller + /subscriptions/{subscriptionId}: + get: + tags: + - rni + summary: Retrieve information on current specific subscription + description: "Queries information about an existing subscription, identified\ + \ by its self-referring URI returned on creation (initial POST)" + operationId: subscriptions_get + parameters: + - name: subscriptionId + in: path + description: "Subscription Id, specifically the \"Self-referring URI\" returned\ + \ in the subscription request" + required: true + style: simple + explode: false + schema: + type: string + format: uri + x-exportParamName: SubscriptionId + responses: + "200": + description: Subscription information regarding subscription notifications + content: + application/json: + schema: + $ref: '#/components/schemas/InlineSubscription' + example: + subscriptionType: CellChangeSubscription + callbackReference: http://my.callback.com/rni-cell-change/some-id + _links: + self: + href: http://meAppServer.example.com/rni/v2/subscriptions/sub123 + filterCriteriaAssocHo: + appInstanceId: myApp + associateId: + - type: 1 + value: 10.100.0.1 + ecgi: + - plmn: + mnc: "01" + mcc: "001" + cellId: ACBDEFA + hoStatus: + - 1 + - 2 + expiryDeadline: + seconds: 1977836800 + nanoseconds: 0 + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: subscriptions + x-openapi-router-controller: swagger_server.controllers.rni_controller + put: + tags: + - rni + summary: Modify an existing subscription + description: "Updates an existing subscription, identified by its self-referring\ + \ URI returned on creation (initial POST)" + operationId: subscriptions_put + parameters: + - name: subscriptionId + in: path + description: "Subscription Id, specifically the \"Self-referring URI\" returned\ + \ in the subscription request" + required: true + style: simple + explode: false + schema: + type: string + format: uri + x-exportParamName: SubscriptionId + requestBody: + description: Subscription to be modified + content: + application/json: + schema: + $ref: '#/components/schemas/InlineSubscription' + example: + subscriptionType: CellChangeSubscription + callbackReference: http://my.callback.com/rni-cell-change/some-id + _links: + self: + href: http://meAppServer.example.com/rni/v2/subscriptions/sub123 + filterCriteriaAssocHo: + appInstanceId: myApp + associateId: + - type: 1 + value: 10.100.0.1 + ecgi: + - plmn: + mnc: "01" + mcc: "001" + cellId: ACBDEFA + hoStatus: + - 1 + - 2 + expiryDeadline: + seconds: 1977836800 + nanoseconds: 0 + required: true + responses: + "200": + description: Successful subscription to response to subscription notifications + content: + application/json: + schema: + $ref: '#/components/schemas/InlineSubscription' + example: + subscriptionType: CellChangeSubscription + callbackReference: http://my.callback.com/rni-cell-change/some-id + _links: + self: + href: http://meAppServer.example.com/rni/v2/subscriptions/sub123 + filterCriteriaAssocHo: + appInstanceId: myApp + associateId: + - type: 1 + value: 10.100.0.1 + ecgi: + - plmn: + mnc: "01" + mcc: "001" + cellId: ACBDEFA + hoStatus: + - 1 + - 2 + expiryDeadline: + seconds: 1977836800 + nanoseconds: 0 + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "412": + description: "Precondition failed : used when a condition has failed during\ + \ conditional requests, e.g. when using ETags to avoid write conflicts\ + \ when using PUT" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "422": + description: "Unprocessable Entity : used to indicate that the server understands\ + \ the content type of the request entity and that the syntax of the request\ + \ entity is correct but that the server is unable to process the contained\ + \ instructions. This error condition can occur if an JSON request body\ + \ is syntactically correct but semantically incorrect, for example if\ + \ the target area for the request is considered too large. This error\ + \ condition can also occur if the capabilities required by the request\ + \ are not supported." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + example: + application/problem+json: + type: https://meAppServer.example.com/rni/v2/probs/too-many targets + title: Too many targets + status: "422" + detail: The target area for the request is considered too large + instance: /meAppClient.example.com/77777/msgs/abc + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: subscriptions + x-openapi-router-controller: swagger_server.controllers.rni_controller + delete: + tags: + - rni + summary: Cancel an existing subscription + description: "Cancels an existing subscription, identified by its self-referring\ + \ URI returned on creation (initial POST)" + operationId: subscriptions_delete + parameters: + - name: subscriptionId + in: path + description: "Subscription Id, specifically the \"Self-referring URI\" returned\ + \ in the subscription request" + required: true + style: simple + explode: false + schema: + type: string + format: uri + x-exportParamName: SubscriptionId + responses: + "204": + description: No Content + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot\ + \ be mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + x-swagger-router-controller: subscriptions + x-openapi-router-controller: swagger_server.controllers.rni_controller +components: + schemas: + AssociateId: + properties: + type: + type: integer + description: "Numeric value (0-255) corresponding to specified type of identifier\ + \ as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS.\ + \ <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID." + enum: + - 0 + - 1 + - 2 + - 3 + - 4 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Enum + value: + type: string + description: Value for the identifier. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + example: + type: 0 + value: value + CaReconfNotification: + required: + - ecgi + - notificationType + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the event for a specific UE + or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + carrierAggregationMeasInfo: + minItems: 0 + required: + - cellIdNei + - cellIdSrv + type: array + description: This parameter can be repeated to contain information of all + the carriers assign for Carrier Aggregation up to M. + items: + $ref: '#/components/schemas/CaReconfNotification_carrierAggregationMeasInfo' + x-etsi-mec-cardinality: 0..M + x-etsi-mec-origin-type: Structure (inlined) + ecgi: + $ref: '#/components/schemas/Ecgi' + notificationType: + type: string + description: Shall be set to "CaReConfNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + secondaryCellAdd: + minItems: 0 + required: + - ecgi + type: array + description: "" + items: + $ref: '#/components/schemas/CaReconfNotification_secondaryCellAdd' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + secondaryCellRemove: + minItems: 0 + required: + - ecgi + type: array + description: "" + items: + $ref: '#/components/schemas/CaReconfNotification_secondaryCellAdd' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + timeStamp: + $ref: '#/components/schemas/TimeStamp' + x-etsi-ref: 6.4.8 + CaReconfSubscription: + required: + - callbackReference + - filterCriteriaAssoc + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumer to receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaAssoc: + $ref: '#/components/schemas/CaReconfSubscription_filterCriteriaAssoc' + subscriptionType: + type: string + description: Shall be set to "CaReconfSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.8 + CellChangeNotification: + required: + - hoStatus + - notificationType + - srcEcgi + - trgEcgi + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the event for a specific UE + or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + hoStatus: + type: integer + description: "Indicate the status of the UE handover procedure. Values are\ + \ defined as following: <p>1 = IN_PREPARATION. <p>2 = IN_EXECUTION. <p>3\ + \ = COMPLETED. <p>4 = REJECTED. <p>5 = CANCELLED." + enum: + - 1 + - 2 + - 3 + - 4 + - 5 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Enum + notificationType: + type: string + description: Shall be set to "CellChangeNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + srcEcgi: + $ref: '#/components/schemas/Ecgi' + tempUeId: + $ref: '#/components/schemas/CellChangeNotification_tempUeId' + timeStamp: + $ref: '#/components/schemas/TimeStamp' + trgEcgi: + minItems: 1 + type: array + description: |- + E-UTRAN Cell Global Identifier of the target cell. + NOTE: Cardinality N is valid only in case of statuses IN_PREPARATION, REJECTED and CANCELLED. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Ecgi + x-etsi-ref: 6.4.2 + CellChangeSubscription: + required: + - callbackReference + - filterCriteriaAssocHo + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumerto receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaAssocHo: + $ref: '#/components/schemas/CellChangeSubscription_filterCriteriaAssocHo' + subscriptionType: + type: string + description: Shall be set to "CellChangeSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.2 + CellId: + type: string + description: "String representing the E-UTRAN Cell Identity. Encoded as a bit\ + \ string (size (28)) as defined in ETSI TS 136 413 [i.3]." + Ecgi: + required: + - cellId + - plmn + type: object + properties: + cellId: + $ref: '#/components/schemas/CellId' + plmn: + $ref: '#/components/schemas/Plmn' + example: + plmn: + mnc: mnc + mcc: mcc + cellId: cellId + x-etsi-ref: 6.5.6 + Enum: + type: integer + ExpiryNotification: + required: + - _links + - expiryDeadline + type: object + properties: + _links: + $ref: '#/components/schemas/ExpiryNotification__links' + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + timeStamp: + $ref: '#/components/schemas/TimeStamp' + x-etsi-ref: 6.4.9 + L2Meas: + type: object + properties: + cellInfo: + minItems: 0 + required: + - ecgi + type: array + description: The per cell measurement information as defined below. + items: + $ref: '#/components/schemas/L2Meas_cellInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + cellUEInfo: + minItems: 0 + required: + - associateId + - ecgi + type: array + description: The per cell per UE layer 2 measurements information as defined + below. + items: + $ref: '#/components/schemas/L2Meas_cellUEInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + timeStamp: + $ref: '#/components/schemas/TimeStamp' + example: + timeStamp: + seconds: 3 + nanoSeconds: 9 + cellUEInfo: + - dl_gbr_delay_ue: 4 + ul_nongbr_data_volume_ue: 2 + dl_nongbr_delay_ue: 6 + ul_gbr_delay_ue: 3 + ul_gbr_throughput_ue: 1 + ul_nongbr_delay_ue: 6 + dl_nongbr_throughput_ue: 9 + ul_gbr_data_volume_ue: 6 + dl_nongbr_data_volume_ue: 9 + ecgi: null + dl_gbr_data_volume_ue: 1 + associateId: + type: 0 + value: value + dl_gbr_throughput_ue: 9 + dl_nongbr_pdr_ue: 8 + ul_nongbr_throughput_ue: 5 + ul_nongbr_pdr_ue: 6 + dl_gbr_pdr_ue: 5 + ul_gbr_pdr_ue: 6 + - dl_gbr_delay_ue: 4 + ul_nongbr_data_volume_ue: 2 + dl_nongbr_delay_ue: 6 + ul_gbr_delay_ue: 3 + ul_gbr_throughput_ue: 1 + ul_nongbr_delay_ue: 6 + dl_nongbr_throughput_ue: 9 + ul_gbr_data_volume_ue: 6 + dl_nongbr_data_volume_ue: 9 + ecgi: null + dl_gbr_data_volume_ue: 1 + associateId: + type: 0 + value: value + dl_gbr_throughput_ue: 9 + dl_nongbr_pdr_ue: 8 + ul_nongbr_throughput_ue: 5 + ul_nongbr_pdr_ue: 6 + dl_gbr_pdr_ue: 5 + ul_gbr_pdr_ue: 6 + cellInfo: + - number_of_active_ue_dl_nongbr_cell: 7 + ul_total_prb_usage_cell: 7 + received_dedicated_preambles_cell: 2 + dl_total_prb_usage_cell: 5 + ul_gbr_prb_usage_cell: 1 + dl_gbr_pdr_cell: 0 + number_of_active_ue_ul_gbr_cell: 9 + ul_nongbr_pdr_cell: 1 + dl_nongbr_pdr_cell: 1 + number_of_active_ue_dl_gbr_cell: 2 + ecgi: + plmn: + mnc: mnc + mcc: mcc + cellId: cellId + ul_gbr_pdr_cell: 1 + ul_nongbr_prb_usage_cell: 6 + received_randomly_selected_preambles_low_range_cell: 7 + number_of_active_ue_ul_nongbr_cell: 3 + received_randomly_selected_preambles_high_range_cell: 4 + dl_nongbr_prb_usage_cell: 5 + dl_gbr_prb_usage_cell: 6 + - number_of_active_ue_dl_nongbr_cell: 7 + ul_total_prb_usage_cell: 7 + received_dedicated_preambles_cell: 2 + dl_total_prb_usage_cell: 5 + ul_gbr_prb_usage_cell: 1 + dl_gbr_pdr_cell: 0 + number_of_active_ue_ul_gbr_cell: 9 + ul_nongbr_pdr_cell: 1 + dl_nongbr_pdr_cell: 1 + number_of_active_ue_dl_gbr_cell: 2 + ecgi: + plmn: + mnc: mnc + mcc: mcc + cellId: cellId + ul_gbr_pdr_cell: 1 + ul_nongbr_prb_usage_cell: 6 + received_randomly_selected_preambles_low_range_cell: 7 + number_of_active_ue_ul_nongbr_cell: 3 + received_randomly_selected_preambles_high_range_cell: 4 + dl_nongbr_prb_usage_cell: 5 + dl_gbr_prb_usage_cell: 6 + x-etsi-ref: 6.2.4a + LinkType: + required: + - href + type: object + properties: + href: + type: string + description: URI referring to a resource + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + example: + href: http://example.com/aeiou + x-etsi-ref: 6.5.2 + MeasQuantityResultsNr: + type: object + properties: + rsrp: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_138\ + \ 331 [i.13]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrq: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 138\ + \ 331 [i.13]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + sinr: + type: integer + description: "Reference Signal to Interference & Noise Ratio as defined\ + \ in ETSI TS 138 331 [i.13]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + x-etsi-ref: 6.5.11 + MeasRepUeNotification: + required: + - ecgi + - notificationType + - rsrp + - rsrq + - trigger + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the event for a specific UE + or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + carrierAggregationMeasInfo: + minItems: 0 + required: + - cellIdSrv + type: array + description: This parameter can be repeated to contain information of all + the carriers assign for Carrier Aggregation up to M. + items: + $ref: '#/components/schemas/MeasRepUeNotification_carrierAggregationMeasInfo' + x-etsi-mec-cardinality: 0..M + x-etsi-mec-origin-type: Structure (inlined) + ecgi: + $ref: '#/components/schemas/Ecgi' + eutranNeighbourCellMeasInfo: + minItems: 0 + required: + - ecgi + type: array + description: This parameter can be repeated to contain information of all + the neighbouring cells up to N. + items: + $ref: '#/components/schemas/MeasRepUeNotification_eutranNeighbourCellMeasInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + heightUe: + type: integer + description: "Indicates height of the UE in meters relative to the sea level\ + \ as defined in ETSI TS 136.331 [i.7]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Int + newRadioMeasInfo: + minItems: 0 + required: + - nrCarrierFreq + - nrSCs + type: array + description: 5G New Radio secondary serving cells measurement information. + items: + $ref: '#/components/schemas/MeasRepUeNotification_newRadioMeasInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + newRadioMeasNeiInfo: + minItems: 0 + required: + - nrNCellInfo + type: array + description: Measurement quantities concerning the 5G NR neighbours. + items: + $ref: '#/components/schemas/MeasRepUeNotification_newRadioMeasNeiInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + notificationType: + type: string + description: Shall be set to "MeasRepUeNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + rsrp: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint8 + rsrpEx: + type: integer + description: "Extended Reference Signal Received Power, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrq: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint8 + rsrqEx: + type: integer + description: "Extended Reference Signal Received Quality, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + sinr: + type: integer + description: "Reference Signal \"Signal to Interference plus Noise Ratio\"\ + , with value mapping defined in ETSI TS\_136\_133\_[i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + timeStamp: + $ref: '#/components/schemas/TimeStamp' + trigger: + $ref: '#/components/schemas/Trigger' + x-etsi-ref: 6.4.6 + MeasRepUeSubscription: + required: + - callbackReference + - filterCriteriaAssocTri + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumer to receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaAssocTri: + $ref: '#/components/schemas/MeasRepUeSubscription_filterCriteriaAssocTri' + subscriptionType: + type: string + description: Shall be set to "MeasRepUeSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.6 + MeasTaNotification: + required: + - ecgi + - notificationType + - timingAdvance + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the event for a specific UE + or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + $ref: '#/components/schemas/Ecgi' + notificationType: + type: string + description: Shall be set to "MeasTaNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + timeStamp: + $ref: '#/components/schemas/TimeStamp' + timingAdvance: + type: integer + description: "The timing advance as defined in ETSI TS 136 214 [i.5]." + format: uint32 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint32 + x-etsi-ref: 6.4.7 + MeasTaSubscription: + required: + - callbackReference + - filterCriteriaAssoc + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumer to receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaAssoc: + $ref: '#/components/schemas/CaReconfSubscription_filterCriteriaAssoc' + subscriptionType: + type: string + description: Shall be set to "MeasTaSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.7 + NRcgi: + required: + - nrcellId + - plmn + type: object + properties: + nrcellId: + $ref: '#/components/schemas/NrCellId' + plmn: + $ref: '#/components/schemas/Plmn' + x-etsi-ref: 6.5.7 + NrCellId: + type: string + description: "String representing the NR Cell Identity. Encoded as a bit string\ + \ (size (36)) as defined in ETSI TS 138 423 [i.17]." + NrMeasRepUeNotification: + required: + - notificationType + - triggerNr + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the event for a specific UE + or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + eutraNeighCellMeasInfo: + minItems: 0 + required: + - ecgi + type: array + description: This parameter can be repeated to contain measurement information + of all the neighbouring cells up to N. It shall not be included if nrNeighCellMeasInfo + is included. + items: + $ref: '#/components/schemas/NrMeasRepUeNotification_eutraNeighCellMeasInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + notificationType: + type: string + description: Shall be set to "NrMeasRepUeNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + nrNeighCellMeasInfo: + minItems: 0 + required: + - nrcgi + type: array + description: This parameter can be repeated to contain measurement information + of all the neighbouring cells up to N. It shall not be included if eutraNeighCellMeasInfo + is included. + items: + $ref: '#/components/schemas/NrMeasRepUeNotification_nrNeighCellMeasInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + servCellMeasInfo: + minItems: 0 + required: + - nrcgi + - sCell + type: array + description: This parameter can be repeated to contain information of all + the serving cells up to N. + items: + $ref: '#/components/schemas/NrMeasRepUeNotification_servCellMeasInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + timeStamp: + $ref: '#/components/schemas/TimeStamp' + triggerNr: + $ref: '#/components/schemas/TriggerNr' + x-etsi-ref: 6.4.11 + NrMeasRepUeSubscription: + required: + - callbackReference + - filterCriteriaNrMrs + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumer to receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaNrMrs: + $ref: '#/components/schemas/NrMeasRepUeSubscription_filterCriteriaNrMrs' + subscriptionType: + type: string + description: Shall be set to "NrMeasRepUeSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.11 + Plmn: + required: + - mcc + - mnc + type: object + properties: + mcc: + type: string + description: "The Mobile Country Code part of PLMN Identity as defined in\ + \ ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + mnc: + type: string + description: "The Mobile Network Code part of PLMN Identity as defined in\ + \ ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + example: + mnc: mnc + mcc: mcc + x-etsi-ref: 6.5.5 + PlmnInfo: + required: + - appInstanceId + - plmn + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + plmn: + minItems: 1 + type: array + description: Public Land Mobile Network Identity. + items: + $ref: '#/components/schemas/Plmn' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Plmn + timeStamp: + $ref: '#/components/schemas/TimeStamp' + example: + appInstanceId: appInstanceId + timeStamp: + seconds: 3 + nanoSeconds: 9 + plmn: + - mnc: mnc + mcc: mcc + - mnc: mnc + mcc: mcc + x-etsi-ref: 6.2.2 + ProblemDetails: + type: object + properties: + detail: + type: string + description: A human-readable explanation specific to this occurrence of + the problem + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + instance: + type: string + description: A URI reference that identifies the specific occurrence of + the problem + format: uri + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: URI + status: + type: integer + description: The HTTP status code for this occurrence of the problem + format: uint32 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint32 + title: + type: string + description: "A short, human-readable summary of the problem type" + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + type: + type: string + description: A URI reference according to IETF RFC 3986 that identifies + the problem type + format: uri + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: URI + RabEstNotification: + required: + - ecgi + - erabId + - notificationType + type: object + properties: + associateId: + minItems: 0 + type: array + description: '0 to N identifiers to bind the event for a specific UE or + flow. ' + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + $ref: '#/components/schemas/Ecgi' + erabId: + type: integer + description: "The attribute that uniquely identifies a Radio Access bearer\ + \ for specific UE as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabQosParameters: + $ref: '#/components/schemas/RabEstNotification_erabQosParameters' + notificationType: + type: string + description: Shall be set to "RabEstNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + tempUeId: + $ref: '#/components/schemas/RabEstNotification_tempUeId' + timeStamp: + $ref: '#/components/schemas/TimeStamp' + x-etsi-ref: 6.4.3 + RabEstSubscription: + required: + - callbackReference + - filterCriteriaQci + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumer to receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaQci: + $ref: '#/components/schemas/RabEstSubscription_filterCriteriaQci' + subscriptionType: + type: string + description: Shall be set to "RabEstSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.3 + RabInfo: + required: + - appInstanceId + - requestId + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + cellUserInfo: + minItems: 0 + required: + - ecgi + - ueInfo + type: array + description: The information on users per cell as defined below. + items: + $ref: '#/components/schemas/RabInfo_cellUserInfo' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + requestId: + type: string + description: Unique identifier allocated by the service consumer for the + RAB Information request. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + timeStamp: + $ref: '#/components/schemas/TimeStamp' + example: + appInstanceId: appInstanceId + cellUserInfo: + - ueInfo: + - associateId: + - type: 0 + value: value + - type: 0 + value: value + erabInfo: + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - associateId: + - type: 0 + value: value + - type: 0 + value: value + erabInfo: + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + ecgi: + plmn: + mnc: mnc + mcc: mcc + cellId: cellId + - ueInfo: + - associateId: + - type: 0 + value: value + - type: 0 + value: value + erabInfo: + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - associateId: + - type: 0 + value: value + - type: 0 + value: value + erabInfo: + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + ecgi: + plmn: + mnc: mnc + mcc: mcc + cellId: cellId + timeStamp: + seconds: 3 + nanoSeconds: 9 + requestId: requestId + x-etsi-ref: 6.2.3 + RabModNotification: + required: + - ecgi + - erabId + - notificationType + type: object + properties: + associateId: + minItems: 0 + type: array + description: '0 to N identifiers to bind the event for a specific UE or + flow. ' + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + $ref: '#/components/schemas/Ecgi' + erabId: + type: integer + description: "The attribute that uniquely identifies a Radio Access bearer\ + \ for specific UE as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabQosParameters: + $ref: '#/components/schemas/RabModNotification_erabQosParameters' + notificationType: + type: string + description: Shall be set to "RabModNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + timeStamp: + $ref: '#/components/schemas/TimeStamp' + x-etsi-ref: 6.4.4 + RabModSubscription: + required: + - callbackReference + - filterCriteriaQci + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumer to receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaQci: + $ref: '#/components/schemas/RabModSubscription_filterCriteriaQci' + subscriptionType: + type: string + description: Shall be set to "RabModSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.4 + RabRelNotification: + required: + - ecgi + - erabReleaseInfo + - notificationType + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to bind the event for a specific UE or flow + as defined below. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + $ref: '#/components/schemas/Ecgi' + erabReleaseInfo: + $ref: '#/components/schemas/RabRelNotification_erabReleaseInfo' + notificationType: + type: string + description: Shall be set to "RabRelNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + timeStamp: + $ref: '#/components/schemas/TimeStamp' + x-etsi-ref: 6.4.5 + RabRelSubscription: + required: + - callbackReference + - filterCriteriaQci + - subscriptionType + type: object + properties: + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: URI selected by the service consumer to receive notifications + on the subscribed RNIS information. This shall be included both in the + request and in response. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + filterCriteriaQci: + $ref: '#/components/schemas/RabModSubscription_filterCriteriaQci' + subscriptionType: + type: string + description: Shall be set to "RabRelSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.5 + ResultsPerCsiRsIndex: + required: + - csiRsIndex + type: object + properties: + csiRsIndex: + type: integer + description: "" + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint8 + csiRsResults: + $ref: '#/components/schemas/MeasQuantityResultsNr' + description: "" + ResultsPerCsiRsIndexList: + type: object + properties: + resultsPerCsiRsIndex: + minItems: 0 + required: + - csiRsIndex + type: array + description: "" + items: + $ref: '#/components/schemas/ResultsPerCsiRsIndexList_resultsPerCsiRsIndex' + x-etsi-mec-cardinality: 0..P + x-etsi-mec-origin-type: Structure (inline) + x-etsi-ref: 6.5.10 + ResultsPerSsbIndex: + required: + - ssbIndex + type: object + properties: + ssbIndex: + type: integer + description: "" + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint8 + ssbResults: + $ref: '#/components/schemas/MeasQuantityResultsNr' + description: "" + ResultsPerSsbIndexList: + type: object + properties: + resultsPerSsbIndex: + minItems: 0 + required: + - ssbIndex + type: array + description: "" + items: + $ref: '#/components/schemas/ResultsPerSsbIndexList_resultsPerSsbIndex' + x-etsi-mec-cardinality: 0..P + x-etsi-mec-origin-type: Structure (inline) + x-etsi-ref: 6.5.9 + RsIndexResults: + required: + - resultsCsiRsIndexes + - resultsSsbIndexes + type: object + properties: + resultsCsiRsIndexes: + $ref: '#/components/schemas/ResultsPerCsiRsIndexList' + resultsSsbIndexes: + $ref: '#/components/schemas/ResultsPerSsbIndexList' + x-etsi-ref: 6.5.8 + S1BearerInfo: + required: + - s1UeInfo + type: object + properties: + s1UeInfo: + minItems: 1 + required: + - associateId + - ecgi + - s1BearerInfoDetailed + type: array + description: Information on a specific UE as defined below. + items: + $ref: '#/components/schemas/S1BearerInfo_s1UeInfo' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Structure (inlined) + timeStamp: + $ref: '#/components/schemas/TimeStamp' + example: + timeStamp: + seconds: 3 + nanoSeconds: 9 + s1UeInfo: + - associateId: + - type: 0 + value: value + - type: 0 + value: value + s1BearerInfoDetailed: + - erabId: 0 + enbInfo: + tunnelId: tunnelId + ipAddress: ipAddress + sGwInfo: + tunnelId: tunnelId + ipAddress: ipAddress + - erabId: 0 + enbInfo: + tunnelId: tunnelId + ipAddress: ipAddress + sGwInfo: + tunnelId: tunnelId + ipAddress: ipAddress + ecgi: + - plmn: + mnc: mnc + mcc: mcc + cellId: cellId + - plmn: + mnc: mnc + mcc: mcc + cellId: cellId + tempUeId: + mtmsi: mtmsi + mmec: mmec + - associateId: + - type: 0 + value: value + - type: 0 + value: value + s1BearerInfoDetailed: + - erabId: 0 + enbInfo: + tunnelId: tunnelId + ipAddress: ipAddress + sGwInfo: + tunnelId: tunnelId + ipAddress: ipAddress + - erabId: 0 + enbInfo: + tunnelId: tunnelId + ipAddress: ipAddress + sGwInfo: + tunnelId: tunnelId + ipAddress: ipAddress + ecgi: + - plmn: + mnc: mnc + mcc: mcc + cellId: cellId + - plmn: + mnc: mnc + mcc: mcc + cellId: cellId + tempUeId: + mtmsi: mtmsi + mmec: mmec + x-etsi-ref: 6.2.4 + S1BearerNotification: + required: + - notificationType + - s1Event + - s1UeInfo + type: object + properties: + notificationType: + type: string + description: Shall be set to "S1BearerNotification". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + s1Event: + type: integer + description: The subscribed event that triggered this notification in S1BearerSubscription. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Enum + s1UeInfo: + $ref: '#/components/schemas/S1BearerNotification_s1UeInfo' + timeStamp: + $ref: '#/components/schemas/TimeStamp' + x-etsi-ref: 6.4.10 + S1BearerSubscription: + required: + - S1BearerSubscriptionCriteria + - callbackReference + - eventType + - subscriptionType + type: object + properties: + S1BearerSubscriptionCriteria: + $ref: '#/components/schemas/S1BearerSubscription_S1BearerSubscriptionCriteria' + _links: + $ref: '#/components/schemas/CaReconfSubscription__links' + callbackReference: + type: string + description: "URI selected by the service consumer, to receive notifications\ + \ on the subscribed RNIS information. This shall be included in the request\ + \ and response." + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + eventType: + minItems: 1 + type: array + description: "Description of the subscribed event. The event is included\ + \ both in the request and in the response. \\nFor the eventType, the following\ + \ values are currently defined: <p>0 = RESERVED. <p>1 = S1_BEARER_ESTABLISH.\ + \ <p>2 = S1_BEARER_MODIFY. <p>3 = S1_BEARER_RELEASE." + items: + $ref: '#/components/schemas/Enum' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Enum + expiryDeadline: + $ref: '#/components/schemas/TimeStamp' + subscriptionType: + type: string + description: Shall be set to "S1BearerSubscription". + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + x-etsi-ref: 6.3.9 + SubscriptionLinkList: + required: + - _links + type: object + properties: + _links: + $ref: '#/components/schemas/SubscriptionLinkList__links' + example: + _links: + self: + href: http://example.com/aeiou + subscription: + - subscriptionType: subscriptionType + href: http://example.com/aeiou + - subscriptionType: subscriptionType + href: http://example.com/aeiou + x-etsi-ref: 6.3.10 + TimeStamp: + required: + - nanoSeconds + - seconds + type: object + properties: + nanoSeconds: + type: integer + description: "The nanoseconds part of the time. Time is defined as Unix-time\ + \ since January 1, 1970, 00:00:00 UTC." + format: uint32 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint32 + seconds: + type: integer + description: "The seconds part of the time. Time is defined as Unixtime\ + \ since January 1, 1970, 00:00:00 UTC." + format: uint32 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint32 + example: + seconds: 3 + nanoSeconds: 9 + x-etsi-ref: 6.5.3 + Trigger: + type: integer + description: "As defined in Ref ETSI TS 136 331 [i.7] <p>0 = NOT_AVAILABLE <p>1\ + \ = PERIODICAL_REPORT_STRONGEST_CELLS <p>2 = PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON\ + \ <p>3 = PERIODICAL_REPORT_CGI <p>4 = INTRA_PERIODICAL_REPORT_STRONGEST_CELLS\ + \ <p>5 = INTRA_PERIODICAL_REPORT_CGI <p>10 = EVENT_A1 <p>11 = EVENT_A2 <p>12\ + \ = EVENT_A3 <p>13 = EVENT_A4 <p>14 = EVENT_A5 <p>15 = EVENT_A6 <p>20 = EVENT_B1\ + \ <p>21 = EVENT_B2 <p>20 = EVENT_B1-NR <p>21 = EVENT_B2-NR <p>30 = EVENT_C1\ + \ <p>31 = EVENT_C2 <p>40 = EVENT_W1 <p>41 = EVENT_W2 <p>42 = EVENT_W3 <p>50\ + \ = EVENT_V1 <p>51 = EVENT_V2 <p>60 = EVENT_H1 <p>61 = EVENT_H2" + enum: + - 0 + - 1 + - 2 + - 3 + - 4 + - 5 + - 10 + - 11 + - 12 + - 13 + - 14 + - 15 + - 20 + - 21 + - 30 + - 31 + - 40 + - 41 + - 42 + - 50 + - 51 + - 60 + - 61 + TriggerNr: + type: integer + description: "The enumeration Trigger represents specified triggers for a 5G\ + \ UE Measurement Report. Full details can be found in ETSI TS 138 331 [i.13]).\ + \ <p>0 = NOT_AVAILABLE <p>1 = NR_PERIODICAL <p>2 = NR_CGI <p>10 = EVENT_A1\ + \ <p>11 = EVENT_A2 <p>12 = EVENT_A3 <p>13 = EVENT_A4 <p>14 = EVENT_A5 <p>15\ + \ = EVENT_A6 <p>20 = INTER_RAT_PERIODICAL <p>21 = INTER_RAT_CGI <p>30 = EVENT_B1\ + \ <p>31 = EVENT_B2" + enum: + - 0 + - 1 + - 2 + - 10 + - 11 + - 12 + - 13 + - 14 + - 15 + - 20 + - 21 + - 30 + - 31 + InlineSubscription: + discriminator: + propertyName: subscription_type + oneOf: + - $ref: '#/components/schemas/CellChangeSubscription' + - $ref: '#/components/schemas/RabEstSubscription' + - $ref: '#/components/schemas/RabModSubscription' + - $ref: '#/components/schemas/RabRelSubscription' + - $ref: '#/components/schemas/MeasRepUeSubscription' + - $ref: '#/components/schemas/NrMeasRepUeSubscription' + - $ref: '#/components/schemas/MeasTaSubscription' + - $ref: '#/components/schemas/CaReconfSubscription' + - $ref: '#/components/schemas/S1BearerSubscription' + InlineNotification: + discriminator: + propertyName: notification_type + oneOf: + - $ref: '#/components/schemas/CellChangeNotification' + - $ref: '#/components/schemas/RabEstNotification' + - $ref: '#/components/schemas/RabModNotification' + - $ref: '#/components/schemas/RabRelNotification' + - $ref: '#/components/schemas/MeasRepUeNotification' + - $ref: '#/components/schemas/NrMeasRepUeNotification' + - $ref: '#/components/schemas/MeasTaNotification' + - $ref: '#/components/schemas/CaReconfNotification' + - $ref: '#/components/schemas/S1BearerNotification' + CaReconfNotification_carrierAggregationMeasInfo: + type: object + properties: + cellIdNei: + $ref: '#/components/schemas/CellId' + cellIdSrv: + $ref: '#/components/schemas/CellId' + rsrpNei: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_136\ + \ 214 [i.5]." + format: uint32 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint32 + rsrpSrv: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_136\ + \ 214 [i.5]." + format: uint32 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint32 + rsrqNei: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 136\ + \ 214 [i.5]." + format: uint32 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint32 + rsrqSrv: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 136\ + \ 214 [i.5]." + format: uint32 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint32 + CaReconfNotification_secondaryCellAdd: + type: object + properties: + ecgi: + $ref: '#/components/schemas/Ecgi' + CaReconfSubscription__links: + required: + - self + type: object + properties: + self: + $ref: '#/components/schemas/LinkType' + description: Hyperlink related to the resource. This shall be only included + in the HTTP responses and in HTTP PUT requests. + CaReconfSubscription_filterCriteriaAssoc: + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the information for a specific + UE or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + minItems: 0 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Ecgi + description: "List of filtering criteria for the subscription. Any filtering\ + \ criteria from below, which is included in the request, shall also be included\ + \ in the response." + CellChangeNotification_tempUeId: + required: + - mmec + - mtmsi + type: object + properties: + mmec: + type: string + description: "MMEC as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + mtmsi: + type: string + description: "M-TMSI as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + description: The temporary identifier allocated for the specific UE as defined + below. + example: + mtmsi: mtmsi + mmec: mmec + CellChangeSubscription_filterCriteriaAssocHo: + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the information for a specific + UE or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + minItems: 0 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Ecgi + hoStatus: + minItems: 0 + type: array + description: "In case hoStatus is not included in the subscription request,\ + \ the default value 3 = COMPLETED shall be used and included in the response:\ + \ <p>1 = IN_PREPARATION. <p>2 = IN_EXECUTION. <p>3 = COMPLETED. <p>4 =\ + \ REJECTED. <p>5 = CANCELLED." + items: + $ref: '#/components/schemas/Enum' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Enum + description: "List of filtering criteria for the subscription. Any filtering\ + \ criteria from below, which is included in the request, shall also be included\ + \ in the response." + ExpiryNotification__links: + required: + - self + type: object + properties: + self: + type: string + description: Self referring URI. This shall be included in the response + from the RNIS. The URI shall be unique within the RNI API as it acts as + an ID for the subscription. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + description: List of hyperlinks related to the resource. + L2Meas_cellInfo: + type: object + properties: + dl_gbr_pdr_cell: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ downlink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + dl_gbr_prb_usage_cell: + type: integer + description: "It indicates the PRB usage for downlink GBR traffic, as defined\ + \ in ETSI TS 136 314 [i.11] and ETSI TS 136 423 [i.12]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + dl_nongbr_pdr_cell: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ downlink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + dl_nongbr_prb_usage_cell: + type: integer + description: "It indicates (in percentage) the PRB usage for downlink non-GBR\ + \ traffic, as defined in ETSI TS\_136\_314 [i.11] and ETSI TS\_136 423\ + \ [i.12]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + dl_total_prb_usage_cell: + type: integer + description: "It indicates (in percentage) the PRB usage for total downlink\ + \ traffic, as defined in ETSI TS\_136\_314 [i.11] and ETSI TS\_136 423\ + \ [i.12]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ecgi: + $ref: '#/components/schemas/Ecgi' + number_of_active_ue_dl_gbr_cell: + type: integer + description: "It indicates the number of active UEs with downlink GBR traffic,\ + \ as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + number_of_active_ue_dl_nongbr_cell: + type: integer + description: "It indicates the number of active UEs with downlink non-GBR\ + \ traffic, as defined in ETSI TS\_136\_314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + number_of_active_ue_ul_gbr_cell: + type: integer + description: "It indicates the number of active UEs with uplink GBR traffic,\ + \ as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + number_of_active_ue_ul_nongbr_cell: + type: integer + description: "It indicates the number of active UEs with uplink non-GBR\ + \ traffic, as defined in ETSI TS\_136\_314\_[i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + received_dedicated_preambles_cell: + type: integer + description: "It indicates (in percentage) the received dedicated preamples,\ + \ as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + received_randomly_selected_preambles_high_range_cell: + type: integer + description: "It indicates (in percentage) the received randomly selected\ + \ preambles in the high range, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + received_randomly_selected_preambles_low_range_cell: + type: integer + description: "It indicates (in percentage) the received randomly selected\ + \ preambles in the low range, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ul_gbr_pdr_cell: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ uplink GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ul_gbr_prb_usage_cell: + type: integer + description: "It indicates (in percentage) the PRB usage for uplink GBR\ + \ traffic, as defined in ETSI TS\_136\_314\_[i.11] and ETSI TS\_136 423\ + \ [i.12]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ul_nongbr_pdr_cell: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ uplink non-GBR traffic in a cell, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ul_nongbr_prb_usage_cell: + type: integer + description: "It indicates (in percentage) the PRB usage for uplink non-GBR\ + \ traffic, as defined in ETSI TS\_136\_314 [i.11] and ETSI TS\_136 423\ + \ [i.12]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ul_total_prb_usage_cell: + type: integer + description: "It indicates (in percentage) the PRB usage for total uplink\ + \ traffic, as defined in ETSI TS\_136\_314\_[i.11] and ETSI TS\_136\_\ + 423 [i.12]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + example: + number_of_active_ue_dl_nongbr_cell: 7 + ul_total_prb_usage_cell: 7 + received_dedicated_preambles_cell: 2 + dl_total_prb_usage_cell: 5 + ul_gbr_prb_usage_cell: 1 + dl_gbr_pdr_cell: 0 + number_of_active_ue_ul_gbr_cell: 9 + ul_nongbr_pdr_cell: 1 + dl_nongbr_pdr_cell: 1 + number_of_active_ue_dl_gbr_cell: 2 + ecgi: + plmn: + mnc: mnc + mcc: mcc + cellId: cellId + ul_gbr_pdr_cell: 1 + ul_nongbr_prb_usage_cell: 6 + received_randomly_selected_preambles_low_range_cell: 7 + number_of_active_ue_ul_nongbr_cell: 3 + received_randomly_selected_preambles_high_range_cell: 4 + dl_nongbr_prb_usage_cell: 5 + dl_gbr_prb_usage_cell: 6 + L2Meas_cellUEInfo: + type: object + properties: + associateId: + $ref: '#/components/schemas/AssociateId' + dl_gbr_data_volume_ue: + type: integer + description: "It indicates the data volume of the downlink GBR traffic of\ + \ a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + dl_gbr_delay_ue: + type: integer + description: "It indicates the packet delay of the downlink GBR traffic\ + \ of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + dl_gbr_pdr_ue: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ downlink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + dl_gbr_throughput_ue: + type: integer + description: "It indicates the scheduled throughput of the downlink GBR\ + \ traffic of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + dl_nongbr_data_volume_ue: + type: integer + description: "It indicates the data volume of the downlink non-GBR traffic\ + \ of a UE, as defined in ETSI TS\_136\_314\_[i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + dl_nongbr_delay_ue: + type: integer + description: "It indicates the packet delay of the downlink non-GBR traffic\ + \ of a UE, as defined in ETSI TS\_136\_314\_[i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + dl_nongbr_pdr_ue: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ downlink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + dl_nongbr_throughput_ue: + type: integer + description: "It indicates the scheduled throughput of the downlink nonGBR\ + \ traffic of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + ecgi: + $ref: '#/components/schemas/Ecgi' + ul_gbr_data_volume_ue: + type: integer + description: "It indicates the data volume of the uplink GBR traffic of\ + \ a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + ul_gbr_delay_ue: + type: integer + description: "It indicates the packet delay of the uplink GBR traffic of\ + \ a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + ul_gbr_pdr_ue: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ uplink GBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ul_gbr_throughput_ue: + type: integer + description: "It indicates the scheduled throughput of the uplink GBR traffic\ + \ of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + ul_nongbr_data_volume_ue: + type: integer + description: "It indicates the data volume of the uplink non-GBR traffic\ + \ of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + ul_nongbr_delay_ue: + type: integer + description: "It indicates the packet delay of the uplink non-GBR traffic\ + \ of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + ul_nongbr_pdr_ue: + type: integer + description: "It indicates the packet discard rate in percentage of the\ + \ uplink nonGBR traffic of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer (0..100) + ul_nongbr_throughput_ue: + type: integer + description: "It indicates the scheduled throughput of the uplink non-GBR\ + \ traffic of a UE, as defined in ETSI TS 136 314 [i.11]." + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Integer + example: + dl_gbr_delay_ue: 4 + ul_nongbr_data_volume_ue: 2 + dl_nongbr_delay_ue: 6 + ul_gbr_delay_ue: 3 + ul_gbr_throughput_ue: 1 + ul_nongbr_delay_ue: 6 + dl_nongbr_throughput_ue: 9 + ul_gbr_data_volume_ue: 6 + dl_nongbr_data_volume_ue: 9 + ecgi: null + dl_gbr_data_volume_ue: 1 + associateId: + type: 0 + value: value + dl_gbr_throughput_ue: 9 + dl_nongbr_pdr_ue: 8 + ul_nongbr_throughput_ue: 5 + ul_nongbr_pdr_ue: 6 + dl_gbr_pdr_ue: 5 + ul_gbr_pdr_ue: 6 + MeasRepUeNotification_carrierAggregationMeasInfo: + type: object + properties: + cellIdNei: + $ref: '#/components/schemas/CellId' + cellIdSrv: + $ref: '#/components/schemas/CellId' + rsrpNei: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrpNeiEx: + type: integer + description: "Extended Reference Signal Received Power, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrpSrv: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrpSrvEx: + type: integer + description: "Extended Reference Signal Received Power, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrqNei: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrqNeiEx: + type: integer + description: "Extended Reference Signal Received Quality, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrqSrv: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrqSrvEx: + type: integer + description: "Extended Reference Signal Received Quality, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + sinrNei: + type: integer + description: "Reference Signal \"Signal to Interference plus Noise Ratio\"\ + , with value mapping defined in ETSI TS\_136\_133\_[i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + sinrSrv: + type: integer + description: "Reference Signal \"Signal to Interference plus Noise Ratio\"\ + , with value mapping defined in ETSI TS\_136\_133\_[i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + MeasRepUeNotification_eutranNeighbourCellMeasInfo: + type: object + properties: + ecgi: + $ref: '#/components/schemas/Ecgi' + rsrp: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrpEx: + type: integer + description: "Extended Reference Signal Received Power, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrq: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 136\ + \ 214 [i.5]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrqEx: + type: integer + description: "Extended Reference Signal Received Quality, with value mapping\ + \ defined in ETSI TS 136 133 [i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + sinr: + type: integer + description: "Reference Signal \"Signal to Interference plus Noise Ratio\"\ + , with value mapping defined in ETSI TS\_136\_133\_[i.16]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + MeasRepUeNotification_nrBNCs_nrBNCellInfo: + type: object + properties: + nrBNCellGId: + $ref: '#/components/schemas/NrCellId' + nrBNCellPlmn: + minItems: 1 + type: array + description: Public land mobile network identities + items: + $ref: '#/components/schemas/Plmn' + x-etsi-mec-cardinality: 1..P + x-etsi-mec-origin-type: Plmn + MeasRepUeNotification_nrBNCs: + required: + - nrBNCellInfo + type: object + properties: + nrBNCellInfo: + minItems: 1 + required: + - nrBNCellGId + - nrBNCellPlmn + type: array + description: Best neighbours of the secondary serving cell(s) info + items: + $ref: '#/components/schemas/MeasRepUeNotification_nrBNCs_nrBNCellInfo' + x-etsi-mec-cardinality: 1..P + x-etsi-mec-origin-type: Structure (inlined) + nrBNCellRsrp: + type: integer + description: "Reference Signal Received Power measurement according to mapping\ + \ table in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + nrBNCellRsrq: + type: integer + description: "Reference Signal Received Quality measurement according to\ + \ mapping table in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + nrBNCellRssi: + type: integer + description: "Reference signal SINR measurement according to mapping table\ + \ in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + description: Measurement quantities concerning the best neighbours of the secondary + serving cells + MeasRepUeNotification_nrSCs_nrSCellInfo: + type: object + properties: + nrSCellGId: + $ref: '#/components/schemas/NrCellId' + nrSCellPlmn: + minItems: 1 + type: array + description: Public land mobile network identities. + items: + $ref: '#/components/schemas/Plmn' + x-etsi-mec-cardinality: 1..P + x-etsi-mec-origin-type: Plmn + MeasRepUeNotification_nrSCs: + required: + - nrSCellInfo + type: object + properties: + nrSCellInfo: + minItems: 1 + required: + - nrSCellGId + - nrSCellPlmn + type: array + description: Secondary serving cell(s) info. + items: + $ref: '#/components/schemas/MeasRepUeNotification_nrSCs_nrSCellInfo' + x-etsi-mec-cardinality: 1..P + x-etsi-mec-origin-type: Structure (inlined) + nrSCellRsrp: + type: integer + description: "Reference Signal Received Power measurement according to mapping\ + \ table in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + nrSCellRsrq: + type: integer + description: "Reference Signal Received Quality measurement according to\ + \ mapping table in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + nrSCellRssi: + type: integer + description: "Reference signal SINR measurement according to mapping table\ + \ in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + description: Measurement quantities concerning the secondary serving cells. + MeasRepUeNotification_newRadioMeasInfo: + type: object + properties: + nrBNCs: + $ref: '#/components/schemas/MeasRepUeNotification_nrBNCs' + nrCarrierFreq: + type: integer + description: "ARFCN applicable for a downlink, uplink or bi-directional\ + \ (TDD) NR carrier frequency, as defined in ETSI TS\_138.101 [i.15]." + format: uint32 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint32 + nrSCs: + $ref: '#/components/schemas/MeasRepUeNotification_nrSCs' + MeasRepUeNotification_nrNCellInfo: + type: object + properties: + nrNCellGId: + $ref: '#/components/schemas/NrCellId' + nrNCellPlmn: + minItems: 1 + type: array + description: Public land mobile network identities. + items: + $ref: '#/components/schemas/Plmn' + x-etsi-mec-cardinality: 1..P + x-etsi-mec-origin-type: Plmn + MeasRepUeNotification_newRadioMeasNeiInfo: + type: object + properties: + nrNCellInfo: + minItems: 1 + required: + - nrNCellGId + - nrNCellPlmn + type: array + description: 5G NR neighbour cell info. + items: + $ref: '#/components/schemas/MeasRepUeNotification_nrNCellInfo' + x-etsi-mec-cardinality: 1..P + x-etsi-mec-origin-type: Structure (inlined) + nrNCellRsrp: + type: integer + description: "Reference Signal Received Power measurement according to mapping\ + \ table in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + nrNCellRsrq: + type: integer + description: "Reference Signal Received Quality measurement according to\ + \ mapping table in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + nrNCellRssi: + type: integer + description: "Reference signal SINR measurement according to mapping table\ + \ in ETSI TS 138.133 [i.14]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsIndexResults: + $ref: '#/components/schemas/RsIndexResults' + MeasRepUeSubscription_filterCriteriaAssocTri: + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the information for a specific + UE or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + minItems: 0 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Ecgi + trigger: + minItems: 0 + type: array + description: Corresponds to a specific E-UTRAN UE Measurement Report trigger. + items: + $ref: '#/components/schemas/Trigger' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Trigger + description: "List of filtering criteria for the subscription. Any filtering\ + \ criteria from below, which is included in the request, shall also be included\ + \ in the response." + NrMeasRepUeNotification_eutraNeighCellMeasInfo: + type: object + properties: + ecgi: + $ref: '#/components/schemas/Ecgi' + rsrp: + type: integer + description: "Reference Signal Received Power as defined in ETSI TS\_138\ + \ 331 [i.13]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + rsrq: + type: integer + description: "Reference Signal Received Quality as defined in ETSI TS 138\ + \ 331 [i.13]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + sinr: + type: integer + description: "Reference Signal plus Interference Noise Ratio as defined\ + \ in ETSI TS\_138\_331\_[i.13]." + format: uint8 + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: Uint8 + NrMeasRepUeNotification_nrNeighCellMeasInfo: + type: object + properties: + measQuantityResultsCsiRsCell: + $ref: '#/components/schemas/MeasQuantityResultsNr' + measQuantityResultsSsbCell: + $ref: '#/components/schemas/MeasQuantityResultsNr' + nrcgi: + $ref: '#/components/schemas/NrCellId' + rsIndexResults: + $ref: '#/components/schemas/RsIndexResults' + NrMeasRepUeNotification_nCell: + type: object + properties: + measQuantityResultsCsiRsCell: + $ref: '#/components/schemas/MeasQuantityResultsNr' + measQuantityResultsSsbCell: + $ref: '#/components/schemas/MeasQuantityResultsNr' + rsIndexResults: + $ref: '#/components/schemas/RsIndexResults' + description: Measurement information relating to the best neighbour of this + serving cell. + NrMeasRepUeNotification_sCell: + type: object + properties: + measQuantityResultsCsiRsCell: + $ref: '#/components/schemas/MeasQuantityResultsNr' + measQuantityResultsSsbCell: + $ref: '#/components/schemas/MeasQuantityResultsNr' + rsIndexResults: + $ref: '#/components/schemas/RsIndexResults' + description: Measurement information relating to this serving cell. + NrMeasRepUeNotification_servCellMeasInfo: + type: object + properties: + nCell: + $ref: '#/components/schemas/NrMeasRepUeNotification_nCell' + nrcgi: + $ref: '#/components/schemas/NRcgi' + sCell: + $ref: '#/components/schemas/NrMeasRepUeNotification_sCell' + NrMeasRepUeSubscription_filterCriteriaNrMrs: + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the information for a specific + UE or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + nrcgi: + minItems: 0 + type: array + description: NR Cell Global Identier. + items: + $ref: '#/components/schemas/NRcgi' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: NRcgi + triggerNr: + minItems: 0 + type: array + description: Corresponds to a specific 5G UE Measurement Report trigger. + items: + $ref: '#/components/schemas/TriggerNr' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: TriggerNr + description: "List of filtering criteria for the subscription. Any filtering\ + \ criteria from below, which is included in the request, shall also be included\ + \ in the response." + RabEstNotification_erabQosParameters_qosInformation: + required: + - erabGbrDl + - erabGbrUl + - erabMbrDl + - erabMbrUl + type: object + properties: + erabGbrDl: + type: integer + description: "This attribute indicates the guaranteed downlink E-RAB Bit\ + \ Rate as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabGbrUl: + type: integer + description: "This attribute indicates the guaranteed uplink E-RAB Bit Rate\ + \ as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabMbrDl: + type: integer + description: "This attribute indicates the maximum downlink E-RAB Bit Rate\ + \ as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabMbrUl: + type: integer + description: "This attribute indicates the maximum uplink E-RAB Bit Rate\ + \ as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + description: The QoS information for the E-RAB. + example: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + RabEstNotification_erabQosParameters: + required: + - qci + type: object + properties: + qci: + type: integer + description: "QoS Class Identifier as defined in ETSI TS 123 401 [i.4]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + qosInformation: + $ref: '#/components/schemas/RabEstNotification_erabQosParameters_qosInformation' + description: QoS parameters for the E-RAB as defined below. + example: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + RabEstNotification_tempUeId: + required: + - mmec + - mtmsi + type: object + properties: + mmec: + type: string + description: "MMEC as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + mtmsi: + type: string + description: "M-TMSI as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + description: 'The temporary identifier allocated for the specific UE as defined + below. ' + RabEstSubscription_filterCriteriaQci: + required: + - qci + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + ecgi: + minItems: 0 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Ecgi + qci: + type: integer + description: "QoS Class Identifier as defined in ETSI TS 123 401 [i.4]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + description: "List of filtering criteria for the subscription. Any filtering\ + \ criteria from below, which is included in the request, shall also be included\ + \ in the response." + RabInfo_erabInfo: + type: object + properties: + erabId: + type: integer + description: "The attribute that uniquely identifies a Radio Access bearer\ + \ for specific UE as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabQosParameters: + $ref: '#/components/schemas/RabEstNotification_erabQosParameters' + example: + erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + RabInfo_ueInfo: + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the event for a specific UE + or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + erabInfo: + minItems: 1 + required: + - erabId + type: array + description: Information on E-RAB as defined below. + items: + $ref: '#/components/schemas/RabInfo_erabInfo' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Structure (inlined) + example: + associateId: + - type: 0 + value: value + - type: 0 + value: value + erabInfo: + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + RabInfo_cellUserInfo: + type: object + properties: + ecgi: + $ref: '#/components/schemas/Ecgi' + ueInfo: + minItems: 1 + required: + - erabInfo + type: array + description: Information on UEs in the specific cell as defined below. + items: + $ref: '#/components/schemas/RabInfo_ueInfo' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Structure (inlined) + example: + ueInfo: + - associateId: + - type: 0 + value: value + - type: 0 + value: value + erabInfo: + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - associateId: + - type: 0 + value: value + - type: 0 + value: value + erabInfo: + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + - erabId: 6 + erabQosParameters: + qosInformation: + erabGbrDl: 5 + erabGbrUl: 5 + erabMbrUl: 7 + erabMbrDl: 2 + qci: 1 + ecgi: + plmn: + mnc: mnc + mcc: mcc + cellId: cellId + RabModNotification_erabQosParameters_qosInformation: + required: + - erabGbrDl + - erabGbrUl + - erabMbrDl + - erabMbrUl + type: object + properties: + erabGbrDl: + type: integer + description: "This attribute indicates the guaranteed downlink E-RAB Bit\ + \ Rate as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabGbrUl: + type: integer + description: "This attribute indicates the guaranteed uplink E-RAB Bit Rate\ + \ as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabMbrDl: + type: integer + description: "This attribute indicates the maximum downlink E-RAB Bit Rate\ + \ as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + erabMbrUl: + type: integer + description: "This attribute indicates the maximum uplink E-RAB Bit Rate\ + \ as defined in ETSI TS 123 401 [i.4] for this bearer." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + description: The QoS Information for the E-RAB as defined below. + RabModNotification_erabQosParameters: + required: + - qci + type: object + properties: + qci: + type: integer + description: "QoS Class Identifier as defined in ETSI TS 123 401 [i.4]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + qosInformation: + $ref: '#/components/schemas/RabModNotification_erabQosParameters_qosInformation' + description: The QoS parameters for the E-RAB as defined below. + RabModSubscription_filterCriteriaQci: + required: + - erabId + - qci + type: object + properties: + appInstanceId: + type: string + description: Unique identifier for the MEC application instance. + x-etsi-mec-cardinality: 0..1 + x-etsi-mec-origin-type: String + ecgi: + minItems: 0 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Ecgi + erabId: + type: integer + description: "The attribute that uniquely identifies a Radio Access bearer\ + \ for specific UE as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + qci: + type: integer + description: "QoS Class Identifier as defined in ETSI TS 123 401 [i.4]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + description: "List of filtering criteria for the subscription. Any filtering\ + \ criteria from below, which is included in the request, shall also be included\ + \ in the response." + RabRelNotification_erabReleaseInfo: + required: + - erabId + type: object + properties: + erabId: + type: integer + description: "The attribute that uniquely identifies a Radio Access bearer\ + \ for specific UE as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + description: The release information for the E-RAB as defined below. + ResultsPerCsiRsIndexList_resultsPerCsiRsIndex: + type: object + properties: + csiRsIndex: + type: integer + description: "" + format: uint8 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint8 + csiRsResults: + $ref: '#/components/schemas/MeasQuantityResultsNr' + ResultsPerSsbIndexList_resultsPerSsbIndex: + type: object + properties: + ssbIndex: + type: integer + description: "" + format: uint8 + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Uint8 + ssbResults: + $ref: '#/components/schemas/MeasQuantityResultsNr' + S1BearerInfo_enbInfo: + required: + - ipAddress + - tunnelId + type: object + properties: + ipAddress: + type: string + description: eNB transport layer address of this S1 bearer. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + tunnelId: + type: string + description: eNB GTP-U TEID of this S1 bearer. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + description: S1 bearer information on eNB side as defined below. + example: + tunnelId: tunnelId + ipAddress: ipAddress + S1BearerInfo_sGwInfo: + required: + - ipAddress + - tunnelId + type: object + properties: + ipAddress: + type: string + description: SGW transport layer address of this S1 bearer. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + tunnelId: + type: string + description: SGW GTP-U TEID of this S1 bearer. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + description: S1 bearer information on GW side as defined below. + example: + tunnelId: tunnelId + ipAddress: ipAddress + S1BearerInfo_s1BearerInfoDetailed: + type: object + properties: + enbInfo: + $ref: '#/components/schemas/S1BearerInfo_enbInfo' + erabId: + type: integer + description: "The attribute that uniquely identifies a S1 bearer for a specific\ + \ UE, as defined in ETSI TS 136 413 [i.3]." + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: Integer + sGwInfo: + $ref: '#/components/schemas/S1BearerInfo_sGwInfo' + example: + erabId: 0 + enbInfo: + tunnelId: tunnelId + ipAddress: ipAddress + sGwInfo: + tunnelId: tunnelId + ipAddress: ipAddress + S1BearerInfo_s1UeInfo: + type: object + properties: + associateId: + minItems: 1 + type: array + description: 1 to N identifiers to associate the information for a specific + UE or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: AssociateId + ecgi: + minItems: 1 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Ecgi + s1BearerInfoDetailed: + minItems: 1 + required: + - enbInfo + - erabId + - sGwInfo + type: array + description: S1 bearer information as defined below. + items: + $ref: '#/components/schemas/S1BearerInfo_s1BearerInfoDetailed' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Structure (inlined) + tempUeId: + $ref: '#/components/schemas/CellChangeNotification_tempUeId' + example: + associateId: + - type: 0 + value: value + - type: 0 + value: value + s1BearerInfoDetailed: + - erabId: 0 + enbInfo: + tunnelId: tunnelId + ipAddress: ipAddress + sGwInfo: + tunnelId: tunnelId + ipAddress: ipAddress + - erabId: 0 + enbInfo: + tunnelId: tunnelId + ipAddress: ipAddress + sGwInfo: + tunnelId: tunnelId + ipAddress: ipAddress + ecgi: + - plmn: + mnc: mnc + mcc: mcc + cellId: cellId + - plmn: + mnc: mnc + mcc: mcc + cellId: cellId + tempUeId: + mtmsi: mtmsi + mmec: mmec + S1BearerNotification_s1UeInfo: + required: + - ecgi + - s1BearerInfo + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the information for a specific + UE or flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + minItems: 1 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Ecgi + s1BearerInfo: + minItems: 1 + required: + - enbInfo + - erabId + - sGwInfo + type: array + description: S1 bearer information as defined below. + items: + $ref: '#/components/schemas/S1BearerInfo_s1BearerInfoDetailed' + x-etsi-mec-cardinality: 1..N + x-etsi-mec-origin-type: Structure (inlined) + tempUeId: + $ref: '#/components/schemas/CellChangeNotification_tempUeId' + description: Information on specific UE that matches the criteria in S1BearerSubscription + as defined below. + S1BearerSubscription_S1BearerSubscriptionCriteria: + type: object + properties: + associateId: + minItems: 0 + type: array + description: 0 to N identifiers to associate the events for a specific UE + or a flow. + items: + $ref: '#/components/schemas/AssociateId' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: AssociateId + ecgi: + minItems: 0 + type: array + description: E-UTRAN Cell Global Identifier. + items: + $ref: '#/components/schemas/Ecgi' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Ecgi + erabId: + minItems: 0 + type: array + description: "The attribute that uniquely identifies a S1 bearer for a specific\ + \ UE, as defined in ETSI TS 136 413 [i.3]." + items: + type: integer + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Integer + description: As defined below. + SubscriptionLinkList__links_subscription: + type: object + properties: + href: + type: string + description: The URI referring to the subscription. + format: uri + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: URI + subscriptionType: + type: string + description: Type of the subscription. The string shall be set according + to the "subscriptionType" attribute of the associated subscription data + type event defined in clause 6.3. + x-etsi-mec-cardinality: "1" + x-etsi-mec-origin-type: String + example: + subscriptionType: subscriptionType + href: http://example.com/aeiou + SubscriptionLinkList__links: + required: + - self + type: object + properties: + self: + $ref: '#/components/schemas/LinkType' + subscription: + minItems: 0 + required: + - href + - subscriptionType + type: array + description: A link to a subscription. + items: + $ref: '#/components/schemas/SubscriptionLinkList__links_subscription' + x-etsi-mec-cardinality: 0..N + x-etsi-mec-origin-type: Structure (inlined) + description: List of hyperlinks related to the resource. + example: + self: + href: http://example.com/aeiou + subscription: + - subscriptionType: subscriptionType + href: http://example.com/aeiou + - subscriptionType: subscriptionType + href: http://example.com/aeiou + responses: + "204": + description: No Content + "400": + description: "Bad Request : used to indicate that incorrect parameters were\ + \ passed to the request." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "401": + description: "Unauthorized : used when the client did not submit credentials." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "403": + description: "Forbidden : operation is not allowed given the current status\ + \ of the resource." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "404": + description: "Not Found : used when a client provided a URI that cannot be\ + \ mapped to a valid resource URI." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "406": + description: "Not Acceptable : used to indicate that the server cannot provide\ + \ the any of the content formats supported by the client." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "412": + description: "Precondition failed : used when a condition has failed during\ + \ conditional requests, e.g. when using ETags to avoid write conflicts when\ + \ using PUT" + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "414": + description: "URI Too Long : used to indicate that the server is refusing to\ + \ process the request because the request URI is longer than the server is\ + \ willing or able to process." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "415": + description: "Unsupported Media Type : used to indicate that the server or\ + \ the client does not support the content type of the entity body." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + "422": + description: "Unprocessable Entity : used to indicate that the server understands\ + \ the content type of the request entity and that the syntax of the request\ + \ entity is correct but that the server is unable to process the contained\ + \ instructions. This error condition can occur if an JSON request body is\ + \ syntactically correct but semantically incorrect, for example if the target\ + \ area for the request is considered too large. This error condition can also\ + \ occur if the capabilities required by the request are not supported." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + example: + application/problem+json: + type: https://meAppServer.example.com/rni/v2/probs/too-many targets + title: Too many targets + status: "422" + detail: The target area for the request is considered too large + instance: /meAppClient.example.com/77777/msgs/abc + "429": + description: "Too Many Requests : used when a rate limiter has triggered." + content: + application/problem+json: + schema: + $ref: '#/components/schemas/ProblemDetails' + parameters: + Path.subscrId: + name: subscriptionId + in: path + description: "Subscription Id, specifically the \"Self-referring URI\" returned\ + \ in the subscription request" + required: true + style: simple + explode: false + schema: + type: string + format: uri + x-exportParamName: SubscriptionId + Query.AppInsId: + name: app_ins_id + in: query + description: Application instance identifier + required: false + style: form + explode: true + schema: + type: string + x-exportParamName: AppInsId + x-optionalDataType: String + Query.AppInsIdArr: + name: app_ins_id + in: query + description: Comma separated list of Application instance identifiers + required: true + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: AppInsIdArr + Query.CellId: + name: cell_id + in: query + description: Comma separated list of E-UTRAN Cell Identities + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: CellId + Query.UeIpv4Address: + name: ue_ipv4_address + in: query + description: Comma separated list of IE IPv4 addresses as defined for the type + for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv4Address + Query.UeIpv6Address: + name: ue_ipv6_address + in: query + description: Comma separated list of IE IPv6 addresses as defined for the type + for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: UeIpv6Address + Query.NatedIpAddress: + name: nated_ip_address + in: query + description: Comma separated list of IE NATed IP addresses as defined for the + type for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: NatedIpAddress + Query.GtpTeid: + name: gtp_teid + in: query + description: Comma separated list of GTP TEID addresses as defined for the type + for AssociateId + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: GtpTeid + Query.ErabId: + name: erab_id + in: query + description: E-RAB identifier + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabId + x-optionalDataType: Int32 + Query.ErabIdArr: + name: erab_id + in: query + description: Comma separated list of E-RAB identifiers + required: false + style: form + explode: true + schema: + type: array + items: + type: integer + format: int32 + x-exportParamName: ErabIdArr + Query.Qci: + name: qci + in: query + description: QoS Class Identifier as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: Qci + x-optionalDataType: Int32 + Query.ErabMbrDl: + name: erab_mbr_dl + in: query + description: Maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabMbrDl + x-optionalDataType: Int32 + Query.ErabMbrUl: + name: erab_mbr_ul + in: query + description: Maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabMbrUl + x-optionalDataType: Int32 + Query.ErabGbrDl: + name: erab_gbr_dl + in: query + description: Guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabGbrDl + x-optionalDataType: Int32 + Query.ErabGbrUl: + name: erab_gbr_ul + in: query + description: Guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 + required: false + style: form + explode: true + schema: + type: integer + format: int32 + x-exportParamName: ErabGbrUl + x-optionalDataType: Int32 + Query.TempUeId: + name: temp_ue_id + in: query + description: Comma separated list of temporary identifiers allocated for the + specific UE as defined in ETSI TS 136 413 + required: false + style: form + explode: true + schema: + type: array + items: + type: string + x-exportParamName: TempUeId + Query.DlGbrPrbUsageCell: + name: dl_gbr_prb_usage_cell + in: query + description: PRB usage for downlink GBR traffic in percentage as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrPrbUsageCell + Query.UlGbrPrbUsageCell: + name: ul_gbr_prb_usage_cell + in: query + description: PRB usage for uplink GBR traffic in percentage as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrPrbUsageCell + Query.DlNonGbrPrbUsageCell: + name: dl_nongbr_prb_usage_cell + in: query + description: PRB usage for downlink non-GBR traffic in percentage as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrPrbUsageCell + Query.UlNonGbrPrbUsageCell: + name: ul_nongbr_prb_usage_cell + in: query + description: PRB usage for uplink non-GBR traffic in percentage as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrPrbUsageCell + Query.DlTotalPrbUsageCell: + name: dl_total_prb_usage_cell + in: query + description: PRB usage for total downlink traffic in percentage as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlTotalPrbUsageCell + Query.UlTotalPrbUsageCell: + name: ul_total_prb_usage_cell + in: query + description: PRB usage for total uplink traffic in percentage as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlTotalPrbUsageCell + Query.ReceivedDedicatedPreamblesCell: + name: received_dedicated_preambles_cell + in: query + description: Received dedicated preambles in percentage as defined in ETSI TS + 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: ReceivedDedicatedPreamblesCell + Query.ReceivedRandomPreamblesLowRangeCell: + name: received_randomly_selected_preambles_low_range_cell + in: query + description: Received randomly selected preambles in the low range in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: ReceivedRandomPreamblesLowRangeCell + Query.ReceivedRandomPreamblesHighRangeCell: + name: received_randomly_selected_preambles_high_range_cell + in: query + description: Received rendomly selected preambles in the high range in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: ReceivedRandomPreamblesHighRangeCell + Query.NumberOfActiveUeDlGbrCell: + name: number_of_active_ue_dl_gbr_cell + in: query + description: Number of active UEs with downlink GBR traffic as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeDlGbrCell + Query.NumberOfActiveUeUlGbrCell: + name: number_of_active_ue_ul_gbr_cell + in: query + description: Number of active UEs with uplink GBR traffic as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeUlGbrCell + Query.NumberOfActiveUeDlNonGbrCell: + name: number_of_active_ue_dl_nongbr_cell + in: query + description: Number of active UEs with downlink non-GBR traffic as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeDlNonGbrCell + Query.NumberOfActiveUeUlNonGbrCell: + name: number_of_active_ue_ul_nongbr_cell + in: query + description: Number of active UEs with uplink non-GBR traffic as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: NumberOfActiveUeUlNonGbrCell + Query.DlGbrPdrCell: + name: dl_gbr_pdr_cell + in: query + description: Packet discard rate for downlink GBR traffic in percentage as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrPdrCell + Query.UlGbrPdrCell: + name: ul_gbr_pdr_cell + in: query + description: Packet discard rate for uplink GBR traffic in percentage as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrPdrCell + Query.DlNonGbrPdrCell: + name: dl_nongbr_pdr_cell + in: query + description: Packet discard rate for downlink non-GBR traffic in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrPdrCell + Query.UlNonGbrPdrCell: + name: ul_nongbr_pdr_cell + in: query + description: Packet discard rate for uplink non-GBR traffic in percentage as + defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrPdrCell + Query.DlGbrDelayUe: + name: dl_gbr_delay_ue + in: query + description: Packet delay of downlink GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrDelayUe + Query.UlGbrDelayUe: + name: ul_gbr_delay_ue + in: query + description: Packet delay of uplink GBR traffic of a UE as defined in ETSI TS + 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrDelayUe + Query.DlNonGbrDelayUe: + name: dl_nongbr_delay_ue + in: query + description: Packet delay of downlink non-GBR traffic of a UE as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrDelayUe + Query.UlNonGbrDelayUe: + name: ul_nongbr_delay_ue + in: query + description: Packet delay of uplink non-GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrDelayUe + Query.DlGbrPdrUe: + name: dl_gbr_pdr_ue + in: query + description: Packet discard rate of downlink GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrPdrUe + Query.UlGbrPdrUe: + name: ul_gbr_pdr_ue + in: query + description: Packet discard rate of uplink GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrPdrUe + Query.DlNonGbrPdrUe: + name: dl_nongbr_pdr_ue + in: query + description: Packet discard rate of downlink non-GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrPdrUe + Query.UlNonGbrPdrUe: + name: ul_nongbr_pdr_ue + in: query + description: Packet discard rate of uplink non-GBR traffic of a UE in percentage + as defined in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrPdrUe + Query.DlGbrThroughputUe: + name: dl_gbr_throughput_ue + in: query + description: Scheduled throughput of downlink GBR traffic of a UE as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrThroughputUe + Query.UlGbrThroughputUe: + name: ul_gbr_throughput_ue + in: query + description: Scheduled throughput of uplink GBR traffic of a UE as defined in + ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrThroughputUe + Query.DlNonGbrThroughputUe: + name: dl_nongbr_throughput_ue + in: query + description: Scheduled throughput of downlink non-GBR traffic of a UE as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrThroughputUe + Query.UlNonGbrThroughputUe: + name: ul_nongbr_throughput_ue + in: query + description: Scheduled throughput of uplink non-GBR traffic of a UE as defined + in ETSI TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrThroughputUe + Query.DlGbrDataVolumeUe: + name: dl_gbr_data_volume_ue + in: query + description: Data volume of downlink GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlGbrDataVolumeUe + Query.UlGbrDataVolumeUe: + name: ul_gbr_data_volume_ue + in: query + description: Data volume of uplink GBR traffic of a UE as defined in ETSI TS + 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlGbrDataVolumeUe + Query.DlNonGbrDataVolumeUe: + name: dl_nongbr_data_volume_ue + in: query + description: Data volume of downlink non-GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: DlNonGbrDataVolumeUe + Query.UlNonGbrDataVolumeUe: + name: ul_nongbr_data_volume_ue + in: query + description: Data volume of uplink non-GBR traffic of a UE as defined in ETSI + TS 136 314 + required: false + style: form + explode: true + schema: + type: integer + x-exportParamName: UlNonGbrDataVolumeUe + Query.SubscriptionType: + name: subscription_type + in: query + description: "Filter on a specific subscription type. Permitted values: cell_change,\ + \ rab_est, rab_mod, rab_rel, meas_rep_ue, nr_meas_rep_ue, timing_advance_ue,\ + \ ca_reconf, s1_bearer." + required: false + style: form + explode: true + schema: + type: string + x-exportParamName: SubscriptionType + diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/__init__.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/__init__.py new file mode 100644 index 0000000..6445063 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/__init__.py @@ -0,0 +1,16 @@ +import logging + +import connexion +from flask_testing import TestCase + +from swagger_server.encoder import JSONEncoder + + +class BaseTestCase(TestCase): + + def create_app(self): + logging.getLogger('connexion.operation').setLevel('ERROR') + app = connexion.App(__name__, specification_dir='../swagger/') + app.app.json_encoder = JSONEncoder + app.add_api('swagger.yaml') + return app.app diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/test_rni_controller.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/test_rni_controller.py new file mode 100644 index 0000000..23077b8 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/test/test_rni_controller.py @@ -0,0 +1,194 @@ +# coding: utf-8 + +from __future__ import absolute_import + +from flask import json +from six import BytesIO + +from swagger_server.models.inline_subscription import InlineSubscription # noqa: E501 +from swagger_server.models.l2_meas import L2Meas # noqa: E501 +from swagger_server.models.plmn_info import PlmnInfo # noqa: E501 +from swagger_server.models.problem_details import ProblemDetails # noqa: E501 +from swagger_server.models.rab_info import RabInfo # noqa: E501 +from swagger_server.models.s1_bearer_info import S1BearerInfo # noqa: E501 +from swagger_server.models.subscription_link_list import SubscriptionLinkList # noqa: E501 +from swagger_server.test import BaseTestCase + + +class TestRniController(BaseTestCase): + """RniController integration test stubs""" + + def test_layer2_meas_info_get(self): + """Test case for layer2_meas_info_get + + Retrieve information on layer 2 measurements + """ + query_string = [('app_ins_id', 'app_ins_id_example'), + ('cell_id', 'cell_id_example'), + ('ue_ipv4_address', 'ue_ipv4_address_example'), + ('ue_ipv6_address', 'ue_ipv6_address_example'), + ('nated_ip_address', 'nated_ip_address_example'), + ('gtp_teid', 'gtp_teid_example'), + ('dl_gbr_prb_usage_cell', 56), + ('ul_gbr_prb_usage_cell', 56), + ('dl_nongbr_prb_usage_cell', 56), + ('ul_nongbr_prb_usage_cell', 56), + ('dl_total_prb_usage_cell', 56), + ('ul_total_prb_usage_cell', 56), + ('received_dedicated_preambles_cell', 56), + ('received_randomly_selected_preambles_low_range_cell', 56), + ('received_randomly_selected_preambles_high_range_cell', 56), + ('number_of_active_ue_dl_gbr_cell', 56), + ('number_of_active_ue_ul_gbr_cell', 56), + ('number_of_active_ue_dl_nongbr_cell', 56), + ('number_of_active_ue_ul_nongbr_cell', 56), + ('dl_gbr_pdr_cell', 56), + ('ul_gbr_pdr_cell', 56), + ('dl_nongbr_pdr_cell', 56), + ('ul_nongbr_pdr_cell', 56), + ('dl_gbr_delay_ue', 56), + ('ul_gbr_delay_ue', 56), + ('dl_nongbr_delay_ue', 56), + ('ul_nongbr_delay_ue', 56), + ('dl_gbr_pdr_ue', 56), + ('ul_gbr_pdr_ue', 56), + ('dl_nongbr_pdr_ue', 56), + ('ul_nongbr_pdr_ue', 56), + ('dl_gbr_throughput_ue', 56), + ('ul_gbr_throughput_ue', 56), + ('dl_nongbr_throughput_ue', 56), + ('ul_nongbr_throughput_ue', 56), + ('dl_gbr_data_volume_ue', 56), + ('ul_gbr_data_volume_ue', 56), + ('dl_nongbr_data_volume_ue', 56), + ('ul_nongbr_data_volume_ue', 56)] + response = self.client.open( + '/rni/v2/queries/layer2_meas', + method='GET', + query_string=query_string) + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_plmn_info_get(self): + """Test case for plmn_info_get + + Retrieve information on the underlying Mobile Network that the MEC application is associated to + """ + query_string = [('app_ins_id', 'app_ins_id_example')] + response = self.client.open( + '/rni/v2/queries/plmn_info', + method='GET', + query_string=query_string) + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_rab_info_get(self): + """Test case for rab_info_get + + Retrieve information on Radio Access Bearers + """ + query_string = [('app_ins_id', 'app_ins_id_example'), + ('cell_id', 'cell_id_example'), + ('ue_ipv4_address', 'ue_ipv4_address_example'), + ('ue_ipv6_address', 'ue_ipv6_address_example'), + ('nated_ip_address', 'nated_ip_address_example'), + ('gtp_teid', 'gtp_teid_example'), + ('erab_id', 56), + ('qci', 56), + ('erab_mbr_dl', 56), + ('erab_mbr_ul', 56), + ('erab_gbr_dl', 56), + ('erab_gbr_ul', 56)] + response = self.client.open( + '/rni/v2/queries/rab_info', + method='GET', + query_string=query_string) + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_s1_bearer_info_get(self): + """Test case for s1_bearer_info_get + + Retrieve S1-U bearer information related to specific UE(s) + """ + query_string = [('temp_ue_id', 'temp_ue_id_example'), + ('ue_ipv4_address', 'ue_ipv4_address_example'), + ('ue_ipv6_address', 'ue_ipv6_address_example'), + ('nated_ip_address', 'nated_ip_address_example'), + ('gtp_teid', 'gtp_teid_example'), + ('cell_id', 'cell_id_example'), + ('erab_id', 56)] + response = self.client.open( + '/rni/v2/queries/s1_bearer_info', + method='GET', + query_string=query_string) + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_subscription_link_list_subscriptions_get(self): + """Test case for subscription_link_list_subscriptions_get + + Retrieve information on subscriptions for notifications + """ + query_string = [('subscription_type', 'subscription_type_example')] + response = self.client.open( + '/rni/v2/subscriptions', + method='GET', + query_string=query_string) + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_subscriptions_delete(self): + """Test case for subscriptions_delete + + Cancel an existing subscription + """ + response = self.client.open( + '/rni/v2/subscriptions/{subscriptionId}'.format(subscription_id='subscription_id_example'), + method='DELETE') + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_subscriptions_get(self): + """Test case for subscriptions_get + + Retrieve information on current specific subscription + """ + response = self.client.open( + '/rni/v2/subscriptions/{subscriptionId}'.format(subscription_id='subscription_id_example'), + method='GET') + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_subscriptions_post(self): + """Test case for subscriptions_post + + Create a new subscription + """ + body = InlineSubscription() + response = self.client.open( + '/rni/v2/subscriptions', + method='POST', + data=json.dumps(body), + content_type='application/json') + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + def test_subscriptions_put(self): + """Test case for subscriptions_put + + Modify an existing subscription + """ + body = InlineSubscription() + response = self.client.open( + '/rni/v2/subscriptions/{subscriptionId}'.format(subscription_id='subscription_id_example'), + method='PUT', + data=json.dumps(body), + content_type='application/json') + self.assert200(response, + 'Response body is : ' + response.data.decode('utf-8')) + + +if __name__ == '__main__': + import unittest + unittest.main() diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/type_util.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/type_util.py new file mode 100644 index 0000000..0563f81 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/type_util.py @@ -0,0 +1,32 @@ +# coding: utf-8 + +import sys + +if sys.version_info < (3, 7): + import typing + + def is_generic(klass): + """ Determine whether klass is a generic class """ + return type(klass) == typing.GenericMeta + + def is_dict(klass): + """ Determine whether klass is a Dict """ + return klass.__extra__ == dict + + def is_list(klass): + """ Determine whether klass is a List """ + return klass.__extra__ == list + +else: + + def is_generic(klass): + """ Determine whether klass is a generic class """ + return hasattr(klass, '__origin__') + + def is_dict(klass): + """ Determine whether klass is a Dict """ + return klass.__origin__ == dict + + def is_list(klass): + """ Determine whether klass is a List """ + return klass.__origin__ == list diff --git a/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/util.py b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/util.py new file mode 100644 index 0000000..812b2ad --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/swagger_server/util.py @@ -0,0 +1,142 @@ +import datetime + +import six +import typing +from swagger_server import type_util + + +def _deserialize(data, klass): + """Deserializes dict, list, str into an object. + + :param data: dict, list or str. + :param klass: class literal, or string of class name. + + :return: object. + """ + if data is None: + return None + + if klass in six.integer_types or klass in (float, str, bool, bytearray): + return _deserialize_primitive(data, klass) + elif klass == object: + return _deserialize_object(data) + elif klass == datetime.date: + return deserialize_date(data) + elif klass == datetime.datetime: + return deserialize_datetime(data) + elif type_util.is_generic(klass): + if type_util.is_list(klass): + return _deserialize_list(data, klass.__args__[0]) + if type_util.is_dict(klass): + return _deserialize_dict(data, klass.__args__[1]) + else: + return deserialize_model(data, klass) + + +def _deserialize_primitive(data, klass): + """Deserializes to primitive type. + + :param data: data to deserialize. + :param klass: class literal. + + :return: int, long, float, str, bool. + :rtype: int | long | float | str | bool + """ + try: + value = klass(data) + except UnicodeEncodeError: + value = six.u(data) + except TypeError: + value = data + return value + + +def _deserialize_object(value): + """Return an original value. + + :return: object. + """ + return value + + +def deserialize_date(string): + """Deserializes string to date. + + :param string: str. + :type string: str + :return: date. + :rtype: date + """ + try: + from dateutil.parser import parse + return parse(string).date() + except ImportError: + return string + + +def deserialize_datetime(string): + """Deserializes string to datetime. + + The string should be in iso8601 datetime format. + + :param string: str. + :type string: str + :return: datetime. + :rtype: datetime + """ + try: + from dateutil.parser import parse + return parse(string) + except ImportError: + return string + + +def deserialize_model(data, klass): + """Deserializes list or dict to model. + + :param data: dict, list. + :type data: dict | list + :param klass: class literal. + :return: model object. + """ + instance = klass() + + if not instance.swagger_types: + return data + + for attr, attr_type in six.iteritems(instance.swagger_types): + if data is not None \ + and instance.attribute_map[attr] in data \ + and isinstance(data, (list, dict)): + value = data[instance.attribute_map[attr]] + setattr(instance, attr, _deserialize(value, attr_type)) + + return instance + + +def _deserialize_list(data, boxed_type): + """Deserializes a list and its elements. + + :param data: list to deserialize. + :type data: list + :param boxed_type: class literal. + + :return: deserialized list. + :rtype: list + """ + return [_deserialize(sub_data, boxed_type) + for sub_data in data] + + +def _deserialize_dict(data, boxed_type): + """Deserializes a dict and its elements. + + :param data: dict to deserialize. + :type data: dict + :param boxed_type: class literal. + + :return: deserialized dict. + :rtype: dict + """ + return {k: _deserialize(v, boxed_type) + for k, v in six.iteritems(data)} diff --git a/examples/notification_server/RNIS/dummy_mec012_server/test-requirements.txt b/examples/notification_server/RNIS/dummy_mec012_server/test-requirements.txt new file mode 100644 index 0000000..2640639 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/test-requirements.txt @@ -0,0 +1,7 @@ +flask_testing==0.8.0 +coverage>=4.0.3 +nose>=1.3.7 +pluggy>=0.3.1 +py>=1.4.31 +randomize>=0.13 +tox==3.20.1 diff --git a/examples/notification_server/RNIS/dummy_mec012_server/tox.ini b/examples/notification_server/RNIS/dummy_mec012_server/tox.ini new file mode 100644 index 0000000..2751b21 --- /dev/null +++ b/examples/notification_server/RNIS/dummy_mec012_server/tox.ini @@ -0,0 +1,10 @@ +[tox] +envlist = py38 + +[testenv] +deps=-r{toxinidir}/requirements.txt + -r{toxinidir}/test-requirements.txt + +commands= + nosetests \ + [] \ No newline at end of file diff --git a/examples/notification_server/Readme.md b/examples/notification_server/Readme.md new file mode 100644 index 0000000..814d24a --- /dev/null +++ b/examples/notification_server/Readme.md @@ -0,0 +1,10 @@ +## How to Run a Robot Script to Validate a Web Server's Notifications + + +1. **Prerequisites** + - Ensure that Docker is installed on your computer. You can check this by running the command `docker --version` in your command prompt or terminal. If Docker is not installed, download and install it from the official Docker website. + - Ensure that docker-compose is installed on your computer. You can check this by running the command `docker-compose --version` in your command prompt or terminal. If Docker is not installed, download and install it from the official Docker website. + + +2. **Start the SUT (Web Server which sends notifications)** with `docker-compose up RNIS` +3. **Run the Robot Test** with `docker-compose up robot` \ No newline at end of file diff --git a/examples/notification_server/docker-compose.yml b/examples/notification_server/docker-compose.yml new file mode 100644 index 0000000..a28a92e --- /dev/null +++ b/examples/notification_server/docker-compose.yml @@ -0,0 +1,20 @@ +version: '2' +services: + robot: + build: + context: . + hostname: robot + image: robot:local + volumes: + - ./logs:/home/robot/logs + ports: + - 9090:9090 + environment: + - RNIS_URL=http://rnis:8080 + RNIS: + build: + context: RNIS/dummy_mec012_server + image: rnis:latest + hostname: rnis + ports: + - 8080:8080 \ No newline at end of file diff --git a/examples/notification_server/libraries/Server.py b/examples/notification_server/libraries/Server.py new file mode 100644 index 0000000..f802415 --- /dev/null +++ b/examples/notification_server/libraries/Server.py @@ -0,0 +1,107 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json + +# Library version +__version__ = '0.0.1' + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host, port, timeout, method, endpoint, resp_body): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + print("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + self.app.handle_request() + self.app.server_close() \ No newline at end of file diff --git a/examples/notification_server/requirements.txt b/examples/notification_server/requirements.txt new file mode 100644 index 0000000..a9a0f2f --- /dev/null +++ b/examples/notification_server/requirements.txt @@ -0,0 +1,9 @@ +robotframework===6.0.2 +#RESTinstance==1.3.0 +#robotframework-dependencylibrary==4.0.0 +#robotframework-jsonlibrary==0.5 +#robotframework-jsonschemalibrary==1.0 +robotframework-requests==0.9.4 +#robotframework-mockserver==0.0.7 +requests>=2.21.0 +Flask \ No newline at end of file diff --git a/examples/notification_server/run_tests.sh b/examples/notification_server/run_tests.sh new file mode 100755 index 0000000..1eccd70 --- /dev/null +++ b/examples/notification_server/run_tests.sh @@ -0,0 +1,5 @@ +#!/bin/sh -e + +python -m robot --outputdir ./logs/ \ + --loglevel TRACE \ + ./tests \ No newline at end of file -- GitLab From cf27f8599561be6b5346ea924d3f2e00a1014d13 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Wed, 12 Jul 2023 12:48:36 +0200 Subject: [PATCH 08/94] TTF027: Updated TCs for MEC011v3.2.1 --- MEC011/SRV/APPSAQ/PlatAppServices.robot | 127 ++++++++++---------- MEC011/SRV/APPSAQ/environment/variables.txt | 3 +- 2 files changed, 63 insertions(+), 67 deletions(-) diff --git a/MEC011/SRV/APPSAQ/PlatAppServices.robot b/MEC011/SRV/APPSAQ/PlatAppServices.robot index 9f31e11..37ccca3 100644 --- a/MEC011/SRV/APPSAQ/PlatAppServices.robot +++ b/MEC011/SRV/APPSAQ/PlatAppServices.robot @@ -10,7 +10,6 @@ Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Default Tags TC_MEC_SRV_APPSAQ - *** Test Cases *** TP_MEC_MEC011_SRV_APPSAQ_001_OK @@ -18,12 +17,10 @@ TP_MEC_MEC011_SRV_APPSAQ_001_OK ... Check that the IUT responds with a list of available MEC services ... for a given application instance when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5 - ... Reference ETSI GS MEC 011 3.2.1, clause 8.1.2.2 - ... Reference ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - Get a list of mecService of an application instance ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfoList @@ -34,11 +31,10 @@ TP_MEC_MEC011_SRV_APPSAQ_001_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5 - ... Reference ETSI GS MEC 011 3.2.1, clause 8.1.2.2 - ... Reference ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - # Wrong query parameter name should trigger an error response. Get a list of mecService of an application instance with parameters ${APP_INSTANCE_ID} ${INSTANCE_ID} ${FAKE_INSTANCE_ID_VALUE} Check HTTP Response Status Code Is 400 @@ -49,27 +45,26 @@ TP_MEC_MEC011_SRV_APPSAQ_002_OK ... Check that the IUT notifies the authorised relevant (subscribed) application ... instances when a new service for a given application instance is registered ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create new service ServiceInfo ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is ServiceInfo Check HTTP Response Header Contains Location Check Response Contains ${response['body']} serName ${NEW_SERVICE_NAME} - + ##TODO add notification server + TP_MEC_MEC011_SRV_APPSAQ_002_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create new service ServiceInfoError ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 400 @@ -80,11 +75,9 @@ TP_MEC_MEC011_SRV_APPSAQ_002_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create new service ServiceInfo ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 @@ -95,10 +88,9 @@ TP_MEC_MEC011_SRV_APPSAQ_003_OK ... Check that the IUT responds with the information on a specific service ... for a given application instance when queried by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual service ${APP_INSTANCE_ID} ${SERVICE_ID} Check HTTP Response Status Code Is 200 @@ -111,9 +103,9 @@ TP_MEC_MEC011_SRV_APPSAQ_003_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 @@ -124,9 +116,9 @@ TP_MEC_MEC011_SRV_APPSAQ_004_OK ... Check that the IUT updates a service information for a given ... application instance when commanded by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated Check HTTP Response Status Code Is 200 @@ -139,9 +131,9 @@ TP_MEC_MEC011_SRV_APPSAQ_004_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdatedError Check HTTP Response Status Code Is 400 @@ -152,21 +144,34 @@ TP_MEC_MEC011_SRV_APPSAQ_004_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES Update service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} ServiceInfoUpdated Check HTTP Response Status Code Is 404 + +TP_MEC_MEC011_SRV_APPSAQ_004_PF + [Documentation] + ... Check that the IUT responds with an error when + ... a request sent by a MEC Application doesn't comply with a required condition + ... + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + [Tags] PIC_MEC_PLAT PIC_SERVICES + Update service with etag ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated ${INVALID_ETAG} + Check HTTP Response Status Code Is 412 + + TP_MEC_MEC011_SRV_APPSAQ_005_OK [Documentation] ... Check that the IUT executes the deletion of a service ... for a given application instance when requested by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" - + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} Check HTTP Response Status Code Is 204 @@ -177,7 +182,7 @@ TP_MEC_MEC011_SRV_APPSAQ_005_NF ... Check that the IUT responds with an error when ... a request for deletion of a unknown service is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES Remove individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 @@ -238,7 +243,19 @@ Update service PUT ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services/${serviceId} ${body} ${output}= Output response Set Suite Variable ${response} ${output} - + +Update service with etag + [Arguments] ${appInstanceId} ${serviceId} ${content} ${etag} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"If-Match":"${etag}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + PUT ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services/${serviceId} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Remove individual service [Arguments] ${appInstanceId} ${serviceName} @@ -249,25 +266,3 @@ Remove individual service ${output}= Output response Set Suite Variable ${response} ${output} - -# Check Plaform IUT notifies the MEC Application instances - # [Documentation] - # ... - - # [Arguments] ${instance_id} ${content} - - # TODO check how to send the message (isn't defined). Does it need to be tested as it's not defined? - - # // MEC 011, clause 6.4.2 - # the IUT entity sends a notification_message containing - # body containing - # notificationType set to "SerAvailabilityNotification", - # services containing - # serName set to SERVICE_NAME - # _links containing - # subscription set to MP1_SUBSCRIPTION_A - # ; - # ; - # ; - # ; - # to the MEC_APP_Subscriber entity diff --git a/MEC011/SRV/APPSAQ/environment/variables.txt b/MEC011/SRV/APPSAQ/environment/variables.txt index 3122626..2a6d207 100644 --- a/MEC011/SRV/APPSAQ/environment/variables.txt +++ b/MEC011/SRV/APPSAQ/environment/variables.txt @@ -21,4 +21,5 @@ ${NON_EXISTENT_SERVICE_ID} NON_EXISTENT_SERVICE_ID ${NEW_SERVICE_NAME} NEW_SERVICE_NAME ## this parameter should be the same as in jsons/ServiceInfoUpdated.json on param sversion -${SVC_NEW_VERSION} v2.0 \ No newline at end of file +${SVC_NEW_VERSION} v2.0 +${INVALID_ETAG} INVALID_ETAG \ No newline at end of file -- GitLab From c02ba8242d8758cbf77211cb94d41ad52f283511 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 13 Jul 2023 12:23:54 +0200 Subject: [PATCH 09/94] TTF027: Updated DNS TCs for MEC011v3.2.1 --- MEC011/SRV/DNS/PlatDnsRules.robot | 86 ++++++++++++++++-------- MEC011/SRV/DNS/environment/variables.txt | 6 +- 2 files changed, 61 insertions(+), 31 deletions(-) diff --git a/MEC011/SRV/DNS/PlatDnsRules.robot b/MEC011/SRV/DNS/PlatDnsRules.robot index 883e195..b792fe0 100644 --- a/MEC011/SRV/DNS/PlatDnsRules.robot +++ b/MEC011/SRV/DNS/PlatDnsRules.robot @@ -21,23 +21,37 @@ TP_MEC_MEC011_SRV_DNS_001_OK ... Check that the IUT responds with a list of active DNS rules ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.9.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/DnsRule - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.9.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of active DNS rules ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DnsRuleList +TP_MEC_MEC011_SRV_DNS_001_NF + [Documentation] + ... Check that the IUT responds with a list of active DNS rules + ... when queried by a MEC Application + ... + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.9.3.1" + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get list of active DNS rules ${NOT_EXISTENT_APP_INSTANCE_ID} + Check HTTP Response Status Code Is 404 + + + TP_MEC_MEC011_SRV_DNS_002_OK [Documentation] ... Check that the IUT responds with the information on a specific DNS rule ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.10.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/DnsRule - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual DNS rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} Check HTTP Response Status Code Is 200 @@ -45,13 +59,15 @@ TP_MEC_MEC011_SRV_DNS_002_OK Check Response Contains ${response['body']} dnsRuleId ${DNS_RULE_ID} + TP_MEC_MEC011_SRV_DNS_002_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.10.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Get individual DNS rule ${APP_INSTANCE_ID} ${NON_ESISTENT_DNS_RULE_ID} Check HTTP Response Status Code Is 404 @@ -59,16 +75,17 @@ TP_MEC_MEC011_SRV_DNS_002_NF TP_MEC_MEC011_SRV_DNS_003_OK [Documentation] - ... Check that the IUT updates a specific DNS rule - ... when commanded by a MEC Application + ... Check that the IUT responds with the information on a specific DNS rule + ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.10.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/DnsRule - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Update a DNS Rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdate Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DnsRule + Check Response Contains ${response['body']} dnsRuleId ${DNS_RULE_ID} Check Response Contains ${response['body']} ipAddress ${SOME_IP_ADDRESS} @@ -77,8 +94,9 @@ TP_MEC_MEC011_SRV_DNS_003_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.10.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/DnsRule + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Update a DNS Rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdateError @@ -90,8 +108,9 @@ TP_MEC_MEC011_SRV_DNS_003_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.10.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/DnsRule + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Update a DNS Rule ${APP_INSTANCE_ID} ${NON_ESISTENT_DNS_RULE_ID} DnsRuleUpdate @@ -99,17 +118,17 @@ TP_MEC_MEC011_SRV_DNS_003_NF -#TP_MEC_MEC011_SRV_DNS_003_PF -# [Documentation] -# ... Check that the IUT responds with an error when -# ... a request sent by a MEC Application doesn't comply with a required condition -# ... -# ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.10.3.2 -# ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/DnsRule -# -# [Tags] PIC_MEC_PLAT PIC_SERVICES -# Update a DNS Rule with invalid etag ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdate -# Check HTTP Response Status Code Is 412 +TP_MEC_MEC011_SRV_DNS_003_PF + [Documentation] + ... Check that the IUT responds with an error when + ... a request sent by a MEC Application doesn't comply with a required condition + ... + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" + [Tags] PIC_MEC_PLAT PIC_SERVICES + Update a DNS Rule with invalid etag ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdate + Check HTTP Response Status Code Is 412 @@ -138,6 +157,7 @@ Update a DNS Rule Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"If-Match": "${VALID_ETAG}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} PUT ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules/${dnsRuleId} ${body} @@ -147,4 +167,12 @@ Update a DNS Rule Update a DNS Rule with invalid etag [Arguments] ${appInstanceId} ${dnsRuleId} ${content} Set Headers {"If-Match": "${INVALID_ETAG}"} - Update a DNS Rule ${appInstanceId} ${dnsRuleId} ${content} \ No newline at end of file + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"If-Match": "${INVALID_ETAG}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + PUT ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules/${dnsRuleId} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC011/SRV/DNS/environment/variables.txt b/MEC011/SRV/DNS/environment/variables.txt index bed8e73..08e8d3a 100644 --- a/MEC011/SRV/DNS/environment/variables.txt +++ b/MEC011/SRV/DNS/environment/variables.txt @@ -7,13 +7,15 @@ ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} mec_app_support -${apiVersion} v1 +${apiVersion} v2 # Specific variables ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${NOT_EXISTENT_APP_INSTANCE_ID} NOT_EXISTENT_APP_INSTANCE_ID ${DNS_RULE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NON_ESISTENT_DNS_RULE_ID} NON_ESISTENT_DNS_RULE_ID -${INVALID_ETAG} INVALID_ETAG +${INVALID_ETAG} INVALID_ETAG +${VALID_ETAG} abcdef ${SOME_IP_ADDRESS} 146.241.7.3 -- GitLab From 7607edfb32fbfb179c4ac86644fe46d04e151c06 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 13 Jul 2023 15:57:12 +0200 Subject: [PATCH 10/94] TTF027: Updated LIV TCs for MEC011v3.2.1 --- MEC011/SRV/LIV/Liveness.robot | 47 ++++++++++++++++++------ MEC011/SRV/LIV/environment/variables.txt | 2 - 2 files changed, 35 insertions(+), 14 deletions(-) diff --git a/MEC011/SRV/LIV/Liveness.robot b/MEC011/SRV/LIV/Liveness.robot index 2e7e310..72fd4ba 100644 --- a/MEC011/SRV/LIV/Liveness.robot +++ b/MEC011/SRV/LIV/Liveness.robot @@ -1,7 +1,7 @@ *** Settings *** Documentation -... A test suite for validating Application Subscriptions (APPSUB) operations. +... A test suite for validating MEC Liveness Service (MLS) operations. Resource ../../../GenericKeywords.robot Resource environment/variables.txt @@ -15,35 +15,38 @@ TP_MEC_MEC011_SRV_MSL_001_OK [Documentation] ... Check that the IUT responds with the liveness of a MEC service instance ... when queried by a MEC Application - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.10.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.12", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.4", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Individual MEC service liveness ${URL_SERVICE_MEC_LIVENESS} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceLivenessInfo - + Check Response Contains ${response['body']} state ACTIVE TP_MEC_MEC011_SRV_MSL_001_NF [Documentation] ... Check that the IUT responds with an error when - ... a request for an URI that cannot be mapped to a valid resource URI - ... is sent by a MEC Application - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.10.3.1 - + ... a request for an URI that cannot be mapped to a valid resource URI + ... is sent by a MEC Application + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.12", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.4", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES Individual MEC service liveness ${NOT_EXISING_URL_SERVICE_MEC_LIVENESS} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_MSL_002_OK +TP_MEC_MEC011_SRV_MSL_002_OK_01 [Documentation] ... Check that the IUT updates the liveness of a MEC service instance ... when requested by a MEC Application - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.12", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.5", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3" [Tags] PIC_MEC_PLAT PIC_SERVICES Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ServiceLivenessUpdate .json ${body}= Get File ${file} Update MEC service liveness ${URL_SERVICE_MEC_LIVENESS} ${body} @@ -51,11 +54,30 @@ TP_MEC_MEC011_SRV_MSL_002_OK Check HTTP Response Body Json Schema Is ServiceLivenessInfo Check Response Contains ${response['body']} state ACTIVE + +TP_MEC_MEC011_SRV_MSL_002_OK_02 + [Documentation] + ... Check that the IUT updates the liveness of a MEC service instance + ... when requested by a MEC Application + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.12", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.5", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3" + [Tags] PIC_MEC_PLAT PIC_SERVICES + Set Headers {"Authorization":"${TOKEN}"} + + ${file}= Catenate SEPARATOR= jsons/ ServiceLivenessUpdate .json + ${body}= Get File ${file} + Update MEC service liveness ${URL_SERVICE_MEC_LIVENESS} ${body} + Check HTTP Response Status Code Is 204 + + TP_MEC_MEC011_SRV_MSL_002_BR [Documentation] ... Check that the IUT responds with an error when ... incorrect parameters were sent by a MEC Application - + ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.5", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3" [Tags] PIC_MEC_PLAT PIC_SERVICES Set Headers {"Authorization":"${TOKEN}"} @@ -80,6 +102,7 @@ Update MEC service liveness [Arguments] ${URL_MEC_SERVICE_LIVENESS} ${body} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"application/json"} Patch ${URL_MEC_SERVICE_LIVENESS} ${body} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC011/SRV/LIV/environment/variables.txt b/MEC011/SRV/LIV/environment/variables.txt index e711cbd..eb2e7bf 100644 --- a/MEC011/SRV/LIV/environment/variables.txt +++ b/MEC011/SRV/LIV/environment/variables.txt @@ -6,8 +6,6 @@ ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} -${apiName} mec_app_support -${apiVersion} v1 # Specific variables ${URL_SERVICE_MEC_LIVENESS} /link/to/individual/mecServiceLiveness -- GitLab From b619dd031299af3db274e12f42e4b19e48fb2843 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 16 Nov 2023 15:52:26 +0100 Subject: [PATCH 11/94] First version of Test cases for MEC033 v3.1.1 specification. --- MEC033/MEX/IOTDEV/RegisteredDevices.robot | 226 +++++++++ MEC033/MEX/IOTDEV/environment/variables.txt | 20 + MEC033/MEX/IOTDEV/jsons/DeviceInfo.json | 6 + MEC033/MEX/IOTDEV/jsons/DeviceInfoBR.json | 7 + MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdate.json | 15 + .../MEX/IOTDEV/jsons/DeviceInfoUpdateBR.json | 16 + .../MEX/IOTDEV/schemas/DeviceInfo.schema.json | 427 +++++++++++++++++ .../IOTDEV/schemas/DeviceInfoList.schema.json | 430 ++++++++++++++++++ 8 files changed, 1147 insertions(+) create mode 100644 MEC033/MEX/IOTDEV/RegisteredDevices.robot create mode 100644 MEC033/MEX/IOTDEV/environment/variables.txt create mode 100644 MEC033/MEX/IOTDEV/jsons/DeviceInfo.json create mode 100644 MEC033/MEX/IOTDEV/jsons/DeviceInfoBR.json create mode 100644 MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdate.json create mode 100644 MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdateBR.json create mode 100644 MEC033/MEX/IOTDEV/schemas/DeviceInfo.schema.json create mode 100644 MEC033/MEX/IOTDEV/schemas/DeviceInfoList.schema.json diff --git a/MEC033/MEX/IOTDEV/RegisteredDevices.robot b/MEC033/MEX/IOTDEV/RegisteredDevices.robot new file mode 100644 index 0000000..efb9309 --- /dev/null +++ b/MEC033/MEX/IOTDEV/RegisteredDevices.robot @@ -0,0 +1,226 @@ +Y''[Documentation] robot --outputdir ../../../outputs ./RegisteredDevices.robot +... Test Suite to validate the Registered IOT Device (IOTDEV) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem + +*** Test Cases *** +TP_MEC_MEC033_IOTS_IOTDEV_001_OK_01 + [Documentation] + ... Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer + ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve all registered IOT Device information + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is DeviceInfoList + FOR ${element} IN @{response['body']} + Log ${element} + Should Be Equal As Strings ${element}[imsi] ${EXPECTED_IMSI} + Should Be Equal As Strings ${element}[supi] ${EXPECTED_SUPI} + Should Be Equal As Strings ${element}[enabled] ${False} + END + + +TP_MEC_MEC033_IOTS_IOTDEV_001_OK_02 + [Documentation] + ... "Check that the IUT responds with the list of registered IoT devices when queried using a filter by a Service Consumer + ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve all registered IOT Device information with filter or query param ${FILTER_ON_ENABLE} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is DeviceInfoList + FOR ${element} IN @{response['body']} + Should Be Equal As Strings ${element}[enabled] ${False} + END + + +TP_MEC_MEC033_IOTS_IOTDEV_001_OK_03 + [Documentation] + ... "Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering one field + ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve all registered IOT Device information with filter or query param ${DEVICE_ID_FIELDS} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is DeviceInfoList + +TP_MEC_MEC033_IOTS_IOTDEV_001_OK_04 + [Documentation] + ... "Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering one field + ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve all registered IOT Device information with filter or query param ${FIELDS_AND_FILTER} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is DeviceInfoList + + +TP_MEC_MEC033_IOTS_IOTDEV_001_OK_02 + [Documentation] + ... Check that the IUT registers the information of an IoT device when requested by a Service Consumer + ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.4 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Register IOT Device information DeviceInfo + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is DeviceInfo + ${file}= Catenate SEPARATOR= jsons/ DeviceInfo .json + ${body}= Get File ${file} + ${json}= evaluate json.loads('''${body}''') json + Should Be Equal As Strings ${response['body']['deviceId']} ${json}[deviceId] + Should Be Equal As Strings ${response['body']['imsi']} ${json}[imsi] + Should Be Equal As Strings ${response['body']['supi']} ${json}[supi] + Should Be Equal As Strings ${response['body']['enabled']} ${False} + + + +TP_MEC_MEC033_IOTS_IOTDEV_001_BR_02 + [Documentation] + ... Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters + ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.4 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Register IOT Device information DeviceInfoBR + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC033_IOTS_IOTDEV_003_OK + [Documentation] + ... Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier + ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve specific registered IOT Device information ${DEVICE_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is DeviceInfo + Should Be Equal As Strings ${response['body']['deviceId']} ${DEVICE_ID} + + +TP_MEC_MEC033_IOTS_IOTDEV_003_NF + [Documentation] + ... Check that the IUT returns error when Service Consumer request to retrieve a not registered IoT device + ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve specific registered IOT Device information ${NOT_EXISTING_DEVICE_ID} + Check HTTP Response Status Code Is 404 + + +TP_MEC_MEC033_IOTS_IOTDEV_004_OK + [Documentation] + ... Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters + ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.2 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Update IOT Device information ${DEVICE_ID} DeviceInfoUpdate + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is DeviceInfo + +TP_MEC_MEC033_IOTS_IOTDEV_004_NF + [Documentation] + ... Check that the IUT returns an error when a Service Consumer requests to update a not registered IoT device + ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.2 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Update IOT Device information ${NOT_EXISTING_DEVICE_ID} DeviceInfoUpdate + Check HTTP Response Status Code Is 404 + + +TP_MEC_MEC033_IOTS_IOTDEV_004_BR + [Documentation] + ... Check that the IUT returns an error when a Service Consumer requests to update an existing IoT device with incorrect parameters + ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.2 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Update IOT Device information ${NOT_EXISTING_DEVICE_ID} DeviceInfoUpdateBR + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC033_IOTS_IOTDEV_005_OK + [Documentation] + ... Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier + ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.5 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Deregister IOT Device information ${DEVICE_ID} + Check HTTP Response Status Code Is 204 + + +TP_MEC_MEC033_IOTS_IOTDEV_005_NF + [Documentation] + ... "Check that the IUT returns an error when a Service Consumer requests to deregisters an IoT device using incorrect parameters + ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.5 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Deregister IOT Device information ${NOT_EXISTING_DEVICE_ID} + Check HTTP Response Status Code Is 404 + +############################################################################ +############################################################################ +############################################################################ + +*** Keywords *** +Retrieve all registered IOT Device information + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/registered_devices + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve all registered IOT Device information with filter or query param + [Arguments] ${filter_and_query_param} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/registered_devices?${filter_and_query_param} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve specific registered IOT Device information + [Arguments] ${deviceId} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/registered_devices/${deviceId} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Register IOT Device information + [Arguments] ${content} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/registered_devices ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Update IOT Device information + [Arguments] ${deviceId} ${content} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + PUT ${apiRoot}/${apiName}/${apiVersion}/registered_devices/${deviceId} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Deregister IOT Device information + [Arguments] ${deviceId} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + DELETE ${apiRoot}/${apiName}/${apiVersion}/registered_devices/${deviceId} + ${output}= Output response + Set Suite Variable ${response} ${output} +##### \ No newline at end of file diff --git a/MEC033/MEX/IOTDEV/environment/variables.txt b/MEC033/MEX/IOTDEV/environment/variables.txt new file mode 100644 index 0000000..35e88fe --- /dev/null +++ b/MEC033/MEX/IOTDEV/environment/variables.txt @@ -0,0 +1,20 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8084 +${response} {} +${TOKEN} asic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} amsi +${apiVersion} v1 +${EXPECTED_IMSI} 310170845466094 +${EXPECTED_SUPI} 310170845466094 +${EXPECTED_ENABLED} false + +${FILTER_ON_ENABLE} (eq,enabled,false) +${DEVICE_ID_FIELDS} fields=deviceId + +${FIELDS_AND_FILTER} fields=deviceId&filter=(eq,enabled,false) +${DEVICE_ID} deviceId +${NOT_EXISTING_DEVICE_ID} notExistingDeviceId \ No newline at end of file diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfo.json b/MEC033/MEX/IOTDEV/jsons/DeviceInfo.json new file mode 100644 index 0000000..842d5e0 --- /dev/null +++ b/MEC033/MEX/IOTDEV/jsons/DeviceInfo.json @@ -0,0 +1,6 @@ +{ + "deviceAuthenticationInfo": "Some custom info", + "deviceId": "deviceA", + "imsi": "310170845466094", + "supi": "310170845466094" +} \ No newline at end of file diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfoBR.json b/MEC033/MEX/IOTDEV/jsons/DeviceInfoBR.json new file mode 100644 index 0000000..fbba9ff --- /dev/null +++ b/MEC033/MEX/IOTDEV/jsons/DeviceInfoBR.json @@ -0,0 +1,7 @@ +{ + "deviceAuthenticationInfo": "Some custom info", + "deviceId": "deviceId", + "enabled":"false", + "imsi": "310170845466094", + "supi": "310170845466094" +} \ No newline at end of file diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdate.json b/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdate.json new file mode 100644 index 0000000..385caf3 --- /dev/null +++ b/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdate.json @@ -0,0 +1,15 @@ +{ + "deviceAuthenticationInfo": "Some custom info", + "deviceId": "deviceId", + "imsi": "310170845466094", + "supi": "310170845466094", + "requestedIotPlatformId": "iotPlatform", + "TrafficRuleDescriptor": { + "trafficRuleId": "trafficRule123", + "filterType": "FLOW", + "action": "FORWARD_AS_IS", + "trafficFilter": { + "qCI": 5 + } + } +} \ No newline at end of file diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdateBR.json b/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdateBR.json new file mode 100644 index 0000000..aba5992 --- /dev/null +++ b/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdateBR.json @@ -0,0 +1,16 @@ +{ + "deviceAuthenticationInfo": "Some custom info", + "deviceId": "deviceId", + "imsi": "310170845466094", + "supi": "310170845466094", + "enabled":true, + "requestedIotPlatformId": "iotPlatform", + "TrafficRuleDescriptor": { + "trafficRuleId": "trafficRule123", + "filterType": "FLOW", + "action": "FORWARD_AS_IS", + "trafficFilter": { + "qCI": 5 + } + } +} \ No newline at end of file diff --git a/MEC033/MEX/IOTDEV/schemas/DeviceInfo.schema.json b/MEC033/MEX/IOTDEV/schemas/DeviceInfo.schema.json new file mode 100644 index 0000000..3374491 --- /dev/null +++ b/MEC033/MEX/IOTDEV/schemas/DeviceInfo.schema.json @@ -0,0 +1,427 @@ +{ + "type": "object", + "properties": { + "deviceAuthenticationInfo": { + "description": "Information needed for secondary authentication of the IoT device to the data network - see ETSI TS 129 561 [i.4] and ETSI TS 129 061 [i.5] for 5G and LTE procedures, respectively. This attribute is implementation dependent and should be logically linked to the identifiers of the IoT device listed hereafter.", + "type": "string" + }, + "deviceMetadata": { + "description": "Additional information about the IoT device. This attribute is implementation dependent and may be expressed as an array of keyvalue pairs. ", + "type": "array", + "items": { + "description": "Key-value pairs for device metadata", + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "gpsi": { + "description": "GPSI of the IoT device if 5G-enabled (see note 1).", + "type": "string" + }, + "pei": { + "description": "PEI of the IoT device if 5G-enabled (see note 1).", + "type": "string" + }, + "supi": { + "description": "SUPI of the IoT device if 5G-enabled (see note 1).", + "type": "string" + }, + "msisdn": { + "description": "MSISDN of the IoT device if LTE-enabled (see note 1).", + "type": "string" + }, + "imei": { + "description": "IMEI of the IoT device if LTE-enabled (see note 1).", + "type": "string" + }, + "imsi": { + "description": "IMSI of the IoT device if LTE-enabled (see note 1).", + "type": "string" + }, + "iccid": { + "description": "ICCID of the IoT device (see note 1).", + "type": "string" + }, + "deviceId": { + "description": "Human-readable identifier of the IoT device.", + "type": "string" + }, + "requestedMecTrafficRule": { + "description": "MEC traffic rules the IoT device is requested to be associated to (see note 2). The data type definition is as per ETSI GS MEC 010-2 [i.6].", + "type": "array", + "items": { + "title": "TrafficRuleDescriptor", + "type": "object", + "properties": { + "trafficRuleId": { + "description": "Identifies the traffic rule.", + "type": "string" + }, + "filterType": { + "type": "string", + "description": "Definition of filter type: per FLOW or PACKET\n\nIf it is per FLOW, the filter matches upstream (e.g. UE->EPC) packets and downstream (e.g. EPC->UE) packets are handled by the same context.\n", + "enum": [ + "per FLOW", + "per PACKET" + ] + }, + "priority": { + "description": "Priority of this traffic rule within the range 0 to 255. If traffic rule conflicts, the one with higher priority take precedence. See note 1.", + "type": "integer" + }, + "trafficFilter": { + "description": "The filter used to identify specific flow/packets that need to be handled by the MEC host.", + "type": "array", + "items": { + "title": "TrafficFilter", + "type": "object", + "properties": { + "srcAddress": { + "description": "An IP address or a range of IP addresses.\nFor IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses.\nFor IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "type": "array", + "items": { + "type": "string" + } + }, + "dstAddress": { + "description": "An IP address or a range of IP addresses.\nFor IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses.\nFor IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "type": "array", + "items": { + "type": "string" + } + }, + "srcPort": { + "description": "A port or a range of ports.", + "type": "array", + "items": { + "type": "string" + } + }, + "dstPort": { + "description": "A port or a range of ports.", + "type": "array", + "items": { + "type": "string" + } + }, + "protocol": { + "description": "Specify the protocol of the traffic filter.", + "type": "array", + "items": { + "type": "string" + } + }, + "tag": { + "description": "Used for tag based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "uri": { + "description": "An URI label, in application layer, i.e. in HTTP message, is used to filter the traffic.", + "type": "array", + "items": { + "type": "string" + } + }, + "packetLabel": { + "description": "A customized packet label in network layer, as defined by the owner of the MEC platform, is used to filter the traffic.", + "type": "array", + "items": { + "type": "string" + } + }, + "srcTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "tgtTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "srcTunnelPort": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "dstTunnelPort": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "qCI": { + "description": "Used to match all packets that have the same QCI.", + "type": "integer" + }, + "dSCP": { + "description": "Used to match all IPv4 packets that have the same DSCP.", + "type": "integer" + }, + "tC": { + "description": "Used to match all IPv6 packets that have the same TC.", + "type": "integer" + } + } + } + }, + "action": { + "type": "string", + "description": "Identifies the action of the MEC host data plane, when a packet matches the trafficFilter, the example actions include:\nDROP,\nFORWARD_DECAPSULATED,\nFORWARD_ENCAPSULATED,\nPASSTHROUGH,\nDUPLICATE_DECAPSULATED,\nDUPLICATE_ENCAPSULATED ", + "enum": [ + "SEE_DESCRIPTION" + ] + }, + "dstInterface": { + "description'": "Describes the destination interface information. If the action is FORWARD_DECAPSULATED, FORWARD_ENCAPSULATED or PASSTHROUGH, one value shall be provided. If the action is DUPLICATE_DECAPSULATED or DUPLICATE_ENCAPSULATED, two values shall be provided. See note 2. If the action is DROP, no value shall be provided.", + "title": "InterfaceDescriptor", + "type": "object", + "properties": { + "interfaceType": { + "type": "string", + "description": "Type of interface: TUNNEL, MAC, IP, etc.", + "enum": [ + "TUNNEL", + "MAC", + "IP" + ] + }, + "tunnelInfo": { + "description'": "Included only if the destination address type is tunnel.", + "title": "TunnelInfo", + "type": "object", + "properties": { + "tunnelType": { + "type": "string", + "description": "Type of tunnel: GTP-U, GRE, etc.", + "enum": [ + "GTP-U", + "GRE" + ] + }, + "tunnelDstAddress": { + "description": "Destination address of the tunnel.", + "type": "string" + }, + "tunnelSrcAddress": { + "description": "Source address of the tunnel.", + "type": "string" + }, + "tunnelSpecificData": { + "description": "Parameters specific to the tunnel.", + "type": "string" + } + }, + "required": [ + "tunnelType", + "tunnelDstAddress", + "tunnelSrcAddress" + ] + }, + "srcMACAddress": { + "description": "If the interface type is MAC, the source address identifies the MAC address of the interface.", + "type": "string" + }, + "dstMACAddress": { + "description": "If the interface type is MAC, the destination address identifies the MAC address of the destination. Only used for dstInterface.", + "type": "string" + }, + "dstIPAddress": { + "description": "If the interface type is IP, the destination address identifies the IP address of the destination. Only used for dstInterface.", + "type": "string" + } + }, + "required": [ + "interfaceType" + ] + } + }, + "required": [ + "trafficRuleId", + "filterType", + "priority", + "trafficFilter", + "action" + ], + "description": "NOTE 1: Value indicates the priority in descending order, i.e. with 0 as the highest priority and 255 as the lowest\n priority.\nNOTE 2: Some applications (like inline/tap) require two interfaces. The first interface in the case of inline/tap is on the\n client (e.g. UE) side and the second on the core network (e.g. EPC) side. \n" + } + }, + "requestedIotPlatformId": { + "description": "IoT platform to which the IoT device is requested to be associated to (see note 2).", + "type": "string" + }, + "requestedUserTransportId": { + "description": "User transport to which the IoT device is requested to be associated to (see note 2).", + "type": "string" + }, + "deviceSpecificMessageFormats": { + "description": "Format of the messages to be published by the MEC IoTS on the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device.", + "type": "object", + "properties": { + "eventMsgFormat": { + "description'": "Event message format configuration.", + "title": "EventMsg", + "type": "object", + "properties": { + "eventTopic": { + "description": "Topic where the message containing application-specific information should be published. ", + "type": "string" + }, + "selectedSerializer": { + "description'": "Type of serializer to be used for the topic as per ETSI GS MEC 011 [i.2].", + "type": "string", + "description": "The enumeration SerializerType represents types of serializers.", + "enum": [ + "JSON", + "XML", + "PROTOBUF3" + ] + }, + "includeDeviceAddr": { + "description": "Indication whether to include the IP address of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceMetadata": { + "description": "Indication whether to include the metadata about the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includePei": { + "description": "Indication whether to include the PEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeSupi": { + "description": "Indication whether to include the SUPI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImei": { + "description": "Indication whether to include the IMEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImsi": { + "description": "Indication whether to include the IMSI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeIccid": { + "description": "Indication whether to include the ICCID of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceId": { + "description": "Indication whether to include the human-readable identified of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + } + }, + "required": [ + "eventTopic", + "selectedSerializer" + ] + }, + "uplinkMsgFormat": { + "description'": "Uplink message format configuration.", + "title": "UplinkMsg", + "type": "object", + "properties": { + "uplinkTopic": { + "description": "Topic where the message containing the data generated by the IoT device(s) should be published, in order to be consumed by the end IoT application(s).", + "type": "string" + }, + "selectedSerializer": { + "description'": "Type of serializer to be used for the topic as per ETSI GS MEC 011 [i.2].", + "type": "string", + "description": "The enumeration SerializerType represents types of serializers.", + "enum": [ + "JSON", + "XML", + "PROTOBUF3" + ] + }, + "includeDevicePort": { + "description": "Indication whether to include the UDP port of the remote IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceAddr": { + "description": "Indication whether to include the IP address of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceMetadata": { + "description": "Indication whether to include the metadata about the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includePei": { + "description": "Indication whether to include the PEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeSupi": { + "description": "Indication whether to include the SUPI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImei": { + "description": "Indication whether to include the IMEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImsi": { + "description": "Indication whether to include the IMSI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeIccid": { + "description": "Indication whether to include the ICCID of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceId": { + "description": "Indication whether to include the human-readable identified of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + } + }, + "required": [ + "uplinkTopic", + "selectedSerializer" + ] + } + } + }, + "downlinkInfo": { + "description": "Downlink communication configuration of the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device.", + "type": "object", + "properties": { + "downlinkTopic": { + "description": "Topic associated to the IoT device. This topic should be used by an end IoT application to send downlink data to the IoT device.", + "type": "string" + }, + "devicePort": { + "description": "UDP port to be used by the MEC IoTS for the outgoing downlink packets towards the IoT device. In case a default value is used, this attribute is optional.", + "type": "integer" + } + } + }, + "clientCertificate": { + "description": "Client-side SSL/TLS certificate to be used by the MEC IoTS to interact with the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device.", + "type": "string" + }, + "enabled": { + "description": "Indication whether the IoT device has a valid associated traffic rule (TRUE) or not (FALSE). See note 3.", + "type": "boolean" + } + }, + "required": [ + "deviceAuthenticationInfo", + "deviceId", + "enabled" + ], + "description": "NOTE 1: At least one attribute among gpsi, pei, supi, msisdn, imei, imsi, and iccid should be provided. Sufficient security\n measures shall be put in place when any attribute among PEI, SUPI, IMEI, and IMSI is disclosed over the API.\nNOTE 2: Until a valid traffic rule is not provided, the device will not be able to use the IoTS. A valid traffic rule is provided\n by one of the following options:\n • the requestedMecTrafficRule attribute;\n • the requestedIotPlatformId attribute when the IoT platform offers only one user transport;\n • the combination of requestedIotPlatformId and requestedUserTransportId.\nNOTE 3: Enabled is a pseudo-attribute which needs to be maintained by the IoTS based on the presence or not of a valid\n traffic rule associated to the device. It cannot be set directly by the service consumer. \n" +} \ No newline at end of file diff --git a/MEC033/MEX/IOTDEV/schemas/DeviceInfoList.schema.json b/MEC033/MEX/IOTDEV/schemas/DeviceInfoList.schema.json new file mode 100644 index 0000000..4ee52dc --- /dev/null +++ b/MEC033/MEX/IOTDEV/schemas/DeviceInfoList.schema.json @@ -0,0 +1,430 @@ +{ + "type": "array", + "items": { + "type": "object", + "properties": { + "deviceAuthenticationInfo": { + "description": "Information needed for secondary authentication of the IoT device to the data network - see ETSI TS 129 561 [i.4] and ETSI TS 129 061 [i.5] for 5G and LTE procedures, respectively. This attribute is implementation dependent and should be logically linked to the identifiers of the IoT device listed hereafter.", + "type": "string" + }, + "deviceMetadata": { + "description": "Additional information about the IoT device. This attribute is implementation dependent and may be expressed as an array of keyvalue pairs. ", + "type": "array", + "items": { + "description": "Key-value pairs for device metadata", + "type": "object", + "properties": { + "key": { + "type": "string" + }, + "value": { + "type": "string" + } + } + } + }, + "gpsi": { + "description": "GPSI of the IoT device if 5G-enabled (see note 1).", + "type": "string" + }, + "pei": { + "description": "PEI of the IoT device if 5G-enabled (see note 1).", + "type": "string" + }, + "supi": { + "description": "SUPI of the IoT device if 5G-enabled (see note 1).", + "type": "string" + }, + "msisdn": { + "description": "MSISDN of the IoT device if LTE-enabled (see note 1).", + "type": "string" + }, + "imei": { + "description": "IMEI of the IoT device if LTE-enabled (see note 1).", + "type": "string" + }, + "imsi": { + "description": "IMSI of the IoT device if LTE-enabled (see note 1).", + "type": "string" + }, + "iccid": { + "description": "ICCID of the IoT device (see note 1).", + "type": "string" + }, + "deviceId": { + "description": "Human-readable identifier of the IoT device.", + "type": "string" + }, + "requestedMecTrafficRule": { + "description": "MEC traffic rules the IoT device is requested to be associated to (see note 2). The data type definition is as per ETSI GS MEC 010-2 [i.6].", + "type": "array", + "items": { + "title": "TrafficRuleDescriptor", + "type": "object", + "properties": { + "trafficRuleId": { + "description": "Identifies the traffic rule.", + "type": "string" + }, + "filterType": { + "type": "string", + "description": "Definition of filter type: per FLOW or PACKET\n\nIf it is per FLOW, the filter matches upstream (e.g. UE->EPC) packets and downstream (e.g. EPC->UE) packets are handled by the same context.\n", + "enum": [ + "per FLOW", + "per PACKET" + ] + }, + "priority": { + "description": "Priority of this traffic rule within the range 0 to 255. If traffic rule conflicts, the one with higher priority take precedence. See note 1.", + "type": "integer" + }, + "trafficFilter": { + "description": "The filter used to identify specific flow/packets that need to be handled by the MEC host.", + "type": "array", + "items": { + "title": "TrafficFilter", + "type": "object", + "properties": { + "srcAddress": { + "description": "An IP address or a range of IP addresses.\nFor IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses.\nFor IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "type": "array", + "items": { + "type": "string" + } + }, + "dstAddress": { + "description": "An IP address or a range of IP addresses.\nFor IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses.\nFor IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "type": "array", + "items": { + "type": "string" + } + }, + "srcPort": { + "description": "A port or a range of ports.", + "type": "array", + "items": { + "type": "string" + } + }, + "dstPort": { + "description": "A port or a range of ports.", + "type": "array", + "items": { + "type": "string" + } + }, + "protocol": { + "description": "Specify the protocol of the traffic filter.", + "type": "array", + "items": { + "type": "string" + } + }, + "tag": { + "description": "Used for tag based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "uri": { + "description": "An URI label, in application layer, i.e. in HTTP message, is used to filter the traffic.", + "type": "array", + "items": { + "type": "string" + } + }, + "packetLabel": { + "description": "A customized packet label in network layer, as defined by the owner of the MEC platform, is used to filter the traffic.", + "type": "array", + "items": { + "type": "string" + } + }, + "srcTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "tgtTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "srcTunnelPort": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "dstTunnelPort": { + "description": "Used for GTP tunnel based traffic rule.", + "type": "array", + "items": { + "type": "string" + } + }, + "qCI": { + "description": "Used to match all packets that have the same QCI.", + "type": "integer" + }, + "dSCP": { + "description": "Used to match all IPv4 packets that have the same DSCP.", + "type": "integer" + }, + "tC": { + "description": "Used to match all IPv6 packets that have the same TC.", + "type": "integer" + } + } + } + }, + "action": { + "type": "string", + "description": "Identifies the action of the MEC host data plane, when a packet matches the trafficFilter, the example actions include:\nDROP,\nFORWARD_DECAPSULATED,\nFORWARD_ENCAPSULATED,\nPASSTHROUGH,\nDUPLICATE_DECAPSULATED,\nDUPLICATE_ENCAPSULATED ", + "enum": [ + "SEE_DESCRIPTION" + ] + }, + "dstInterface": { + "description'": "Describes the destination interface information. If the action is FORWARD_DECAPSULATED, FORWARD_ENCAPSULATED or PASSTHROUGH, one value shall be provided. If the action is DUPLICATE_DECAPSULATED or DUPLICATE_ENCAPSULATED, two values shall be provided. See note 2. If the action is DROP, no value shall be provided.", + "title": "InterfaceDescriptor", + "type": "object", + "properties": { + "interfaceType": { + "type": "string", + "description": "Type of interface: TUNNEL, MAC, IP, etc.", + "enum": [ + "TUNNEL", + "MAC", + "IP" + ] + }, + "tunnelInfo": { + "description'": "Included only if the destination address type is tunnel.", + "title": "TunnelInfo", + "type": "object", + "properties": { + "tunnelType": { + "type": "string", + "description": "Type of tunnel: GTP-U, GRE, etc.", + "enum": [ + "GTP-U", + "GRE" + ] + }, + "tunnelDstAddress": { + "description": "Destination address of the tunnel.", + "type": "string" + }, + "tunnelSrcAddress": { + "description": "Source address of the tunnel.", + "type": "string" + }, + "tunnelSpecificData": { + "description": "Parameters specific to the tunnel.", + "type": "string" + } + }, + "required": [ + "tunnelType", + "tunnelDstAddress", + "tunnelSrcAddress" + ] + }, + "srcMACAddress": { + "description": "If the interface type is MAC, the source address identifies the MAC address of the interface.", + "type": "string" + }, + "dstMACAddress": { + "description": "If the interface type is MAC, the destination address identifies the MAC address of the destination. Only used for dstInterface.", + "type": "string" + }, + "dstIPAddress": { + "description": "If the interface type is IP, the destination address identifies the IP address of the destination. Only used for dstInterface.", + "type": "string" + } + }, + "required": [ + "interfaceType" + ] + } + }, + "required": [ + "trafficRuleId", + "filterType", + "priority", + "trafficFilter", + "action" + ], + "description": "NOTE 1: Value indicates the priority in descending order, i.e. with 0 as the highest priority and 255 as the lowest\n priority.\nNOTE 2: Some applications (like inline/tap) require two interfaces. The first interface in the case of inline/tap is on the\n client (e.g. UE) side and the second on the core network (e.g. EPC) side. \n" + } + }, + "requestedIotPlatformId": { + "description": "IoT platform to which the IoT device is requested to be associated to (see note 2).", + "type": "string" + }, + "requestedUserTransportId": { + "description": "User transport to which the IoT device is requested to be associated to (see note 2).", + "type": "string" + }, + "deviceSpecificMessageFormats": { + "description": "Format of the messages to be published by the MEC IoTS on the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device.", + "type": "object", + "properties": { + "eventMsgFormat": { + "description'": "Event message format configuration.", + "title": "EventMsg", + "type": "object", + "properties": { + "eventTopic": { + "description": "Topic where the message containing application-specific information should be published. ", + "type": "string" + }, + "selectedSerializer": { + "description'": "Type of serializer to be used for the topic as per ETSI GS MEC 011 [i.2].", + "type": "string", + "description": "The enumeration SerializerType represents types of serializers.", + "enum": [ + "JSON", + "XML", + "PROTOBUF3" + ] + }, + "includeDeviceAddr": { + "description": "Indication whether to include the IP address of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceMetadata": { + "description": "Indication whether to include the metadata about the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includePei": { + "description": "Indication whether to include the PEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeSupi": { + "description": "Indication whether to include the SUPI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImei": { + "description": "Indication whether to include the IMEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImsi": { + "description": "Indication whether to include the IMSI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeIccid": { + "description": "Indication whether to include the ICCID of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceId": { + "description": "Indication whether to include the human-readable identified of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + } + }, + "required": [ + "eventTopic", + "selectedSerializer" + ] + }, + "uplinkMsgFormat": { + "description'": "Uplink message format configuration.", + "title": "UplinkMsg", + "type": "object", + "properties": { + "uplinkTopic": { + "description": "Topic where the message containing the data generated by the IoT device(s) should be published, in order to be consumed by the end IoT application(s).", + "type": "string" + }, + "selectedSerializer": { + "description'": "Type of serializer to be used for the topic as per ETSI GS MEC 011 [i.2].", + "type": "string", + "description": "The enumeration SerializerType represents types of serializers.", + "enum": [ + "JSON", + "XML", + "PROTOBUF3" + ] + }, + "includeDevicePort": { + "description": "Indication whether to include the UDP port of the remote IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceAddr": { + "description": "Indication whether to include the IP address of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceMetadata": { + "description": "Indication whether to include the metadata about the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includePei": { + "description": "Indication whether to include the PEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeSupi": { + "description": "Indication whether to include the SUPI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImei": { + "description": "Indication whether to include the IMEI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeImsi": { + "description": "Indication whether to include the IMSI of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeIccid": { + "description": "Indication whether to include the ICCID of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + }, + "includeDeviceId": { + "description": "Indication whether to include the human-readable identified of the IoT device (TRUE) or not (FALSE).", + "type": "boolean" + } + }, + "required": [ + "uplinkTopic", + "selectedSerializer" + ] + } + } + }, + "downlinkInfo": { + "description": "Downlink communication configuration of the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device.", + "type": "object", + "properties": { + "downlinkTopic": { + "description": "Topic associated to the IoT device. This topic should be used by an end IoT application to send downlink data to the IoT device.", + "type": "string" + }, + "devicePort": { + "description": "UDP port to be used by the MEC IoTS for the outgoing downlink packets towards the IoT device. In case a default value is used, this attribute is optional.", + "type": "integer" + } + } + }, + "clientCertificate": { + "description": "Client-side SSL/TLS certificate to be used by the MEC IoTS to interact with the user transport provided by the associated IoT platform in case the MEC IoTS acts on behalf of the IoT device.", + "type": "string" + }, + "enabled": { + "description": "Indication whether the IoT device has a valid associated traffic rule (TRUE) or not (FALSE). See note 3.", + "type": "boolean" + } + }, + "required": [ + "deviceAuthenticationInfo", + "deviceId", + "enabled" + ], + "description": "NOTE 1: At least one attribute among gpsi, pei, supi, msisdn, imei, imsi, and iccid should be provided. Sufficient security\n measures shall be put in place when any attribute among PEI, SUPI, IMEI, and IMSI is disclosed over the API.\nNOTE 2: Until a valid traffic rule is not provided, the device will not be able to use the IoTS. A valid traffic rule is provided\n by one of the following options:\n • the requestedMecTrafficRule attribute;\n • the requestedIotPlatformId attribute when the IoT platform offers only one user transport;\n • the combination of requestedIotPlatformId and requestedUserTransportId.\nNOTE 3: Enabled is a pseudo-attribute which needs to be maintained by the IoTS based on the presence or not of a valid\n traffic rule associated to the device. It cannot be set directly by the service consumer. \n" + } +} \ No newline at end of file -- GitLab From 5cd1bb755ccf00b4eb0e6f9f2400d1431c281df6 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 16 Nov 2023 15:57:35 +0100 Subject: [PATCH 12/94] Package refactoring. --- MEC033/MEX/{ => IOTS}/IOTDEV/RegisteredDevices.robot | 0 MEC033/MEX/{ => IOTS}/IOTDEV/environment/variables.txt | 0 MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfo.json | 0 MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfoBR.json | 0 MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfoUpdate.json | 0 MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfoUpdateBR.json | 0 MEC033/MEX/{ => IOTS}/IOTDEV/schemas/DeviceInfo.schema.json | 0 MEC033/MEX/{ => IOTS}/IOTDEV/schemas/DeviceInfoList.schema.json | 0 8 files changed, 0 insertions(+), 0 deletions(-) rename MEC033/MEX/{ => IOTS}/IOTDEV/RegisteredDevices.robot (100%) rename MEC033/MEX/{ => IOTS}/IOTDEV/environment/variables.txt (100%) rename MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfo.json (100%) rename MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfoBR.json (100%) rename MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfoUpdate.json (100%) rename MEC033/MEX/{ => IOTS}/IOTDEV/jsons/DeviceInfoUpdateBR.json (100%) rename MEC033/MEX/{ => IOTS}/IOTDEV/schemas/DeviceInfo.schema.json (100%) rename MEC033/MEX/{ => IOTS}/IOTDEV/schemas/DeviceInfoList.schema.json (100%) diff --git a/MEC033/MEX/IOTDEV/RegisteredDevices.robot b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot similarity index 100% rename from MEC033/MEX/IOTDEV/RegisteredDevices.robot rename to MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot diff --git a/MEC033/MEX/IOTDEV/environment/variables.txt b/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt similarity index 100% rename from MEC033/MEX/IOTDEV/environment/variables.txt rename to MEC033/MEX/IOTS/IOTDEV/environment/variables.txt diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfo.json b/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfo.json similarity index 100% rename from MEC033/MEX/IOTDEV/jsons/DeviceInfo.json rename to MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfo.json diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfoBR.json b/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfoBR.json similarity index 100% rename from MEC033/MEX/IOTDEV/jsons/DeviceInfoBR.json rename to MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfoBR.json diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdate.json b/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfoUpdate.json similarity index 100% rename from MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdate.json rename to MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfoUpdate.json diff --git a/MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdateBR.json b/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfoUpdateBR.json similarity index 100% rename from MEC033/MEX/IOTDEV/jsons/DeviceInfoUpdateBR.json rename to MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfoUpdateBR.json diff --git a/MEC033/MEX/IOTDEV/schemas/DeviceInfo.schema.json b/MEC033/MEX/IOTS/IOTDEV/schemas/DeviceInfo.schema.json similarity index 100% rename from MEC033/MEX/IOTDEV/schemas/DeviceInfo.schema.json rename to MEC033/MEX/IOTS/IOTDEV/schemas/DeviceInfo.schema.json diff --git a/MEC033/MEX/IOTDEV/schemas/DeviceInfoList.schema.json b/MEC033/MEX/IOTS/IOTDEV/schemas/DeviceInfoList.schema.json similarity index 100% rename from MEC033/MEX/IOTDEV/schemas/DeviceInfoList.schema.json rename to MEC033/MEX/IOTS/IOTDEV/schemas/DeviceInfoList.schema.json -- GitLab From 7ec8c87e20e1f35c782dec3c8c8b7ad550f49c3d Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 17 Nov 2023 15:52:58 +0100 Subject: [PATCH 13/94] Minor fix --- MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot index efb9309..29cc0fa 100644 --- a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot +++ b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot @@ -3,8 +3,8 @@ Y''[Documentation] robot --outputdir ../../../outputs ./RegisteredDevices.robo *** Settings *** Resource environment/variables.txt -Resource ../../../pics.txt -Resource ../../../GenericKeywords.robot +Resource ../../../../pics.txt +Resource ../../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem -- GitLab From cedb3c253f77f428032006542a39495bedf078f7 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 17 Nov 2023 16:26:53 +0100 Subject: [PATCH 14/94] First implementation of TCs for MEC033 (Registered IOT platforms) --- .../IOTS/IOTPLAT/RegisteredIoTPlatform.robot | 165 +++++++++ .../IOTS/IOTPLAT/environment/variables.txt | 13 + .../IOTS/IOTPLAT/jsons/IoTPlatformInfo.json | 47 +++ .../IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json | 47 +++ .../IOTPLAT/jsons/IoTPlatformInfoUpdate.json | 44 +++ .../schemas/IotPlatformInfo.schema.json | 328 +++++++++++++++++ .../schemas/IotPlatformInfoList.schema.json | 331 ++++++++++++++++++ 7 files changed, 975 insertions(+) create mode 100644 MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot create mode 100644 MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt create mode 100644 MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json create mode 100644 MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json create mode 100644 MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoUpdate.json create mode 100644 MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfo.schema.json create mode 100644 MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfoList.schema.json diff --git a/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot b/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot new file mode 100644 index 0000000..7c9e13b --- /dev/null +++ b/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot @@ -0,0 +1,165 @@ +Y''[Documentation] robot --outputdir ../../../outputs ./RegisteredIoTPlatform.robot +... Test Suite to validate the Registered IOT Platform (IOTPLAT) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../../pics.txt +Resource ../../../../GenericKeywords.robot +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem + +*** Test Cases *** +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_001_OK + [Documentation] + ... Check that the IUT responds with the list of registered IoT platforms + ... when queried by a Service Consumer + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve all registered IOT Platform information + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is IotPlatformInfoList + + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_002_OK + [Documentation] + ... Check that the IUT registers the information of a new IoT platform + ... when requested by a Service Consumer + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.4 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Register IOT Platform information IotPlatformInfo + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is IotPlatformInfo + + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_002_BR + [Documentation] + ... Check that the IUT returns an error + ... when Service Consumer request to register an IoT device with incorrect parameters + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.4 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Register IOT Platform information IotPlatformInfoBR + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_003_OK + [Documentation] + ... Check that the IUT returns the IoT platform information + ... when requested by Service Consumer specifying the IoT platform identifier + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve specific registered IOT Platform information ${IOT_PLATFORM_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is IotPlatformInfo + + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_003_NF + [Documentation] + ... Check that the IUT returns the IoT platform information + ... when requested by Service Consumer specifying the IoT platform identifier + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.1 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Retrieve specific registered IOT Platform information ${NOT_EXISTING_IOT_PLATFORM_ID} + Check HTTP Response Status Code Is 404 + + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_004_OK + [Documentation] + ... Check that the IUT updates the information about a registered IoT platform + ... when requested by a Service Consumer + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.2 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Update registered IOT Platform information ${IOT_PLATFORM_ID} IotPlatformInfoUpdate + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is IotPlatformInfo + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_004_NF + [Documentation] + ... Check that the IUT returns an error + ... when a Service Consumer requests to update a not registered IoT platform + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.2 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Update registered IOT Platform information ${NOT_EXISTING_IOT_PLATFORM_ID} IotPlatformInfoUpdate + Check HTTP Response Status Code Is 404 + + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_005_OK + [Documentation] + ... Check that the IUT deregisters an IoT platform information + ... when requested by a Service Consumer specifying the registered IoT platform identifier + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.5 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Deregister IOT Platform information ${IOT_PLATFORM_ID} + Check HTTP Response Status Code Is 204 + + +TP_MEC_MEC033_MEX_IOTS_IOTPLAT_005_NF + [Documentation] + ... Check that the IUT returns an error + ... when a Service Consumer request to deregister an IoT platform using incorrect parameters + ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.5 + ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + Deregister IOT Platform information ${NOT_EXISTING_IOT_PLATFORM_ID} + Check HTTP Response Status Code Is 404 + + +############################################################################ + +*** Keywords *** +Retrieve all registered IOT Platform information + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve specific registered IOT Platform information + [Arguments] ${registeredPlatformId} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms/${registeredPlatformId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Update registered IOT Platform information + [Arguments] ${registeredPlatformId} ${content} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + PUT ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms/${registeredPlatformId} ${content} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Register IOT Platform information + [Arguments] ${content} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + Deregister IOT Platform information + [Arguments] ${registeredPlatformId} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + DELETE ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms/${registeredPlatformId} + ${output}= Output response + Set Suite Variable ${response} ${output} diff --git a/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt b/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt new file mode 100644 index 0000000..1bc068b --- /dev/null +++ b/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt @@ -0,0 +1,13 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8084 +${response} {} +${TOKEN} asic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} amsi +${apiVersion} v1 + +${IOT_PLATFORM_ID} iotPlatformId +${NOT_EXISTING_IOT_PLATFORM_ID} notExistingIotPlatformId \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json new file mode 100644 index 0000000..23dc2d7 --- /dev/null +++ b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json @@ -0,0 +1,47 @@ +[{ + "iotPlatformId": "cupidatat", + "userTransportInfo": [ + { + "id": "IoTPlatformId", + "name": "nameUserTransportInfo", + "type": "REST_HTTP", + "protocol": "HTTP", + "version": "1.00", + "endpoint": { + "alternative": "amet commodo ad qui cupidatat", + "fqdn": [ + "fqdn" + ], + "addresses": [ + { + "host": "somehost.com", + "port": 1234 + } + ] + }, + "security": { + "oAuth2Info": { + "grantTypes": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_RESOURCE_OWNER" + ], + "tokenEndpoint": "https://IqNooo.tosnwuA0fdU9jlKNmu3uyYD" + } + }, + "implSpecificInfo": { + "downlinkTopics": [ + "downlinkTopic01" + ], + "uplinkTopics": [ + "uplinkTopic01" + ], + "eventTopics": [ + "eventTopics" + ] + }, + "description": "desc" + } + ] +} +] \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json new file mode 100644 index 0000000..095b1d8 --- /dev/null +++ b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json @@ -0,0 +1,47 @@ +{ + "iotPlatformId": "IoTPlatformId", + "enable":true, + "userTransportInfo": [ + { + "id": "IoTPlatformId", + "name": "nameUserTransportInfo", + "type": "REST_HTTP", + "protocol": "HTTP", + "version": "1.00", + "endpoint": { + "alternative": "amet commodo ad qui cupidatat", + "fqdn": [ + "fqdn" + ], + "addresses": [ + { + "host": "somehost.com", + "port": 1234 + } + ] + }, + "security": { + "oAuth2Info": { + "grantTypes": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_RESOURCE_OWNER" + ], + "tokenEndpoint": "https://IqNooo.tosnwuA0fdU9jlKNmu3uyYD" + } + }, + "implSpecificInfo": { + "downlinkTopics": [ + "downlinkTopic01" + ], + "uplinkTopics": [ + "uplinkTopic01" + ], + "eventTopics": [ + "eventTopics" + ] + }, + "description": "desc" + } + ] +} \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoUpdate.json b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoUpdate.json new file mode 100644 index 0000000..c08b9fb --- /dev/null +++ b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoUpdate.json @@ -0,0 +1,44 @@ +{ + "iotPlatformId": "newIoTPlatformId", + "userTransportInfo": [ + { + "id": "IoTPlatformId", + "name": "nameUserTransportInfo", + "type": "REST_HTTP", + "protocol": "HTTP", + "version": "1.00", + "endpoint": { + "alternative": "alternative", + "fqdn": [ + "fqdn" + ], + "addresses": [ + { + "host": "somehost.com", + "port": 1234 + } + ] + }, + "security": { + "oAuth2Info": { + "grantTypes": [ + "OAUTH2_AUTHORIZATION_CODE" + ], + "tokenEndpoint": "https://IqNooo.tosnwuA0fdU9jlKNmu3uyYD" + } + }, + "implSpecificInfo": { + "downlinkTopics": [ + "downlinkTopic01" + ], + "uplinkTopics": [ + "uplinkTopic01" + ], + "eventTopics": [ + "eventTopics" + ] + }, + "description": "desc" + } + ] +} \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfo.schema.json b/MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfo.schema.json new file mode 100644 index 0000000..93828b0 --- /dev/null +++ b/MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfo.schema.json @@ -0,0 +1,328 @@ +{ + "title": "IotPlatformInfo", + "type": "object", + "properties": { + "iotPlatformId": { + "description": "Identifier of the IoT platform.", + "type": "string" + }, + "userTransportInfo": { + "description": "Information about the user transport(s) provided by the IoT platform.", + "type": "array", + "minItems": 1, + "items": { + "title": "MBTransportInfo", + "type": "object", + "properties": { + "id": { + "description": "The identifier of this transport as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "name": { + "description": "The name of this transport as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "description": { + "description": "Human-readable description of this transport as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "type": { + "description'": "Type of the transport. The attribute shall be set to \"MB_TOPIC_BASED.\"", + "type": "string", + "enum": [ + "REST_HTTP", + "MB_TOPIC_BASED", + "MB_ROUTING", + "MB_PUBSUB", + "RPC", + "RPC_STREAMING", + "WEBSOCKET" + ], + "description": "Enumeration representing types of transports." + }, + "protocol": { + "description": "The name of the protocol used. Being the transport of MB_TOPIC_BASED type, this attribute should be typically set to \"MQTT\" or \"AMQP.\"", + "type": "string" + }, + "version": { + "description": "The version of the protocol used as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "endpoint": { + "description'": "Information about the endpoint to access the transport as per ETSI GS MEC 011 [i.2].", + "title": "EndPointInfo", + "type": "object", + "properties": { + "uris": { + "description": "Entry point information of the service as string, formatted according to URI syntax (see IETF RFC 3986 [8]). Shall be used for REST APIs. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "fqdn": { + "description": "Fully Qualified Domain Name of the service. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "addresses": { + "type": "array", + "items": { + "description": "Entry point information of the service as one or more pairs of IP address and port. See note.", + "type": "object", + "properties": { + "host": { + "description": "Host portion of the address.", + "type": "string" + }, + "port": { + "description": "Port portion of the address.", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ] + } + }, + "alternative": { + "description": "Entry point information of the service in a format defined by an implementation, or in an external specification. See note.", + "type": "string" + } + }, + "description": "NOTE: Exactly one of \"uris\", \"fqdn\", \"addresses\" or \"alternative\" shall be present. \n" + }, + "security": { + "description": "Information about the security used by the transport as per ETSI GS MEC 011 [i.2].", + "type": "object", + "properties": { + "oAuth2Info": { + "description": "Parameters related to use of OAuth 2.0. Shall be present in case OAuth 2.0 (see IETF RFC 6749 [13]) is supported to secure the provision of the service over the transport.", + "type": "object", + "properties": { + "grantTypes": { + "type": "array", + "description": "List of supported OAuth 2.0 grant types.\nEach entry shall be one of the following permitted values:\n- OAUTH2_AUTHORIZATION_CODE: Authorization code grant type\n- OAUTH2_IMPLICIT_GRANT: Implicit grant type\n- OAUTH2_RESOURCE_OWNER: Resource owner password credentials grant type\n- OAUTH2_CLIENT_CREDENTIALS: Client credentials grant type\nOnly the value \"OAUTH2_CLIENT_CREDENTIALS\" is supported in the present document.\n", + "items": { + "type": "string", + "enum": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_IMPLICIT_GRANT", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_CLIENT_CREDENTIALS" + ] + } + }, + "tokenEndpoint": { + "description": "The token endpoint. Shall be present unless the grant type is OAUTH2_IMPLICIT_GRANT.", + "type": "string", + "format": "uri" + } + }, + "required": [ + "grantTypes" + ] + }, + "extensions": { + "description": "Extensions for alternative transport mechanisms. These extensions depend on the actual transport and are out of scope of the present document. For instance, such extensions may be used to signal the necessary parameters for the client to use TLS-based authorization defined for alternative transports (see ETSI GS MEC 009 [5] for more information).\n", + "type": "string" + } + } + }, + "implSpecificInfo": { + "description": "Additional implementation specific details of the transport.", + "type": "object", + "properties": { + "eventTopics": { + "description": "Topics used to publish events related to the established session between the IoT device(s) and the end IoT application(s) on the user transport.", + "type": "array", + "minItems": 0, + "items": { + "type": "string" + } + }, + "uplinkTopics": { + "description": "Topics used to publish data generated by the IoT device(s) on the user transport, in order to be consumed by the end IoT application(s).", + "type": "array", + "items": { + "type": "string" + } + }, + "downlinkTopics": { + "description": "Topics used to publish data generated by the IoT applications(s) on the user transport, in order to be consumed by the end IoT device(s).", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "type", + "protocol", + "version", + "endpoint", + "security", + "implSpecificInfo" + ] + } + }, + "customServicesTransportInfo": { + "description": "Transport enabling access to vendor-specific services provided by the IoT platform. The data type definition is as per ETSI GS MEC 011 [i.2].", + "type": "array", + "minItems": 0, + "items": { + "title": "TransportInfo", + "type": "object", + "properties": { + "id": { + "description": "The identifier of this transport.", + "type": "string" + }, + "name": { + "description": "The name of this transport.", + "type": "string" + }, + "description": { + "description": "Human-readable description of this transport.", + "type": "string" + }, + "type": { + "description'": "Type of the transport.", + "type": "string", + "enum": [ + "REST_HTTP", + "MB_TOPIC_BASED", + "MB_ROUTING", + "MB_PUBSUB", + "RPC", + "RPC_STREAMING", + "WEBSOCKET" + ], + "description": "Enumeration representing types of transports." + }, + "protocol": { + "description": "The name of the protocol used. Shall be set to \"HTTP\" for a REST API.", + "type": "string" + }, + "version": { + "description": "The version of the protocol used.", + "type": "string" + }, + "endpoint": { + "description'": "Information about the endpoint to access the transport.", + "title": "EndPointInfo", + "type": "object", + "properties": { + "uris": { + "description": "Entry point information of the service as string, formatted according to URI syntax (see IETF RFC 3986 [8]). Shall be used for REST APIs. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "fqdn": { + "description": "Fully Qualified Domain Name of the service. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "addresses": { + "type": "array", + "items": { + "description": "Entry point information of the service as one or more pairs of IP address and port. See note.", + "type": "object", + "properties": { + "host": { + "description": "Host portion of the address.", + "type": "string" + }, + "port": { + "description": "Port portion of the address.", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ] + } + }, + "alternative": { + "description": "Entry point information of the service in a format defined by an implementation, or in an external specification. See note.", + "type": "string" + } + }, + "description": "NOTE: Exactly one of \"uris\", \"fqdn\", \"addresses\" or \"alternative\" shall be present. \n" + }, + "security": { + "description'": "Information about the security used by the transport.", + "type": "object", + "properties": { + "oAuth2Info": { + "description": "Parameters related to use of OAuth 2.0. Shall be present in case OAuth 2.0 (see IETF RFC 6749 [13]) is supported to secure the provision of the service over the transport.", + "type": "object", + "properties": { + "grantTypes": { + "type": "array", + "description": "List of supported OAuth 2.0 grant types.\nEach entry shall be one of the following permitted values:\n- OAUTH2_AUTHORIZATION_CODE: Authorization code grant type\n- OAUTH2_IMPLICIT_GRANT: Implicit grant type\n- OAUTH2_RESOURCE_OWNER: Resource owner password credentials grant type\n- OAUTH2_CLIENT_CREDENTIALS: Client credentials grant type\nOnly the value \"OAUTH2_CLIENT_CREDENTIALS\" is supported in the present document.\n", + "items": { + "type": "string", + "enum": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_IMPLICIT_GRANT", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_CLIENT_CREDENTIALS" + ] + } + }, + "tokenEndpoint": { + "description": "The token endpoint. Shall be present unless the grant type is OAUTH2_IMPLICIT_GRANT.", + "type": "string", + "format": "uri" + } + }, + "required": [ + "grantTypes" + ] + }, + "extensions": { + "description": "Extensions for alternative transport mechanisms. These extensions depend on the actual transport and are out of scope of the present document. For instance, such extensions may be used to signal the necessary parameters for the client to use TLS-based authorization defined for alternative transports (see ETSI GS MEC 009 [5] for more information).\n", + "type": "string" + } + } + }, + "implSpecificInfo": { + "description": "Additional implementation specific details of the transport.", + "type": "string" + } + }, + "required": [ + "id", + "name", + "type", + "protocol", + "version", + "endpoint", + "security" + ] + } + }, + "enabled": { + "description": "Indication whether the IoT platform is capable of providing user transports and vendor-specific services (TRUE) or not (FALSE).", + "type": "boolean" + } + }, + "required": [ + "iotPlatformId", + "userTransportInfo", + "enabled" + ] + } \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfoList.schema.json b/MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfoList.schema.json new file mode 100644 index 0000000..f92e6bb --- /dev/null +++ b/MEC033/MEX/IOTS/IOTPLAT/schemas/IotPlatformInfoList.schema.json @@ -0,0 +1,331 @@ +{ + "type": "array", + "items": { + "title": "IotPlatformInfo", + "type": "object", + "properties": { + "iotPlatformId": { + "description": "Identifier of the IoT platform.", + "type": "string" + }, + "userTransportInfo": { + "description": "Information about the user transport(s) provided by the IoT platform.", + "type": "array", + "minItems": 1, + "items": { + "title": "MBTransportInfo", + "type": "object", + "properties": { + "id": { + "description": "The identifier of this transport as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "name": { + "description": "The name of this transport as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "description": { + "description": "Human-readable description of this transport as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "type": { + "description'": "Type of the transport. The attribute shall be set to \"MB_TOPIC_BASED.\"", + "type": "string", + "enum": [ + "REST_HTTP", + "MB_TOPIC_BASED", + "MB_ROUTING", + "MB_PUBSUB", + "RPC", + "RPC_STREAMING", + "WEBSOCKET" + ], + "description": "Enumeration representing types of transports." + }, + "protocol": { + "description": "The name of the protocol used. Being the transport of MB_TOPIC_BASED type, this attribute should be typically set to \"MQTT\" or \"AMQP.\"", + "type": "string" + }, + "version": { + "description": "The version of the protocol used as per ETSI GS MEC 011 [i.2].", + "type": "string" + }, + "endpoint": { + "description'": "Information about the endpoint to access the transport as per ETSI GS MEC 011 [i.2].", + "title": "EndPointInfo", + "type": "object", + "properties": { + "uris": { + "description": "Entry point information of the service as string, formatted according to URI syntax (see IETF RFC 3986 [8]). Shall be used for REST APIs. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "fqdn": { + "description": "Fully Qualified Domain Name of the service. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "addresses": { + "type": "array", + "items": { + "description": "Entry point information of the service as one or more pairs of IP address and port. See note.", + "type": "object", + "properties": { + "host": { + "description": "Host portion of the address.", + "type": "string" + }, + "port": { + "description": "Port portion of the address.", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ] + } + }, + "alternative": { + "description": "Entry point information of the service in a format defined by an implementation, or in an external specification. See note.", + "type": "string" + } + }, + "description": "NOTE: Exactly one of \"uris\", \"fqdn\", \"addresses\" or \"alternative\" shall be present. \n" + }, + "security": { + "description": "Information about the security used by the transport as per ETSI GS MEC 011 [i.2].", + "type": "object", + "properties": { + "oAuth2Info": { + "description": "Parameters related to use of OAuth 2.0. Shall be present in case OAuth 2.0 (see IETF RFC 6749 [13]) is supported to secure the provision of the service over the transport.", + "type": "object", + "properties": { + "grantTypes": { + "type": "array", + "description": "List of supported OAuth 2.0 grant types.\nEach entry shall be one of the following permitted values:\n- OAUTH2_AUTHORIZATION_CODE: Authorization code grant type\n- OAUTH2_IMPLICIT_GRANT: Implicit grant type\n- OAUTH2_RESOURCE_OWNER: Resource owner password credentials grant type\n- OAUTH2_CLIENT_CREDENTIALS: Client credentials grant type\nOnly the value \"OAUTH2_CLIENT_CREDENTIALS\" is supported in the present document.\n", + "items": { + "type": "string", + "enum": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_IMPLICIT_GRANT", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_CLIENT_CREDENTIALS" + ] + } + }, + "tokenEndpoint": { + "description": "The token endpoint. Shall be present unless the grant type is OAUTH2_IMPLICIT_GRANT.", + "type": "string", + "format": "uri" + } + }, + "required": [ + "grantTypes" + ] + }, + "extensions": { + "description": "Extensions for alternative transport mechanisms. These extensions depend on the actual transport and are out of scope of the present document. For instance, such extensions may be used to signal the necessary parameters for the client to use TLS-based authorization defined for alternative transports (see ETSI GS MEC 009 [5] for more information).\n", + "type": "string" + } + } + }, + "implSpecificInfo": { + "description": "Additional implementation specific details of the transport.", + "type": "object", + "properties": { + "eventTopics": { + "description": "Topics used to publish events related to the established session between the IoT device(s) and the end IoT application(s) on the user transport.", + "type": "array", + "minItems": 0, + "items": { + "type": "string" + } + }, + "uplinkTopics": { + "description": "Topics used to publish data generated by the IoT device(s) on the user transport, in order to be consumed by the end IoT application(s).", + "type": "array", + "items": { + "type": "string" + } + }, + "downlinkTopics": { + "description": "Topics used to publish data generated by the IoT applications(s) on the user transport, in order to be consumed by the end IoT device(s).", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "required": [ + "id", + "name", + "type", + "protocol", + "version", + "endpoint", + "security", + "implSpecificInfo" + ] + } + }, + "customServicesTransportInfo": { + "description": "Transport enabling access to vendor-specific services provided by the IoT platform. The data type definition is as per ETSI GS MEC 011 [i.2].", + "type": "array", + "minItems": 0, + "items": { + "title": "TransportInfo", + "type": "object", + "properties": { + "id": { + "description": "The identifier of this transport.", + "type": "string" + }, + "name": { + "description": "The name of this transport.", + "type": "string" + }, + "description": { + "description": "Human-readable description of this transport.", + "type": "string" + }, + "type": { + "description'": "Type of the transport.", + "type": "string", + "enum": [ + "REST_HTTP", + "MB_TOPIC_BASED", + "MB_ROUTING", + "MB_PUBSUB", + "RPC", + "RPC_STREAMING", + "WEBSOCKET" + ], + "description": "Enumeration representing types of transports." + }, + "protocol": { + "description": "The name of the protocol used. Shall be set to \"HTTP\" for a REST API.", + "type": "string" + }, + "version": { + "description": "The version of the protocol used.", + "type": "string" + }, + "endpoint": { + "description'": "Information about the endpoint to access the transport.", + "title": "EndPointInfo", + "type": "object", + "properties": { + "uris": { + "description": "Entry point information of the service as string, formatted according to URI syntax (see IETF RFC 3986 [8]). Shall be used for REST APIs. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "fqdn": { + "description": "Fully Qualified Domain Name of the service. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "addresses": { + "type": "array", + "items": { + "description": "Entry point information of the service as one or more pairs of IP address and port. See note.", + "type": "object", + "properties": { + "host": { + "description": "Host portion of the address.", + "type": "string" + }, + "port": { + "description": "Port portion of the address.", + "type": "integer" + } + }, + "required": [ + "host", + "port" + ] + } + }, + "alternative": { + "description": "Entry point information of the service in a format defined by an implementation, or in an external specification. See note.", + "type": "string" + } + }, + "description": "NOTE: Exactly one of \"uris\", \"fqdn\", \"addresses\" or \"alternative\" shall be present. \n" + }, + "security": { + "description'": "Information about the security used by the transport.", + "type": "object", + "properties": { + "oAuth2Info": { + "description": "Parameters related to use of OAuth 2.0. Shall be present in case OAuth 2.0 (see IETF RFC 6749 [13]) is supported to secure the provision of the service over the transport.", + "type": "object", + "properties": { + "grantTypes": { + "type": "array", + "description": "List of supported OAuth 2.0 grant types.\nEach entry shall be one of the following permitted values:\n- OAUTH2_AUTHORIZATION_CODE: Authorization code grant type\n- OAUTH2_IMPLICIT_GRANT: Implicit grant type\n- OAUTH2_RESOURCE_OWNER: Resource owner password credentials grant type\n- OAUTH2_CLIENT_CREDENTIALS: Client credentials grant type\nOnly the value \"OAUTH2_CLIENT_CREDENTIALS\" is supported in the present document.\n", + "items": { + "type": "string", + "enum": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_IMPLICIT_GRANT", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_CLIENT_CREDENTIALS" + ] + } + }, + "tokenEndpoint": { + "description": "The token endpoint. Shall be present unless the grant type is OAUTH2_IMPLICIT_GRANT.", + "type": "string", + "format": "uri" + } + }, + "required": [ + "grantTypes" + ] + }, + "extensions": { + "description": "Extensions for alternative transport mechanisms. These extensions depend on the actual transport and are out of scope of the present document. For instance, such extensions may be used to signal the necessary parameters for the client to use TLS-based authorization defined for alternative transports (see ETSI GS MEC 009 [5] for more information).\n", + "type": "string" + } + } + }, + "implSpecificInfo": { + "description": "Additional implementation specific details of the transport.", + "type": "string" + } + }, + "required": [ + "id", + "name", + "type", + "protocol", + "version", + "endpoint", + "security" + ] + } + }, + "enabled": { + "description": "Indication whether the IoT platform is capable of providing user transports and vendor-specific services (TRUE) or not (FALSE).", + "type": "boolean" + } + }, + "required": [ + "iotPlatformId", + "userTransportInfo", + "enabled" + ] + } +} \ No newline at end of file -- GitLab From 2dd0cf99c079fd1492fadce5dfeabb0d8b6b4717 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 17 Nov 2023 18:50:09 +0100 Subject: [PATCH 15/94] Implemented some of the TCs with filters for MEC040 specification --- MEC040/SRV/FederationEnablement.robot | 207 ++++++++++++++++++ MEC040/SRV/environment/variables.txt | 33 +++ MEC040/SRV/jsons/SystemInfo.json | 5 + MEC040/SRV/schemas/SystemInfo.schema.json | 24 ++ MEC040/SRV/schemas/SystemInfoList.schema.json | 27 +++ 5 files changed, 296 insertions(+) create mode 100644 MEC040/SRV/FederationEnablement.robot create mode 100644 MEC040/SRV/environment/variables.txt create mode 100644 MEC040/SRV/jsons/SystemInfo.json create mode 100644 MEC040/SRV/schemas/SystemInfo.schema.json create mode 100644 MEC040/SRV/schemas/SystemInfoList.schema.json diff --git a/MEC040/SRV/FederationEnablement.robot b/MEC040/SRV/FederationEnablement.robot new file mode 100644 index 0000000..c897a25 --- /dev/null +++ b/MEC040/SRV/FederationEnablement.robot @@ -0,0 +1,207 @@ +Y''[Documentation] robot --outputdir ../../../outputs ./FederationEnablement.robot +... Test Suite to validate the Federation Enablement API (FED) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../pics.txt +Resource ../../GenericKeywords.robot +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem + +*** Test Cases *** +TP_MEC_MEC040_SRV_MEF_001_OK + [Documentation] + ... Check that the IUT responds with a list of all available systemInfo + ... when requested by a MEC Orchestrator - No query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + + +TP_MEC_MEC040_SRV_MEF_001_OK_02 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - SystemId query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${SYSTEM_ID_QUERY_PARAM} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + FOR ${element} IN @{response['body']} + Should Be Equal As Strings ${element}[systemId] ${EXPECTED_SYSTEM_ID} + END + +TP_MEC_MEC040_SRV_MEF_001_OK_03 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - Multiple SystemId query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${MULTIPLE_SYSTEM_ID_QUERY_PARAM} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + + FOR ${element} IN @{response['body']} + IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' + ${item} Set Variable ${TRUE} + END + IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID2}''' + ${item2} Set Variable ${TRUE} + END + END + Should Be True ${item} + Should Be True ${item2} + +TP_MEC_MEC040_SRV_MEF_001_OK_04 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - Empty SystemId query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + +TP_MEC_MEC040_SRV_MEF_001_OK_05 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - SystemName query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${SYSTEM_NAME_QUERY_PARAM} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + FOR ${element} IN @{response['body']} + Should Be Equal As Strings ${element}[systemName] ${EXPECTED_SYSTEM_NAME} + END + +TP_MEC_MEC040_SRV_MEF_001_OK_06 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - Multiple SystemName query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${MUTIPLE_SYSTEM_NAME_QUERY_PARAM} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + FOR ${element} IN @{response['body']} + IF '''${element}[systemName]''' == '''${EXPECTED_SYSTEM_NAME}''' + ${item} Set Variable ${TRUE} + END + IF '''${element}[systemName]''' == '''${EXPECTED_SYSTEM_NAME2}''' + ${item2} Set Variable ${TRUE} + END + END + Should Be True ${item} + Should Be True ${item2} + + +TP_MEC_MEC040_SRV_MEF_001_OK_07 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - Empty SystemName query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${EMPTY_SYSTEM_NAME_QUERY_PARAM} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + FOR ${element} IN @{response['body']} + Should Be Equal As Strings ${element}[systemName] ${EMPTY} + END + +TP_MEC_MEC040_SRV_MEF_001_OK_08 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - systemProvider query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${SYSTEM_PROVIDER_QUERY_PARAM} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + FOR ${element} IN @{response['body']} + Should Be Equal As Strings ${element}[systemProvider] ${EXPECTED_SYSTEM_PROVIDER} + END + +TP_MEC_MEC040_SRV_MEF_001_OK_09 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - Multiple systemProvider query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${MUTIPLE_SYS_PROVIDER_QUERY_PAR} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + FOR ${element} IN @{response['body']} + IF '''${element}[systemProvider]''' == '''${EXPECTED_SYSTEM_PROVIDER}''' + ${item} Set Variable ${TRUE} + END + IF '''${element}[systemProvider]''' == '''${EXPECTED_SYSTEM_PROVIDER2}''' + ${item2} Set Variable ${TRUE} + END + END + Should Be True ${item} + Should Be True ${item2} + + +TP_MEC_MEC040_SRV_MEF_001_OK_10 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - Empty systemProvider query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${EMPTY_SYSTEM_PROVIDER_QUERY_PARAM} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + FOR ${element} IN @{response['body']} + Should Be Equal As Strings ${element}[systemProvider] ${EMPTY} + END + +TP_MEC_MEC040_SRV_MEF_001_OK_11 + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator - Multiple query parameters + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${FILTER_ON_SYSTEM_ID_AND_NAME} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfoList + ${counterSystemId} Set Variable ${0} + ${counterSystemName} Set Variable ${0} + FOR ${element} IN @{response['body']} + IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' + ${counterSystemId}= set variable ${counterSystemId+1} + END + IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' + ${counterSystemName}= set variable ${counterSystemName+1} + END + ${counterSystemName}= set variable ${counterSystemName+1} + END + Should Be True '${counterSystemName}'>'0' + Should Be True '${counterSystemId}'>'0' + +############################################################################ + +*** Keywords *** +Retrieve all system info resources + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retrieve all system info resources with query params + [Arguments] ${query_params} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info?${query_params} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC040/SRV/environment/variables.txt b/MEC040/SRV/environment/variables.txt new file mode 100644 index 0000000..8c8cc9e --- /dev/null +++ b/MEC040/SRV/environment/variables.txt @@ -0,0 +1,33 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8084 +${response} {} +${TOKEN} YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} fed-enablement +${apiVersion} v1 + +${EXPECTED_SYSTEM_ID} SYSTEM_ID +${EXPECTED_SYSTEM_ID2} SYSTEM_ID2 +${SYSTEM_ID_QUERY_PARAM} systemId=${EXPECTED_SYSTEM_ID} +${MULTIPLE_SYSTEM_ID_QUERY_PARAM} systemId=${EXPECTED_SYSTEM_ID},${EXPECTED_SYSTEM_ID2} +${EMPTY_SYSTEM_ID_QUERY_PARAM} systemId= + +${EXPECTED_SYSTEM_NAME} SYSTEM_NAME +${EXPECTED_SYSTEM_NAME2} SYSTEM_NAME2 +${SYSTEM_NAME_QUERY_PARAM} systemName=${EXPECTED_SYSTEM_NAME} +${MUTIPLE_SYSTEM_NAME_QUERY_PARAM} systemName=${EXPECTED_SYSTEM_NAME},${EXPECTED_SYSTEM_NAME2} +${EMPTY_SYSTEM_NAME_QUERY_PARAM} systemName= + +${EXPECTED_SYSTEM_PROVIDER} SYSTEM_PROVIDER +${EXPECTED_SYSTEM_PROVIDER2} SYSTEM_PROVIDER2 +${SYSTEM_PROVIDER_QUERY_PARAM} systemProvider=${EXPECTED_SYSTEM_PROVIDER} +${MUTIPLE_SYS_PROVIDER_QUERY_PAR} systemProvider=${EXPECTED_SYSTEM_PROVIDER},${EXPECTED_SYSTEM_PROVIDER2} +${EMPTY_SYSTEM_PROVIDER_QUERY_PARAM} systemProvider= + + +${FILTER_ON_SYSTEM_ID_AND_NAME} systemId=${EXPECTED_SYSTEM_ID},systemName=${EXPECTED_SYSTEM_NAME} + + diff --git a/MEC040/SRV/jsons/SystemInfo.json b/MEC040/SRV/jsons/SystemInfo.json new file mode 100644 index 0000000..ce8b0d4 --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfo.json @@ -0,0 +1,5 @@ +{ + "systemId": "systemId", + "systemName": "systemNamea", + "systemProvider": "systemProvider" +} \ No newline at end of file diff --git a/MEC040/SRV/schemas/SystemInfo.schema.json b/MEC040/SRV/schemas/SystemInfo.schema.json new file mode 100644 index 0000000..7ded9c9 --- /dev/null +++ b/MEC040/SRV/schemas/SystemInfo.schema.json @@ -0,0 +1,24 @@ +{ + "title": "SystemInfo", + "type": "object", + "description": "This type represents an information provided by the MEC orchestrator as a part of the \"Registration of MEC system to the federation\"", + "properties": { + "systemId": { + "description": "Identifier of the MEC system. For the uniqueness of the identifier across the federated MEC systems, UUID format [i.9] is recommended. Shall be absent in POST request, and present otherwise.", + "type": "string" + }, + "systemName": { + "description": "The name of the MEC system. This is how the MEC system identifies other MEC systems", + "type": "string" + }, + "systemProvider": { + "description": "Provider of the MEC system.", + "type": "string" + } + }, + "required": [ + "systemId", + "systemName", + "systemProvider" + ] +} \ No newline at end of file diff --git a/MEC040/SRV/schemas/SystemInfoList.schema.json b/MEC040/SRV/schemas/SystemInfoList.schema.json new file mode 100644 index 0000000..e237cec --- /dev/null +++ b/MEC040/SRV/schemas/SystemInfoList.schema.json @@ -0,0 +1,27 @@ +{ + "type": "array", + "items": { + "title": "SystemInfo", + "type": "object", + "description": "This type represents an information provided by the MEC orchestrator as a part of the \"Registration of MEC system to the federation\"", + "properties": { + "systemId": { + "description": "Identifier of the MEC system. For the uniqueness of the identifier across the federated MEC systems, UUID format [i.9] is recommended. Shall be absent in POST request, and present otherwise.", + "type": "string" + }, + "systemName": { + "description": "The name of the MEC system. This is how the MEC system identifies other MEC systems", + "type": "string" + }, + "systemProvider": { + "description": "Provider of the MEC system.", + "type": "string" + } + }, + "required": [ + "systemId", + "systemName", + "systemProvider" + ] + } +} \ No newline at end of file -- GitLab From 332e9c56955c93212b010930f42236f062a8e22d Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 20 Nov 2023 11:59:10 +0100 Subject: [PATCH 16/94] MEC040 early implementation of TCs. Some refinements needed --- MEC040/SRV/FederationEnablement.robot | 228 ++++++++++++++++++++++- MEC040/SRV/environment/variables.txt | 10 +- MEC040/SRV/jsons/SystemInfo.json | 1 - MEC040/SRV/jsons/SystemInfoBR.json | 5 + MEC040/SRV/jsons/SystemInfoUpdate.json | 3 + MEC040/SRV/jsons/SystemInfoUpdate2.json | 3 + MEC040/SRV/jsons/SystemInfoUpdate3.json | 4 + MEC040/SRV/jsons/SystemInfoUpdateBR.json | 2 + 8 files changed, 251 insertions(+), 5 deletions(-) create mode 100644 MEC040/SRV/jsons/SystemInfoBR.json create mode 100644 MEC040/SRV/jsons/SystemInfoUpdate.json create mode 100644 MEC040/SRV/jsons/SystemInfoUpdate2.json create mode 100644 MEC040/SRV/jsons/SystemInfoUpdate3.json create mode 100644 MEC040/SRV/jsons/SystemInfoUpdateBR.json diff --git a/MEC040/SRV/FederationEnablement.robot b/MEC040/SRV/FederationEnablement.robot index c897a25..d59c956 100644 --- a/MEC040/SRV/FederationEnablement.robot +++ b/MEC040/SRV/FederationEnablement.robot @@ -181,7 +181,172 @@ TP_MEC_MEC040_SRV_MEF_001_OK_11 Should Be True '${counterSystemName}'>'0' Should Be True '${counterSystemId}'>'0' +TP_MEC_MEC040_SRV_MEF_001_NF_01 + [Documentation] + ... Check that the IUT responds with an error + ... when selection is not applicable - SystemId + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${NOT_EXT_SYSTEM_ID_QUERY_PARAM} + Check HTTP Response Status Code Is 404 + +TP_MEC_MEC040_SRV_MEF_001_NF_02 + [Documentation] + ... Check that the IUT responds with an error + ... when selection is not applicable - SystemName + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${NOT_EXT_SYSTEM_NAME_QUERY_PARAM} + Check HTTP Response Status Code Is 404 + + +TP_MEC_MEC040_SRV_MEF_001_NF_03 + [Documentation] + ... Check that the IUT responds with an error + ... when selection is not applicable - SystemProvider + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources with query params ${NOT_EXT_SYS_PROVIDER_QUERY_PARAM} + Check HTTP Response Status Code Is 404 + +##TODO double check +TP_MEC_MEC040_SRV_MEF_001_BR + [Documentation] + ... Check that the IUT responds with an error when request is malformed + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve all system info resources wrong URL + #Check HTTP Response Status Code Is 400 + +TP_MEC_MEC040_SRV_MEF_002_OK + [Documentation] + ... Check that the IUT creates a new systemInfo when requested by a MEC Orchestrator + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.4, clause 5.2.2.1.1 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Register System Info SystemInfo + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is SystemInfo + + +TP_MEC_MEC040_SRV_MEF_002_BR_01 + [Documentation] + ... Check that the IUT responds with an error on creating an existing systemInfo + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.4, clause 5.2.2.1.1 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Register System Info SystemInfoBR + Check HTTP Response Status Code Is 400 + + +##TODO double check +TP_MEC_MEC040_SRV_MEF_002_BR_02 + [Documentation] + ... Check that the IUT responds with an error on providing inconsistent data + ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.4, clause 5.2.2.1.1 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Register System Info SystemInfoBR + Check HTTP Response Status Code Is 400 + +TP_MEC_MEC040_SRV_MEF_003_OK + [Documentation] + ... Check that the IUT responds with a selection of all available systemInfo + ... when requested by a MEC Orchestrator + ... ETSI GS MEC 040 V3.1.1, clause 7.4.3.1, clause 5.2.2.1.1 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve specific system info resource ${EXPECTED_SYSTEM_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SystemInfo + +TP_MEC_MEC040_SRV_MEF_003_NF + [Documentation] + ... Check that the IUT responds with an error + ... when it receives a request for returning a systemInfo referred with a wrong systemId + ... ETSI GS MEC 040 V3.1.1, clause 7.4.3.1, clause 5.2.2.1.1 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve specific system info resource ${NOT_EXISTING_SYSTEM_ID} + Check HTTP Response Status Code Is 404 + +##TODO double check +TP_MEC_MEC040_SRV_MEF_003_BR + [Documentation] + ... Check that the IUT responds with an error + ... when it receives a request for returning a systemInfo referred with a wrong systemId + ... ETSI GS MEC 040 V3.1.1, clause 7.4.3.1, clause 5.2.2.1.1 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Retrieve specific system info resource ${NOT_EXISTING_SYSTEM_ID} + #Check HTTP Response Status Code Is 400 + +TP_MEC_MEC040_SRV_MEF_004_OK_01 + [Documentation] + ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdate + Check HTTP Response Status Code Is 200 + Should Be Equal As Strings ${response['body']['systemProvider']} ${EXPECTED_NEW_SYSTEM_PROVIDER} + +TP_MEC_MEC040_SRV_MEF_004_OK_02 + [Documentation] + ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdate2 + Check HTTP Response Status Code Is 200 + Should Be Equal As Strings ${response['body']['systemName']} ${EXPECTED_NEW_SYSTEM_NAME} + +TP_MEC_MEC040_SRV_MEF_004_OK_02 + [Documentation] + ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdate3 + Check HTTP Response Status Code Is 200 + Should Be Equal As Strings ${response['body']['systemName']} ${EXPECTED_NEW_SYSTEM_NAME} + Should Be Equal As Strings ${response['body']['systemProvider']} ${EXPECTED_NEW_SYSTEM_PROVIDER} + +TP_MEC_MEC040_SRV_MEF_004_NF + [Documentation] + ... Check that the IUT responds with an error when requested to update an unknown systemInfo + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Update specific system info resource ${NOT_EXISTING_SYSTEM_ID} SystemInfoUpdate3 + Check HTTP Response Status Code Is 404 + +##TODO double check the corresponding TP +#TP_MEC_MEC040_SRV_MEF_004_BR_01 + #[Documentation] + #... Check that the IUT responds with an error when requested to update with an inconsistant URI + #... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 + #... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + #Update specific system info resource ${NOT_EXISTING_SYSTEM_ID} SystemInfoUpdate3 + #Check HTTP Response Status Code Is 400 + +TP_MEC_MEC040_SRV_MEF_004_BR_02 + [Documentation] + ... Check that the IUT responds with an error when requested to update with no data provided + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdateBR + Check HTTP Response Status Code Is 400 + +TP_MEC_MEC040_SRV_MEF_005_OK + [Documentation] + ... Check that the IUT responds with an error when requested to delete an unknown systemInfo + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.5, clause 5.2.2.1.3 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Remove specific system info resource ${EXPECTED_SYSTEM_ID} + Check HTTP Response Status Code Is 204 + +TP_MEC_MEC040_SRV_MEF_005_NF + [Documentation] + ... Check that the IUT responds with an error when requested to delete an unknown systemInfo + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.5, clause 5.2.2.1.3 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Remove specific system info resource ${NOT_EXISTING_SYSTEM_ID} + Check HTTP Response Status Code Is 404 ############################################################################ + + + *** Keywords *** Retrieve all system info resources @@ -194,7 +359,6 @@ Retrieve all system info resources ${output}= Output response Set Suite Variable ${response} ${output} - Retrieve all system info resources with query params [Arguments] ${query_params} Should Be True ${PIC_MEC_PLAT} == 1 @@ -204,4 +368,64 @@ Retrieve all system info resources with query params Set Headers {"Authorization":"${TOKEN}"} GET ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info?${query_params} ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file + Set Suite Variable ${response} ${output} + + Retrieve specific system info resource + [Arguments] ${SYSTEM_INFO_ID} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info/${SYSTEM_INFO_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Register System Info + [Arguments] ${content} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Update specific system info resource + [Arguments] ${systemId} ${content} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + PATCH ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info/${systemId} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove specific system info resource + [Arguments] ${systemId} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + DELETE ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info/${systemId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retrieve all system info resources wrong URL + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/v10/fed_resources/system_info + ${output}= Output response + Set Suite Variable ${response} ${output} + \ No newline at end of file diff --git a/MEC040/SRV/environment/variables.txt b/MEC040/SRV/environment/variables.txt index 8c8cc9e..f445ea3 100644 --- a/MEC040/SRV/environment/variables.txt +++ b/MEC040/SRV/environment/variables.txt @@ -10,24 +10,30 @@ ${apiName} fed-enablement ${apiVersion} v1 ${EXPECTED_SYSTEM_ID} SYSTEM_ID +${NOT_EXISTING_SYSTEM_ID} NOT_EXISTING_SYS_ID ${EXPECTED_SYSTEM_ID2} SYSTEM_ID2 ${SYSTEM_ID_QUERY_PARAM} systemId=${EXPECTED_SYSTEM_ID} +${NOT_EXT_SYSTEM_ID_QUERY_PARAM} systemId=${NOT_EXISTING_SYSTEM_ID} ${MULTIPLE_SYSTEM_ID_QUERY_PARAM} systemId=${EXPECTED_SYSTEM_ID},${EXPECTED_SYSTEM_ID2} ${EMPTY_SYSTEM_ID_QUERY_PARAM} systemId= ${EXPECTED_SYSTEM_NAME} SYSTEM_NAME ${EXPECTED_SYSTEM_NAME2} SYSTEM_NAME2 +${NOT_EXISTING_SYS_NAME} NOT_EXISTING_SYS_NAME ${SYSTEM_NAME_QUERY_PARAM} systemName=${EXPECTED_SYSTEM_NAME} +${NOT_EXT_SYSTEM_NAME_QUERY_PARAM} systemName=${NOT_EXISTING_SYS_NAME} ${MUTIPLE_SYSTEM_NAME_QUERY_PARAM} systemName=${EXPECTED_SYSTEM_NAME},${EXPECTED_SYSTEM_NAME2} ${EMPTY_SYSTEM_NAME_QUERY_PARAM} systemName= ${EXPECTED_SYSTEM_PROVIDER} SYSTEM_PROVIDER ${EXPECTED_SYSTEM_PROVIDER2} SYSTEM_PROVIDER2 +${NOT_EXT_SYS_PROVIDER} NOT_EXISTING_SYS_PROVIDER ${SYSTEM_PROVIDER_QUERY_PARAM} systemProvider=${EXPECTED_SYSTEM_PROVIDER} +${NOT_EXT_SYS_PROVIDER_QUERY_PARAM} systemProvider=${NOT_EXT_SYS_PROVIDER} ${MUTIPLE_SYS_PROVIDER_QUERY_PAR} systemProvider=${EXPECTED_SYSTEM_PROVIDER},${EXPECTED_SYSTEM_PROVIDER2} ${EMPTY_SYSTEM_PROVIDER_QUERY_PARAM} systemProvider= ${FILTER_ON_SYSTEM_ID_AND_NAME} systemId=${EXPECTED_SYSTEM_ID},systemName=${EXPECTED_SYSTEM_NAME} - - +${EXPECTED_NEW_SYSTEM_PROVIDER} SYSTEM_NEW_ENDPOINT_1 +${EXPECTED_NEW_SYSTEM_NAME} SYSTEM_NEW_NAME_1 diff --git a/MEC040/SRV/jsons/SystemInfo.json b/MEC040/SRV/jsons/SystemInfo.json index ce8b0d4..6abc01c 100644 --- a/MEC040/SRV/jsons/SystemInfo.json +++ b/MEC040/SRV/jsons/SystemInfo.json @@ -1,5 +1,4 @@ { - "systemId": "systemId", "systemName": "systemNamea", "systemProvider": "systemProvider" } \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfoBR.json b/MEC040/SRV/jsons/SystemInfoBR.json new file mode 100644 index 0000000..fff9ecc --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfoBR.json @@ -0,0 +1,5 @@ +{ + "systemId":"SYSTEM_ID", + "systemName": "systemNamea", + "systemProvider": "systemProvider" +} \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfoUpdate.json b/MEC040/SRV/jsons/SystemInfoUpdate.json new file mode 100644 index 0000000..20ba866 --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfoUpdate.json @@ -0,0 +1,3 @@ +{ + "endpoint": "SYSTEM_NEW_ENDPOINT_1" +} \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfoUpdate2.json b/MEC040/SRV/jsons/SystemInfoUpdate2.json new file mode 100644 index 0000000..5ce2c24 --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfoUpdate2.json @@ -0,0 +1,3 @@ +{ + "systemName": "SYSTEM_NEW_NAME_1" +} \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfoUpdate3.json b/MEC040/SRV/jsons/SystemInfoUpdate3.json new file mode 100644 index 0000000..d986693 --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfoUpdate3.json @@ -0,0 +1,4 @@ +{ + "endpoint": "SYSTEM_NEW_ENDPOINT_1", + "systemName": "SYSTEM_NEW_NAME_1" +} \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfoUpdateBR.json b/MEC040/SRV/jsons/SystemInfoUpdateBR.json new file mode 100644 index 0000000..7a73a41 --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfoUpdateBR.json @@ -0,0 +1,2 @@ +{ +} \ No newline at end of file -- GitLab From cc865801d733ca108aacb8603504abe404edda93 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 27 Nov 2023 09:29:37 +0100 Subject: [PATCH 17/94] Updated MEC033 TCs for registered IoT Device: added test setup, test teardown and made some fixes. --- GenericKeywords.robot | 8 + .../MEX/IOTS/IOTDEV/RegisteredDevices.robot | 152 ++++++++++++++---- .../MEX/IOTS/IOTDEV/environment/variables.txt | 9 +- MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfo.json | 2 +- 4 files changed, 131 insertions(+), 40 deletions(-) diff --git a/GenericKeywords.robot b/GenericKeywords.robot index 79c2209..9a14519 100644 --- a/GenericKeywords.robot +++ b/GenericKeywords.robot @@ -63,4 +63,12 @@ Check HTTP Response Contain Header with value Check HTTP Response Header Contains ${HEADER_TOCHECK} Should Be Equal As Strings ${value} ${response['headers']['Content-Type']} +Get value entry from JSON file + [Arguments] ${filename} ${key} + ${file}= Catenate SEPARATOR= jsons/ ${filename} .json + ${body}= Get File ${file} + ${data}= Evaluate ${body} + ${value_key} Set Variable ${data}[${key}] + [return] ${value_key} + \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot index 29cc0fa..d4e99a1 100644 --- a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot +++ b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot @@ -8,151 +8,234 @@ Resource ../../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem + +Test Setup Test Setup ${DEVICE_ID_PLACEHOLDER} DeviceInfo ${NO_ACTION} +Test Teardown Test TearDown ${DEVICE_ID_PLACEHOLDER} DeviceInfo ${NO_ACTION} + + *** Test Cases *** -TP_MEC_MEC033_IOTS_IOTDEV_001_OK_01 +TC_MEC_MEC033_IOTS_IOTDEV_001_OK_01 [Documentation] ... Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId Retrieve all registered IOT Device information Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DeviceInfoList FOR ${element} IN @{response['body']} - Log ${element} - Should Be Equal As Strings ${element}[imsi] ${EXPECTED_IMSI} - Should Be Equal As Strings ${element}[supi] ${EXPECTED_SUPI} Should Be Equal As Strings ${element}[enabled] ${False} - END + END + [TearDown] Test TearDown ${DEVICE_ID_VALUE} ${None} ${REMOVE_ACTION} -TP_MEC_MEC033_IOTS_IOTDEV_001_OK_02 +TC_MEC_MEC033_IOTS_IOTDEV_001_OK_02 [Documentation] ... "Check that the IUT responds with the list of registered IoT devices when queried using a filter by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId Retrieve all registered IOT Device information with filter or query param ${FILTER_ON_ENABLE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DeviceInfoList - FOR ${element} IN @{response['body']} + + FOR ${element} IN @{response['body']} Should Be Equal As Strings ${element}[enabled] ${False} END + [TearDown] Test TearDown ${DEVICE_ID_VALUE} ${None} ${REMOVE_ACTION} -TP_MEC_MEC033_IOTS_IOTDEV_001_OK_03 +TC_MEC_MEC033_IOTS_IOTDEV_001_OK_03 [Documentation] ... "Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering one field ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId Retrieve all registered IOT Device information with filter or query param ${DEVICE_ID_FIELDS} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DeviceInfoList + [TearDown] Test TearDown ${DEVICE_ID_VALUE} ${None} ${REMOVE_ACTION} -TP_MEC_MEC033_IOTS_IOTDEV_001_OK_04 +TC_MEC_MEC033_IOTS_IOTDEV_001_OK_04 [Documentation] ... "Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer filtering one field ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId Retrieve all registered IOT Device information with filter or query param ${FIELDS_AND_FILTER} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DeviceInfoList + FOR ${element} IN @{response['body']} + Should Be Equal As Strings ${element}[enabled] ${False} + END + [TearDown] Test TearDown ${DEVICE_ID_VALUE} ${None} ${REMOVE_ACTION} -TP_MEC_MEC033_IOTS_IOTDEV_001_OK_02 +TC_MEC_MEC033_IOTS_IOTDEV_002_OK [Documentation] ... Check that the IUT registers the information of an IoT device when requested by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.4 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + Register IOT Device information DeviceInfo Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is DeviceInfo - ${file}= Catenate SEPARATOR= jsons/ DeviceInfo .json - ${body}= Get File ${file} - ${json}= evaluate json.loads('''${body}''') json - Should Be Equal As Strings ${response['body']['deviceId']} ${json}[deviceId] - Should Be Equal As Strings ${response['body']['imsi']} ${json}[imsi] - Should Be Equal As Strings ${response['body']['supi']} ${json}[supi] - Should Be Equal As Strings ${response['body']['enabled']} ${False} + + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId + ${IMSI} Get value entry from JSON file DeviceInfo imsi + ${SUPI} Get value entry from JSON file DeviceInfo supi + Should Be Equal As Strings ${response['body']['deviceId']} ${DEVICE_ID_VALUE} + Should Be Equal As Strings ${response['body']['imsi']} ${IMSI} + Should Be Equal As Strings ${response['body']['supi']} ${SUPI} + Should Be Equal As Strings ${response['body']['enabled']} ${False} + [TearDown] Test TearDown ${DEVICE_ID_VALUE} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC033_IOTS_IOTDEV_001_BR_02 +TC_MEC_MEC033_IOTS_IOTDEV_002_BR [Documentation] ... Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.4 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + ## No setup needed Register IOT Device information DeviceInfoBR Check HTTP Response Status Code Is 400 - + ## No Teardown needed: the IUT has not stored information because of BR error. -TP_MEC_MEC033_IOTS_IOTDEV_003_OK +TC_MEC_MEC033_IOTS_IOTDEV_003_OK [Documentation] ... Check that the IUT returns the IoT device information when requested by Service Consumer specifying the device identifier ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf - Retrieve specific registered IOT Device information ${DEVICE_ID} + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId + Retrieve specific registered IOT Device information ${DEVICE_ID_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DeviceInfo - Should Be Equal As Strings ${response['body']['deviceId']} ${DEVICE_ID} + Should Be Equal As Strings ${response['body']['deviceId']} ${DEVICE_ID_VALUE} + [TearDown] Test TearDown ${DEVICE_ID_VALUE} ${None} ${REMOVE_ACTION} -TP_MEC_MEC033_IOTS_IOTDEV_003_NF +TC_MEC_MEC033_IOTS_IOTDEV_003_NF [Documentation] ... Check that the IUT returns error when Service Consumer request to retrieve a not registered IoT device ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_DEVICE_ID} ${None} ${REMOVE_ACTION} Retrieve specific registered IOT Device information ${NOT_EXISTING_DEVICE_ID} Check HTTP Response Status Code Is 404 + ## No Teardown needed: the IUT has not stored information because of NF error. -TP_MEC_MEC033_IOTS_IOTDEV_004_OK +TC_MEC_MEC033_IOTS_IOTDEV_004_OK [Documentation] ... Check that the IUT returns an error when Service Consumer request to register an IoT device with incorrect parameters ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.2 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf - Update IOT Device information ${DEVICE_ID} DeviceInfoUpdate + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId + ${TRAFFIC_RULE_DES} Get value entry from JSON file DeviceInfoUpdate TrafficRuleDescriptor + + Update IOT Device information ${DEVICE_ID_VALUE} DeviceInfoUpdate + Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DeviceInfo + Should Be Equal As Strings ${response['body']['TrafficRuleDescriptor']['trafficRuleId']} ${TRAFFIC_RULE_DES['trafficRuleId']} + Should Be Equal As Strings ${response['body']['TrafficRuleDescriptor']['filterType']} ${TRAFFIC_RULE_DES['filterType']} + Should Be Equal As Strings ${response['body']['TrafficRuleDescriptor']['action']} ${TRAFFIC_RULE_DES['action']} + Should Be Equal As Strings ${response['body']['TrafficRuleDescriptor']['trafficFilter']} ${TRAFFIC_RULE_DES['trafficFilter']} + Should Be Equal As Strings ${response['body']['TrafficRuleDescriptor']['enabled']} ${True} + [TearDown] Test TearDown ${DEVICE_ID_VALUE} DeviceInfo ${REMOVE_ACTION} + -TP_MEC_MEC033_IOTS_IOTDEV_004_NF +TC_MEC_MEC033_IOTS_IOTDEV_004_NF [Documentation] ... Check that the IUT returns an error when a Service Consumer requests to update a not registered IoT device ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.2 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_DEVICE_ID} ${None} ${REMOVE_ACTION} Update IOT Device information ${NOT_EXISTING_DEVICE_ID} DeviceInfoUpdate Check HTTP Response Status Code Is 404 + ##No teardown - -TP_MEC_MEC033_IOTS_IOTDEV_004_BR +TC_MEC_MEC033_IOTS_IOTDEV_004_BR [Documentation] ... Check that the IUT returns an error when a Service Consumer requests to update an existing IoT device with incorrect parameters ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.2 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_DEVICE_ID} ${None} ${REMOVE_ACTION} Update IOT Device information ${NOT_EXISTING_DEVICE_ID} DeviceInfoUpdateBR Check HTTP Response Status Code Is 400 + ## No Teardown needed: the IUT has not stored information because of NF error. - -TP_MEC_MEC033_IOTS_IOTDEV_005_OK +TC_MEC_MEC033_IOTS_IOTDEV_005_OK [Documentation] ... Check that the IUT deregisters an IoT device information when requested by a Service Consumer specifying the IoT registered device identifier ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.5 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf - Deregister IOT Device information ${DEVICE_ID} + [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + ${DEVICE_ID_VALUE} Get value entry from JSON file DeviceInfo deviceId + Deregister IOT Device information ${DEVICE_ID_VALUE} Check HTTP Response Status Code Is 204 + ## No Teardown needed -TP_MEC_MEC033_IOTS_IOTDEV_005_NF +TC_MEC_MEC033_IOTS_IOTDEV_005_NF [Documentation] ... "Check that the IUT returns an error when a Service Consumer requests to deregisters an IoT device using incorrect parameters ... ETSI GS MEC 033 V3.1.1, clause 7.4.3.5 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_DEVICE_ID} ${None} ${REMOVE_ACTION} Deregister IOT Device information ${NOT_EXISTING_DEVICE_ID} Check HTTP Response Status Code Is 404 + ##No tearDown needed ############################################################################ -############################################################################ -############################################################################ + *** Keywords *** + + +Test Setup + [Arguments] ${deviceId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/registered_devices ${body} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/registered_devices/${deviceId} + END + +Test Teardown + [Arguments] ${deviceId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/registered_devices ${body} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/registered_devices/${deviceId} + END + + Retrieve all registered IOT Device information Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -198,7 +281,6 @@ Register IOT Device information ${output}= Output response Set Suite Variable ${response} ${output} - Update IOT Device information [Arguments] ${deviceId} ${content} Should Be True ${PIC_MEC_PLAT} == 1 diff --git a/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt b/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt index 35e88fe..2c04369 100644 --- a/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt +++ b/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt @@ -8,13 +8,14 @@ ${TOKEN} asic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} amsi ${apiVersion} v1 -${EXPECTED_IMSI} 310170845466094 -${EXPECTED_SUPI} 310170845466094 -${EXPECTED_ENABLED} false + +${REGISTER_ACTION} REGISTER +${REMOVE_ACTION} REMOVE +${NO_ACTION} NO_ACTION ${FILTER_ON_ENABLE} (eq,enabled,false) ${DEVICE_ID_FIELDS} fields=deviceId ${FIELDS_AND_FILTER} fields=deviceId&filter=(eq,enabled,false) -${DEVICE_ID} deviceId +${DEVICE_ID_PLACEHOLDER} PLACEHOLDER_DEVICEID ${NOT_EXISTING_DEVICE_ID} notExistingDeviceId \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfo.json b/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfo.json index 842d5e0..b49b9ff 100644 --- a/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfo.json +++ b/MEC033/MEX/IOTS/IOTDEV/jsons/DeviceInfo.json @@ -1,6 +1,6 @@ { "deviceAuthenticationInfo": "Some custom info", - "deviceId": "deviceA", + "deviceId": "deviceId", "imsi": "310170845466094", "supi": "310170845466094" } \ No newline at end of file -- GitLab From 7a3014efd39883034650518fd01bfc7c19c6ec5a Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 30 Nov 2023 09:29:12 +0100 Subject: [PATCH 18/94] Minor fix on MEC033 IoT device TCs. --- MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot | 4 +--- MEC033/MEX/IOTS/IOTDEV/environment/variables.txt | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot index d4e99a1..675c445 100644 --- a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot +++ b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot @@ -81,7 +81,7 @@ TC_MEC_MEC033_IOTS_IOTDEV_002_OK ... Check that the IUT registers the information of an IoT device when requested by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.4 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf - [Setup] Test Setup ${None} DeviceInfo ${REGISTER_ACTION} + [Setup] Test Setup ${DEVICE_ID} ${None} ${REMOVE_ACTION} Register IOT Device information DeviceInfo Check HTTP Response Status Code Is 201 @@ -201,8 +201,6 @@ TC_MEC_MEC033_IOTS_IOTDEV_005_NF *** Keywords *** - - Test Setup [Arguments] ${deviceId} ${content} ${action} Set Headers {"Accept":"application/json"} diff --git a/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt b/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt index 2c04369..ad96cdf 100644 --- a/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt +++ b/MEC033/MEX/IOTS/IOTDEV/environment/variables.txt @@ -15,7 +15,7 @@ ${NO_ACTION} NO_ACTION ${FILTER_ON_ENABLE} (eq,enabled,false) ${DEVICE_ID_FIELDS} fields=deviceId - +${DEVICE_ID} deviceId ${FIELDS_AND_FILTER} fields=deviceId&filter=(eq,enabled,false) ${DEVICE_ID_PLACEHOLDER} PLACEHOLDER_DEVICEID ${NOT_EXISTING_DEVICE_ID} notExistingDeviceId \ No newline at end of file -- GitLab From c93fc816a5810b77df388613c7034c1162bf4036 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 30 Nov 2023 09:30:27 +0100 Subject: [PATCH 19/94] Added Test setups and test teardowns to the IoT Platform MEC033 TCs --- .../IOTS/IOTPLAT/RegisteredIoTPlatform.robot | 96 +++++++++++++++++-- .../IOTS/IOTPLAT/environment/variables.txt | 6 ++ .../IOTS/IOTPLAT/jsons/IoTPlatformInfo.json | 7 +- .../IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json | 45 +-------- 4 files changed, 96 insertions(+), 58 deletions(-) diff --git a/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot b/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot index 7c9e13b..ccf8e13 100644 --- a/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot +++ b/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot @@ -8,30 +8,50 @@ Resource ../../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem +Test Setup Test Setup ${PLATFORM_ID_PLACEHOLDER} IoTPlatformInfo ${NO_ACTION} +Test Teardown Test TearDown ${PLATFORM_ID_PLACEHOLDER} IoTPlatformInfo ${NO_ACTION} + + *** Test Cases *** -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_001_OK +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_001_OK [Documentation] ... Check that the IUT responds with the list of registered IoT platforms ... when queried by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${None} IoTPlatformInfo ${REGISTER_ACTION} + ${IOT_PLATFORM_ID_VALUE} Get value entry from JSON file IoTPlatformInfo iotPlatformId + LOG ${IOT_PLATFORM_ID_VALUE} Retrieve all registered IOT Platform information Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is IotPlatformInfoList + [Teardown] Test TearDown ${IOT_PLATFORM_ID_VALUE} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_002_OK +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_002_OK [Documentation] ... Check that the IUT registers the information of a new IoT platform ... when requested by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.4 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + + [Setup] Test Setup ${IOT_PLATFORM_ID} ${None} ${REMOVE_ACTION} + ${IOT_PLATFORM_ID_VALUE} Get value entry from JSON file IoTPlatformInfo iotPlatformId + ${USER_TRANSPORT_INFO_VALUE} Get value entry from JSON file IoTPlatformInfo userTransportInfo + Register IOT Platform information IotPlatformInfo Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is IotPlatformInfo + Check HTTP Response Header Contains Location + + Should Be Equal As Strings ${response['body']['iotPlatformId']} ${IOT_PLATFORM_ID} + Should Be Equal As Strings ${response['body']['userTransportInfo']} ${USER_TRANSPORT_INFO_VALUE} + [Teardown] Test TearDown ${IOT_PLATFORM_ID_VALUE} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_002_BR +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_002_BR [Documentation] ... Check that the IUT returns an error ... when Service Consumer request to register an IoT device with incorrect parameters @@ -41,43 +61,62 @@ TP_MEC_MEC033_MEX_IOTS_IOTPLAT_002_BR Check HTTP Response Status Code Is 400 -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_003_OK +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_OK [Documentation] ... Check that the IUT returns the IoT platform information ... when requested by Service Consumer specifying the IoT platform identifier ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf - Retrieve specific registered IOT Platform information ${IOT_PLATFORM_ID} + [Setup] Test Setup ${None} IoTPlatformInfo ${REGISTER_ACTION} + ${IOT_PLATFORM_ID_VALUE} Get value entry from JSON file IoTPlatformInfo iotPlatformId + ${USER_TRANSPORT_INFO_VALUE} Get value entry from JSON file IoTPlatformInfo userTransportInfo + + Retrieve specific registered IOT Platform information ${IOT_PLATFORM_ID_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is IotPlatformInfo + Should Be Equal As Strings ${response['body']['iotPlatformId']} ${IOT_PLATFORM_ID_VALUE} + Should Be Equal As Strings ${response['body']['userTransportInfo']} ${USER_TRANSPORT_INFO_VALUE} + [Teardown] Test TearDown ${IOT_PLATFORM_ID} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_003_NF +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_003_NF [Documentation] ... Check that the IUT returns the IoT platform information ... when requested by Service Consumer specifying the IoT platform identifier ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_IOT_PLATFORM_ID} ${None} ${NOT_EXISTING_IOT_PLATFORM_ID} Retrieve specific registered IOT Platform information ${NOT_EXISTING_IOT_PLATFORM_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_004_OK +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_OK [Documentation] ... Check that the IUT updates the information about a registered IoT platform ... when requested by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.2 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf - Update registered IOT Platform information ${IOT_PLATFORM_ID} IotPlatformInfoUpdate + [Setup] Test Setup ${None} IoTPlatformInfo ${REGISTER_ACTION} + ${IOT_PLATFORM_ID_VALUE} Get value entry from JSON file IotPlatformInfoUpdate iotPlatformId + ${USER_TRANSPORT_INFO_VALUE} Get value entry from JSON file IotPlatformInfoUpdate userTransportInfo + + Update registered IOT Platform information ${IOT_PLATFORM_ID_VALUE} IotPlatformInfoUpdate Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is IotPlatformInfo + Should Be Equal As Strings ${response['body']['iotPlatformId']} ${IOT_PLATFORM_ID_VALUE} + Should Be Equal As Strings ${response['body']['userTransportInfo']} ${USER_TRANSPORT_INFO_VALUE} + + [Teardown] Test TearDown ${IOT_PLATFORM_ID_VALUE} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_004_NF +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_004_NF [Documentation] ... Check that the IUT returns an error ... when a Service Consumer requests to update a not registered IoT platform ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.2 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_IOT_PLATFORM_ID} ${None} ${NOT_EXISTING_IOT_PLATFORM_ID} Update registered IOT Platform information ${NOT_EXISTING_IOT_PLATFORM_ID} IotPlatformInfoUpdate Check HTTP Response Status Code Is 404 @@ -88,16 +127,20 @@ TP_MEC_MEC033_MEX_IOTS_IOTPLAT_005_OK ... when requested by a Service Consumer specifying the registered IoT platform identifier ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.5 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${None} IoTPlatformInfo ${REGISTER_ACTION} + ${IOT_PLATFORM_ID_VALUE} Get value entry from JSON file IoTPlatformInfo iotPlatformId Deregister IOT Platform information ${IOT_PLATFORM_ID} Check HTTP Response Status Code Is 204 + [Teardown] Test TearDown ${IOT_PLATFORM_ID_VALUE} ${None} ${REMOVE_ACTION} -TP_MEC_MEC033_MEX_IOTS_IOTPLAT_005_NF +TC_MEC_MEC033_MEX_IOTS_IOTPLAT_005_NF [Documentation] ... Check that the IUT returns an error ... when a Service Consumer request to deregister an IoT platform using incorrect parameters ... ETSI GS MEC 033 V3.1.1, clause 7.5.3.5 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_IOT_PLATFORM_ID} ${None} ${NOT_EXISTING_IOT_PLATFORM_ID} Deregister IOT Platform information ${NOT_EXISTING_IOT_PLATFORM_ID} Check HTTP Response Status Code Is 404 @@ -105,6 +148,39 @@ TP_MEC_MEC033_MEX_IOTS_IOTPLAT_005_NF ############################################################################ *** Keywords *** +Test Setup + [Arguments] ${iotPlatformId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms ${body} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms/${iotPlatformId} + END + +Test Teardown + [Arguments] ${iotPlatformId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms ${body} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/registered_iot_platforms/${iotPlatformId} + END + + Retrieve all registered IOT Platform information Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 diff --git a/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt b/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt index 1bc068b..f6e22dd 100644 --- a/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt +++ b/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt @@ -9,5 +9,11 @@ ${apiRoot} ${apiName} amsi ${apiVersion} v1 +${REGISTER_ACTION} REGISTER +${REMOVE_ACTION} REMOVE +${NO_ACTION} NO_ACTION + + +${PLATFORM_ID_PLACEHOLDER} PLATFORM_ID_PLACEHOLDER ${IOT_PLATFORM_ID} iotPlatformId ${NOT_EXISTING_IOT_PLATFORM_ID} notExistingIotPlatformId \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json index 23dc2d7..2b1298e 100644 --- a/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json +++ b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfo.json @@ -1,5 +1,5 @@ -[{ - "iotPlatformId": "cupidatat", +{ + "iotPlatformId": "iotPlatformId", "userTransportInfo": [ { "id": "IoTPlatformId", @@ -43,5 +43,4 @@ "description": "desc" } ] -} -] \ No newline at end of file +} \ No newline at end of file diff --git a/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json index 095b1d8..960a3dc 100644 --- a/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json +++ b/MEC033/MEX/IOTS/IOTPLAT/jsons/IoTPlatformInfoBR.json @@ -1,47 +1,4 @@ { "iotPlatformId": "IoTPlatformId", - "enable":true, - "userTransportInfo": [ - { - "id": "IoTPlatformId", - "name": "nameUserTransportInfo", - "type": "REST_HTTP", - "protocol": "HTTP", - "version": "1.00", - "endpoint": { - "alternative": "amet commodo ad qui cupidatat", - "fqdn": [ - "fqdn" - ], - "addresses": [ - { - "host": "somehost.com", - "port": 1234 - } - ] - }, - "security": { - "oAuth2Info": { - "grantTypes": [ - "OAUTH2_AUTHORIZATION_CODE", - "OAUTH2_RESOURCE_OWNER", - "OAUTH2_RESOURCE_OWNER" - ], - "tokenEndpoint": "https://IqNooo.tosnwuA0fdU9jlKNmu3uyYD" - } - }, - "implSpecificInfo": { - "downlinkTopics": [ - "downlinkTopic01" - ], - "uplinkTopics": [ - "uplinkTopic01" - ], - "eventTopics": [ - "eventTopics" - ] - }, - "description": "desc" - } - ] + "enabled":true } \ No newline at end of file -- GitLab From a2de6b79b6d8dea81f0b61d29b81ca33f245d1bd Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Dec 2023 16:19:44 +0100 Subject: [PATCH 20/94] MEC040 TCs: added test setups and test teardowns --- MEC040/SRV/FederationEnablement.robot | 229 +++++++++++++----- MEC040/SRV/environment/variables.txt | 7 + MEC040/SRV/jsons/SystemInfo.json | 2 +- MEC040/SRV/jsons/SystemInfo2.json | 4 + MEC040/SRV/jsons/SystemInfo3.json | 4 + .../jsons/SystemInfoEmptySystemProvider.json | 4 + 6 files changed, 188 insertions(+), 62 deletions(-) create mode 100644 MEC040/SRV/jsons/SystemInfo2.json create mode 100644 MEC040/SRV/jsons/SystemInfo3.json create mode 100644 MEC040/SRV/jsons/SystemInfoEmptySystemProvider.json diff --git a/MEC040/SRV/FederationEnablement.robot b/MEC040/SRV/FederationEnablement.robot index d59c956..ba14e44 100644 --- a/MEC040/SRV/FederationEnablement.robot +++ b/MEC040/SRV/FederationEnablement.robot @@ -1,6 +1,5 @@ Y''[Documentation] robot --outputdir ../../../outputs ./FederationEnablement.robot ... Test Suite to validate the Federation Enablement API (FED) operations. - *** Settings *** Resource environment/variables.txt Resource ../../pics.txt @@ -8,24 +7,33 @@ Resource ../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem + +Test Setup Test Setup ${SYSTEM_ID_PLACEHOLDER} SystemInfo ${NO_ACTION} +Test Teardown Test TearDown ${SYSTEM_ID_PLACEHOLDER} SystemInfo ${NO_ACTION} + + *** Test Cases *** -TP_MEC_MEC040_SRV_MEF_001_OK +TC_MEC_MEC040_SRV_MEF_001_OK [Documentation] ... Check that the IUT responds with a list of all available systemInfo ... when requested by a MEC Orchestrator - No query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} Retrieve all system info resources Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_OK_02 +TC_MEC_MEC040_SRV_MEF_001_OK_02 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - SystemId query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + #SystemId cannot be set by the requestor, so Test setup and test tear down are not applicable Retrieve all system info resources with query params ${SYSTEM_ID_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList @@ -33,137 +41,169 @@ TP_MEC_MEC040_SRV_MEF_001_OK_02 Should Be Equal As Strings ${element}[systemId] ${EXPECTED_SYSTEM_ID} END -TP_MEC_MEC040_SRV_MEF_001_OK_03 +TC_MEC_MEC040_SRV_MEF_001_OK_03 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - Multiple SystemId query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + #SystemId cannot be set by the requestor, so Test setup and test tear down are not applicable Retrieve all system info resources with query params ${MULTIPLE_SYSTEM_ID_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' - ${item} Set Variable ${TRUE} + ${found_first_system_id} Set Variable ${TRUE} END IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID2}''' - ${item2} Set Variable ${TRUE} + ${found_second_system_id} Set Variable ${TRUE} END END - Should Be True ${item} - Should Be True ${item2} + Should Be True ${found_first_system_id} + Should Be True ${found_second_system_id} -TP_MEC_MEC040_SRV_MEF_001_OK_04 +TC_MEC_MEC040_SRV_MEF_001_OK_04 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - Empty SystemId query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} Retrieve all system info resources Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_OK_05 +TC_MEC_MEC040_SRV_MEF_001_OK_05 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - SystemName query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + ${SYSTEM_NAME_VALUE} Get value entry from JSON file SystemInfo systemName + Retrieve all system info resources with query params ${SYSTEM_NAME_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} - Should Be Equal As Strings ${element}[systemName] ${EXPECTED_SYSTEM_NAME} + Should Be Equal As Strings ${element}[systemName] ${SYSTEM_NAME_VALUE} END + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_OK_06 +TC_MEC_MEC040_SRV_MEF_001_OK_06 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - Multiple SystemName query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + ${SYSTEM_NAME_VALUE} Get value entry from JSON file SystemInfo systemName + Retrieve all system info resources with query params ${MUTIPLE_SYSTEM_NAME_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} - IF '''${element}[systemName]''' == '''${EXPECTED_SYSTEM_NAME}''' - ${item} Set Variable ${TRUE} + IF '''${element}[systemName]''' == '''${SYSTEM_NAME_VALUE}''' + ${found_sys_name_one} Set Variable ${TRUE} END IF '''${element}[systemName]''' == '''${EXPECTED_SYSTEM_NAME2}''' - ${item2} Set Variable ${TRUE} + ${found_sys_name_two} Set Variable ${TRUE} END END - Should Be True ${item} - Should Be True ${item2} + Should Be True ${found_sys_name_one} + Should Be True ${found_sys_name_two} + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} -TP_MEC_MEC040_SRV_MEF_001_OK_07 + +TC_MEC_MEC040_SRV_MEF_001_OK_07 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - Empty SystemName query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + Retrieve all system info resources with query params ${EMPTY_SYSTEM_NAME_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList - FOR ${element} IN @{response['body']} - Should Be Equal As Strings ${element}[systemName] ${EMPTY} - END + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_OK_08 +TC_MEC_MEC040_SRV_MEF_001_OK_08 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - systemProvider query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + ${SYS_PROVIDER_VALUE} Get value entry from JSON file SystemInfo systemProvider + Retrieve all system info resources with query params ${SYSTEM_PROVIDER_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} - Should Be Equal As Strings ${element}[systemProvider] ${EXPECTED_SYSTEM_PROVIDER} - END + Should Be Equal As Strings ${element}[systemProvider] ${SYS_PROVIDER_VALUE} + END + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_OK_09 +TC_MEC_MEC040_SRV_MEF_001_OK_09 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - Multiple systemProvider query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + ##TODO complete Retrieve all system info resources with query params ${MUTIPLE_SYS_PROVIDER_QUERY_PAR} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + ${SYS_PROVIDER_VALUE} Get value entry from JSON file SystemInfo systemProvider + FOR ${element} IN @{response['body']} - IF '''${element}[systemProvider]''' == '''${EXPECTED_SYSTEM_PROVIDER}''' - ${item} Set Variable ${TRUE} + IF '''${element}[systemProvider]''' == '''${SYS_PROVIDER_VALUE}''' + ${sys_provider_found} Set Variable ${TRUE} END IF '''${element}[systemProvider]''' == '''${EXPECTED_SYSTEM_PROVIDER2}''' - ${item2} Set Variable ${TRUE} + ${sys_provider2_found} Set Variable ${TRUE} END END - Should Be True ${item} - Should Be True ${item2} + Should Be True ${sys_provider_found} + Should Be True ${sys_provider2_found} + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_OK_10 +TC_MEC_MEC040_SRV_MEF_001_OK_10 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - Empty systemProvider query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfoEmptySystemProvider ${REGISTER_ACTION} Retrieve all system info resources with query params ${EMPTY_SYSTEM_PROVIDER_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} Should Be Equal As Strings ${element}[systemProvider] ${EMPTY} END + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_OK_11 +TC_MEC_MEC040_SRV_MEF_001_OK_11 [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator - Multiple query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + ${SYS_NAME_VALUE} Get value entry from JSON file SystemInfo systemName + Retrieve all system info resources with query params ${FILTER_ON_SYSTEM_ID_AND_NAME} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList @@ -173,20 +213,23 @@ TP_MEC_MEC040_SRV_MEF_001_OK_11 IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' ${counterSystemId}= set variable ${counterSystemId+1} END - IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' + IF '''${element}[systemName]''' == '''${SYS_NAME_VALUE}''' ${counterSystemName}= set variable ${counterSystemName+1} END ${counterSystemName}= set variable ${counterSystemName+1} END Should Be True '${counterSystemName}'>'0' Should Be True '${counterSystemId}'>'0' + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_001_NF_01 +TC_MEC_MEC040_SRV_MEF_001_NF_01 [Documentation] ... Check that the IUT responds with an error ... when selection is not applicable - SystemId ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${NOT_EXT_SYSTEM_ID_QUERY_PARAM} ${None} ${REMOVE_ACTION} Retrieve all system info resources with query params ${NOT_EXT_SYSTEM_ID_QUERY_PARAM} Check HTTP Response Status Code Is 404 @@ -196,21 +239,23 @@ TP_MEC_MEC040_SRV_MEF_001_NF_02 ... when selection is not applicable - SystemName ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + ##Test setup not applicable because systemInfo cannot be deleted by systemName Retrieve all system info resources with query params ${NOT_EXT_SYSTEM_NAME_QUERY_PARAM} Check HTTP Response Status Code Is 404 -TP_MEC_MEC040_SRV_MEF_001_NF_03 +TC_MEC_MEC040_SRV_MEF_001_NF_03 [Documentation] ... Check that the IUT responds with an error ... when selection is not applicable - SystemProvider ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + ##Test setup not applicable because systemInfo cannot be deleted by systemProvider Retrieve all system info resources with query params ${NOT_EXT_SYS_PROVIDER_QUERY_PARAM} Check HTTP Response Status Code Is 404 ##TODO double check -TP_MEC_MEC040_SRV_MEF_001_BR +TC_MEC_MEC040_SRV_MEF_001_BR [Documentation] ... Check that the IUT responds with an error when request is malformed ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 @@ -218,17 +263,26 @@ TP_MEC_MEC040_SRV_MEF_001_BR Retrieve all system info resources wrong URL #Check HTTP Response Status Code Is 400 -TP_MEC_MEC040_SRV_MEF_002_OK +TC_MEC_MEC040_SRV_MEF_002_OK [Documentation] ... Check that the IUT creates a new systemInfo when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.4, clause 5.2.2.1.1 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + ##No test setup needed because the systemId is generated by IUT Register System Info SystemInfo Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is SystemInfo + Check HTTP Response Body Json Schema Is SystemInfo + ${SYS_NAME_VALUE} Get value entry from JSON file SystemInfo systemName + ${SYS_NAME_PROVIDER} Get value entry from JSON file SystemInfo systemProvider + + Should Be Equal As Strings ${response['body']['systemName']} ${SYS_NAME_VALUE} + Should Be Equal As Strings ${response['body']['systemProvider']} ${SYS_NAME_PROVIDER} + + [Teardown] Test TearDown ${response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_002_BR_01 +TC_MEC_MEC040_SRV_MEF_002_BR_01 [Documentation] ... Check that the IUT responds with an error on creating an existing systemInfo ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.4, clause 5.2.2.1.1 @@ -238,7 +292,7 @@ TP_MEC_MEC040_SRV_MEF_002_BR_01 ##TODO double check -TP_MEC_MEC040_SRV_MEF_002_BR_02 +TC_MEC_MEC040_SRV_MEF_002_BR_02 [Documentation] ... Check that the IUT responds with an error on providing inconsistent data ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.4, clause 5.2.2.1.1 @@ -246,27 +300,29 @@ TP_MEC_MEC040_SRV_MEF_002_BR_02 Register System Info SystemInfoBR Check HTTP Response Status Code Is 400 -TP_MEC_MEC040_SRV_MEF_003_OK +TC_MEC_MEC040_SRV_MEF_003_OK [Documentation] ... Check that the IUT responds with a selection of all available systemInfo ... when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause 7.4.3.1, clause 5.2.2.1.1 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + ## No test setup and teardown applicable because systemId is generated by IUT Retrieve specific system info resource ${EXPECTED_SYSTEM_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfo -TP_MEC_MEC040_SRV_MEF_003_NF +TC_MEC_MEC040_SRV_MEF_003_NF [Documentation] ... Check that the IUT responds with an error ... when it receives a request for returning a systemInfo referred with a wrong systemId ... ETSI GS MEC 040 V3.1.1, clause 7.4.3.1, clause 5.2.2.1.1 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_SYSTEM_ID} ${None} ${REMOVE_ACTION} Retrieve specific system info resource ${NOT_EXISTING_SYSTEM_ID} Check HTTP Response Status Code Is 404 ##TODO double check -TP_MEC_MEC040_SRV_MEF_003_BR +TC_MEC_MEC040_SRV_MEF_003_BR [Documentation] ... Check that the IUT responds with an error ... when it receives a request for returning a systemInfo referred with a wrong systemId @@ -275,44 +331,60 @@ TP_MEC_MEC040_SRV_MEF_003_BR Retrieve specific system info resource ${NOT_EXISTING_SYSTEM_ID} #Check HTTP Response Status Code Is 400 -TP_MEC_MEC040_SRV_MEF_004_OK_01 +TC_MEC_MEC040_SRV_MEF_004_OK_01 [Documentation] ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdate + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + ${SYS_PROVIDER} Get value entry from JSON file SystemInfoUpdate endpoint + Update specific system info resource ${setup_response['body']['systemId']} SystemInfoUpdate Check HTTP Response Status Code Is 200 - Should Be Equal As Strings ${response['body']['systemProvider']} ${EXPECTED_NEW_SYSTEM_PROVIDER} + Should Be Equal As Strings ${response['body']['systemProvider']} ${SYS_PROVIDER} + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + -TP_MEC_MEC040_SRV_MEF_004_OK_02 +TC_MEC_MEC040_SRV_MEF_004_OK_02 [Documentation] ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdate2 + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + Update specific system info resource ${setup_response['body']['systemId']} SystemInfoUpdate2 + ${SYS_NAME} Get value entry from JSON file SystemInfoUpdate2 systemName Check HTTP Response Status Code Is 200 - Should Be Equal As Strings ${response['body']['systemName']} ${EXPECTED_NEW_SYSTEM_NAME} + Should Be Equal As Strings ${response['body']['systemName']} ${SYS_NAME} + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + + -TP_MEC_MEC040_SRV_MEF_004_OK_02 +TC_MEC_MEC040_SRV_MEF_004_OK_03 [Documentation] ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdate3 + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + Update specific system info resource ${setup_response['body']['systemId']} SystemInfoUpdate3 Check HTTP Response Status Code Is 200 - Should Be Equal As Strings ${response['body']['systemName']} ${EXPECTED_NEW_SYSTEM_NAME} - Should Be Equal As Strings ${response['body']['systemProvider']} ${EXPECTED_NEW_SYSTEM_PROVIDER} + ${SYS_NAME} Get value entry from JSON file SystemInfoUpdate3 systemName + ${SYS_PROVIDER} Get value entry from JSON file SystemInfoUpdate3 endpoint + + Should Be Equal As Strings ${response['body']['systemName']} ${SYS_NAME} + Should Be Equal As Strings ${response['body']['systemProvider']} ${SYS_PROVIDER} + [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} -TP_MEC_MEC040_SRV_MEF_004_NF + +TC_MEC_MEC040_SRV_MEF_004_NF [Documentation] ... Check that the IUT responds with an error when requested to update an unknown systemInfo ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_SYSTEM_ID} ${None} ${REMOVE_ACTION} Update specific system info resource ${NOT_EXISTING_SYSTEM_ID} SystemInfoUpdate3 Check HTTP Response Status Code Is 404 ##TODO double check the corresponding TP -#TP_MEC_MEC040_SRV_MEF_004_BR_01 +#TC_MEC_MEC040_SRV_MEF_004_BR_01 #[Documentation] #... Check that the IUT responds with an error when requested to update with an inconsistant URI #... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 @@ -320,7 +392,7 @@ TP_MEC_MEC040_SRV_MEF_004_NF #Update specific system info resource ${NOT_EXISTING_SYSTEM_ID} SystemInfoUpdate3 #Check HTTP Response Status Code Is 400 -TP_MEC_MEC040_SRV_MEF_004_BR_02 +TC_MEC_MEC040_SRV_MEF_004_BR_02 [Documentation] ... Check that the IUT responds with an error when requested to update with no data provided ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 @@ -328,27 +400,62 @@ TP_MEC_MEC040_SRV_MEF_004_BR_02 Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdateBR Check HTTP Response Status Code Is 400 -TP_MEC_MEC040_SRV_MEF_005_OK +TC_MEC_MEC040_SRV_MEF_005_OK [Documentation] ... Check that the IUT responds with an error when requested to delete an unknown systemInfo ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.5, clause 5.2.2.1.3 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} Remove specific system info resource ${EXPECTED_SYSTEM_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC040_SRV_MEF_005_NF +TC_MEC_MEC040_SRV_MEF_005_NF [Documentation] ... Check that the IUT responds with an error when requested to delete an unknown systemInfo ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.5, clause 5.2.2.1.3 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Test Setup ${NOT_EXISTING_SYSTEM_ID} ${None} ${REMOVE_ACTION} Remove specific system info resource ${NOT_EXISTING_SYSTEM_ID} Check HTTP Response Status Code Is 404 -############################################################################ - - +############################################################################ *** Keywords *** +Test Setup + [Arguments] ${systemId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info ${body} + ${output}= Output response + Set Suite Variable ${setup_response} ${output} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info/${systemId} + END + +Test Teardown + [Arguments] ${systemId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info ${body} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/fed_resources/system_info/${systemId} + END + + Retrieve all system info resources Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 diff --git a/MEC040/SRV/environment/variables.txt b/MEC040/SRV/environment/variables.txt index f445ea3..8ac81d5 100644 --- a/MEC040/SRV/environment/variables.txt +++ b/MEC040/SRV/environment/variables.txt @@ -9,6 +9,13 @@ ${apiRoot} ${apiName} fed-enablement ${apiVersion} v1 +${REGISTER_ACTION} REGISTER +${REMOVE_ACTION} REMOVE +${NO_ACTION} NO_ACTION + + +${SYSTEM_ID_PLACEHOLDER} SYSTEM_ID_PLACEHOLDER + ${EXPECTED_SYSTEM_ID} SYSTEM_ID ${NOT_EXISTING_SYSTEM_ID} NOT_EXISTING_SYS_ID ${EXPECTED_SYSTEM_ID2} SYSTEM_ID2 diff --git a/MEC040/SRV/jsons/SystemInfo.json b/MEC040/SRV/jsons/SystemInfo.json index 6abc01c..c56ee19 100644 --- a/MEC040/SRV/jsons/SystemInfo.json +++ b/MEC040/SRV/jsons/SystemInfo.json @@ -1,4 +1,4 @@ { - "systemName": "systemNamea", + "systemName": "systemName", "systemProvider": "systemProvider" } \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfo2.json b/MEC040/SRV/jsons/SystemInfo2.json new file mode 100644 index 0000000..f4adc30 --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfo2.json @@ -0,0 +1,4 @@ +{ + "systemName": "systemName2", + "systemProvider": "systemProvider2" +} \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfo3.json b/MEC040/SRV/jsons/SystemInfo3.json new file mode 100644 index 0000000..6ab6257 --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfo3.json @@ -0,0 +1,4 @@ +{ + "systemName": "systemName3", + "systemProvider": "systemProvider3" +} \ No newline at end of file diff --git a/MEC040/SRV/jsons/SystemInfoEmptySystemProvider.json b/MEC040/SRV/jsons/SystemInfoEmptySystemProvider.json new file mode 100644 index 0000000..258706a --- /dev/null +++ b/MEC040/SRV/jsons/SystemInfoEmptySystemProvider.json @@ -0,0 +1,4 @@ +{ + "systemName": "systemName", + "systemProvider": "" +} \ No newline at end of file -- GitLab From a8fd5c0107c00801aac92d1b155c4d90f80ce544 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Dec 2023 16:21:40 +0100 Subject: [PATCH 21/94] Updated MEC010p2 Grant TCs to v3.1.1 --- MEC010p2/MEO/GRANT/Grant.robot | 92 ++++++++++++++------ MEC010p2/MEO/GRANT/environment/variables.txt | 7 ++ MEC010p2/MEO/GRANT/jsons/grantRequest.json | 3 +- MEC010p2/MEO/GRANT/jsons/grantRequest2.json | 4 +- 4 files changed, 77 insertions(+), 29 deletions(-) diff --git a/MEC010p2/MEO/GRANT/Grant.robot b/MEC010p2/MEO/GRANT/Grant.robot index 15f350f..3c9fc0e 100644 --- a/MEC010p2/MEO/GRANT/Grant.robot +++ b/MEC010p2/MEO/GRANT/Grant.robot @@ -8,14 +8,18 @@ Library REST ${MEO_SCHEMA}://${MEO_HOST}:${MEO_PORT} ssl_verify=false Library OperatingSystem +Test Setup Test Setup ${GRANT_ID_PLACEHOLDER} grantRequest ${NO_ACTION} +Test Teardown Test TearDown ${GRANT_ID_PLACEHOLDER} grantRequest ${NO_ACTION} + + *** Test Cases *** TC_MEC_MEC010p2_MEO_GRANT_001_OK [Documentation] TP_MEC_MEC010p2_MEO_GRANT_001_OK ... Check that MEO sends a synchronous grant response when a grant request is requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.5.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.2.2-1 (GrantRequest) - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.2.2-1 Note 2 (GrantRequest) - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.4.2-1 (Grant) + ... ETSI GS MEC 010-2 3.1.1, clause 7.5.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.2.2-1 (GrantRequest) + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.2.2-1 Note 2 (GrantRequest) + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.4.2-1 (Grant) [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Create a GRANT request grantRequest Check HTTP Response Status Code Is 201 @@ -25,8 +29,8 @@ TC_MEC_MEC010p2_MEO_GRANT_001_OK TC_MEC_MEC010p2_MEO_GRANT_001_BR [Documentation] TP_MEC_MEC010p2_MEO_GRANT_001_BR ... Check that MEO responds with an error when it receives a malformed request when a new grant request is performed - ... ETSI GS MEC 010-2 2.2.1, clause 7.6.1.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.4.2-1 (Grant) + ... ETSI GS MEC 010-2 3.1.1, clause 7.6.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.4.2-1 (Grant) [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Create a GRANT request grantBadRequest Check HTTP Response Status Code Is 400 @@ -34,9 +38,9 @@ TC_MEC_MEC010p2_MEO_GRANT_001_BR TC_MEC_MEC010p2_MEO_GRANT_002_OK [Documentation] TP_MEC_MEC010p2_MEO_GRANT_002_OK ... Check that MEO sends a synchronous grant response when a grant request is requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.5.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.2.2-1 //GrantRequest - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.4.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.5.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.2.2-1 //GrantRequest + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.4.2-1 [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Create a GRANT request grantRequest2 Check HTTP Response Status Code Is 201 @@ -44,68 +48,106 @@ TC_MEC_MEC010p2_MEO_GRANT_002_OK Check HTTP Response Body Json Schema Is Grant - TC_MEC_MEC010p2_MEO_GRANT_003_OK [Documentation] TP_MEC_MEC010p2_MEO_GRANT_003_OK ... Check that MEO sends an asynchronous grant response when a grant request is requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.5.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.2.2-1 (GrantRequest) - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.2.2-1 Note 2 (GrantRequest) - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.4.2-1 (Grant) + ... ETSI GS MEC 010-2 3.1.1, clause 7.5.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.2.2-1 (GrantRequest) + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.2.2-1 Note 2 (GrantRequest) + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.4.2-1 (Grant) [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + ${GRANT_ID_VALUE} Get value entry from JSON file grantRequestAsynchronous id Create a GRANT request grantRequestAsynchronous Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location - TC_MEC_MEC010p2_MEO_GRANT_004_OK [Documentation] TP_MEC_MEC010p2_MEO_GRANT_004_OK ... Check that MEO sends an asynchronous grant response when a grant request is requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.5.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.2.2-1 (GrantRequest) - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.4.2-1 (Grant) + ... ETSI GS MEC 010-2 3.1.1, clause 7.5.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.2.2-1 (GrantRequest) + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.4.2-1 (Grant) [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + ${GRANT_ID_VALUE} Get value entry from JSON file grantRequestAsynchronous2 id Create a GRANT request grantRequestAsynchronous2 Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location - + TC_MEC_MEC010p2_MEO_GRANT_005_OK [Documentation] TP_MEC_MEC010p2_MEO_GRANT_005_OK ... Check that MEO sends the status of a grant request when a query on a granting ID is performed. ... The process of creating the grant is ongoing, no grant is available yet - ... ETSI GS MEC 010-2 2.2.1, clause 7.5.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.4.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.5.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.4.2-1 [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual grant ${GRANT_ID_ACCEPTED} + [Setup] Test Setup ${None} grantRequestAsynchronous ${REGISTER_ACTION} + ${GRANT_ID_VALUE} Get value entry from JSON file grantRequestAsynchronous id + Get an individual grant ${GRANT_ID_VALUE} Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location + Check HTTP Response Body Json Schema Is Grant + + TC_MEC_MEC010p2_MEO_GRANT_006_OK [Documentation] TP_MEC_MEC010p2_MEO_GRANT_006_OK ... Check that MEO sends the status of a grant request when a query on a granting ID is performed. ... The process of creating the grant is ongoing, no grant is available yet - ... ETSI GS MEC 010-2 2.2.1, clause 7.5.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.4.4.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.5.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.4.4.2-1 [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual grant ${GRANT_ID} + [Setup] Test Setup ${None} grantRequest ${REGISTER_ACTION} + Get an individual grant ${setup_response['body']['id']} Check HTTP Response Status Code Is 200 Check HTTP Response Header Contains Location Check HTTP Response Body Json Schema Is Grant + + TC_MEC_MEC010p2_MEO_GRANT_006_NF [Documentation] TP_MEC_MEC010p2_MEO_GRANT_006_NF ... Check that MEO responds with an error when it receives ... a request for returning a grant referred with a wrong ID ... ETSI GS MEC 010-2 2.1.1, clause 7.5.2.3.2 [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + ##No test setup can be applied because delete operation on grant is not supported (yet). Get an individual grant ${NOT_EXISTING_GRANT_ID} Check HTTP Response Status Code Is 404 *** Keywords *** + +Test Setup + [Arguments] ${grantId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/grants ${body} allow_redirects=false + ${output}= Output response + Set Suite Variable ${setup_response} ${output} + END + +Test Teardown + [Arguments] ${grantId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/grants ${body} allow_redirects=false + END + + + Create a GRANT request [Arguments] ${content} Set Headers {"Accept":"application/json"} diff --git a/MEC010p2/MEO/GRANT/environment/variables.txt b/MEC010p2/MEO/GRANT/environment/variables.txt index 603052e..e8ef3c6 100644 --- a/MEC010p2/MEO/GRANT/environment/variables.txt +++ b/MEC010p2/MEO/GRANT/environment/variables.txt @@ -10,8 +10,15 @@ ${apiRoot} ${apiName} granting ${apiVersion} v1 + +${REGISTER_ACTION} REGISTER +${REMOVE_ACTION} REMOVE +${NO_ACTION} NO_ACTION + + # Specific variables ${GRANT_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${GRANT_ID_PLACEHOLDER} grantIdPlaceHolder ${GRANT_ID_ACCEPTED} abcdee2b-6e50-4f33-ab09-8bf05850abcd ${NOT_EXISTING_GRANT_ID} NOT_EXISTING_GRANT_ID ${APP_INSTANCE_ID} 456 diff --git a/MEC010p2/MEO/GRANT/jsons/grantRequest.json b/MEC010p2/MEO/GRANT/jsons/grantRequest.json index 7c6b0e9..111af7a 100644 --- a/MEC010p2/MEO/GRANT/jsons/grantRequest.json +++ b/MEC010p2/MEO/GRANT/jsons/grantRequest.json @@ -1,6 +1,5 @@ { - "id": "123", - "appInstanceId": "456", + "appInstanceId": "123", "appLcmOpOccId": "789", "appDId":"appDId", "operation":"INSTANTIATE", diff --git a/MEC010p2/MEO/GRANT/jsons/grantRequest2.json b/MEC010p2/MEO/GRANT/jsons/grantRequest2.json index 4a9a1d4..a70af24 100644 --- a/MEC010p2/MEO/GRANT/jsons/grantRequest2.json +++ b/MEC010p2/MEO/GRANT/jsons/grantRequest2.json @@ -1,8 +1,8 @@ { - "id": "123", - "appInstanceId": "456", + "appInstanceId": "123", "appLcmOpOccId": "789", "operation": "OPERATE", + "appDId":"appDId", "addResources": [ { "resourceDefinitionId": "resourceDefinitionId", -- GitLab From e0eaf183e129ce9747a9ce087db385c8f2fddca8 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 18 Dec 2023 19:12:10 +0100 Subject: [PATCH 22/94] Available MEC010-p2 v3.1.1 TCs draft version. Some fixes and validations are needed. --- MEC010p2/MEO/PKGM/AppPkgMgt.robot | 223 +++++++++---- MEC010p2/MEO/PKGM/environment/variables.txt | 6 + MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json | 33 +- .../jsons/CreateAppPackageBadRequest.json | 8 +- MEC010p2/MEPM/LCM/PlatformConfiguration.robot | 42 ++- .../LCM/json/CreateAppInstanceRequest.json | 5 + MEC010p2/MEPM/PKGM/AppPkgMgt.robot | 176 ++++++---- MEC010p2/MEPM/PKGM/environment/variables.txt | 3 +- .../MEPM/PKGM/jsons/CreateAppPackage.json | 9 + MEC010p2/MEX/LCM/AppInstanceMgmt.robot | 302 +++++++++++------- MEC010p2/MEX/LCM/environment/variables.txt | 6 +- MEC010p2/MEX/LCM/jsons/OperateAppRequest.json | 2 +- ...ppInstanceSubscriptionLinkList.schema.json | 4 +- 13 files changed, 524 insertions(+), 295 deletions(-) create mode 100644 MEC010p2/MEPM/LCM/json/CreateAppInstanceRequest.json create mode 100644 MEC010p2/MEPM/PKGM/jsons/CreateAppPackage.json diff --git a/MEC010p2/MEO/PKGM/AppPkgMgt.robot b/MEC010p2/MEO/PKGM/AppPkgMgt.robot index 6c47a0d..529fd81 100644 --- a/MEC010p2/MEO/PKGM/AppPkgMgt.robot +++ b/MEC010p2/MEO/PKGM/AppPkgMgt.robot @@ -9,31 +9,31 @@ Library BuiltIn Library OperatingSystem #Library MockServerLibrary +Test Setup Test Setup ${APP_PKG_ID_PLACEHOLDER} AppPkgInfo ${NO_ACTION} +Test Teardown Test TearDown ${APP_PKG_ID_PLACEHOLDER} AppPkgInfo ${NO_ACTION} + *** Test Cases *** TC_MEC_MEC010p2_MEO_PKGM_001_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_001_OK ... Check that MEO creates a new App Package when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.2.2-1 (AppPkg) + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.2.2-1 (AppPkg) [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Post Request to create new App Package Resource CreateAppPackage.json Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is AppPkgInfo Check HTTP Response Header Contains Location - Should Be Equal As Strings ${response['body']['appDVersion']} ${APP_PKG_VERSION} - Should Be Equal As Strings ${response['body']['checksum']['algorithm']} ${CHECKSUM} - Should Be Equal As Strings ${response['body']['operationalState']} ${OPERATIONAL_STATE} Should Be Equal As Strings ${response['body']['onboardingState']} ${ONBOARDING_STATE} - Should Be Equal As Strings ${response['body']['usageState']} ${USAGE_STATE} + [Teardown] Test TearDown ${response['body']['id']} ${None} ${REMOVE_ACTION} TC_MEC_MEC010p2_MEO_PKGM_001_BR [Documentation] TP_MEC_MEC010p2_MEO_PKGM_001_BR ... Check that MEO creates a new App Package when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.2.2-1 (AppPkg) + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.2.2-1 (AppPkg) [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Post Request to create new App Package Resource CreateAppPackageBadRequest.json Check HTTP Response Status Code Is 400 @@ -43,36 +43,42 @@ TC_MEC_MEC010p2_MEO_PKGM_001_BR TC_MEC_MEC010p2_MEO_PKGM_002_01_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_002_01_OK ... Check that MEO returns the list of App Packages when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - GET all app Packages + [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} + GET all app Packages Check HTTP Response Status Code Is 200 FOR ${onBoardedAppPkgInfo} IN @{response['body']} Validate Json AppPkgInfo.schema.json ${onBoardedAppPkgInfo} + Should Be Equal As Strings ${onBoardedAppPkgInfo['onboardingState']} ${ONBOARDING_STATE} END - + [Teardown] Test TearDown ${setup_response['body']['id']} ${None} ${REMOVE_ACTION} TC_MEC_MEC010p2_MEO_PKGM_002_02_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_002_02_OK ... Check that MEO returns the list of App Packages when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} GET all onboarded app Packages Check HTTP Response Status Code Is 200 FOR ${onBoardedAppPkgInfo} IN @{response['body']} Validate Json AppPkgInfo.schema.json ${onBoardedAppPkgInfo} + Should Be Equal As Strings ${onBoardedAppPkgInfo['onboardingState']} ${ONBOARDING_STATE} END - + [Teardown] Test TearDown ${setup_response['body']['id']} ${None} ${REMOVE_ACTION} + + TC_MEC_MEC010p2_MEO_PKGM_002_BR [Documentation] TP_MEC_MEO_PKGM_002_BR ... Check that MEO responds with an error when it receives ... a malformed request for retrieving the list of existing App Packages - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS GET all APP Packages with filters ${MALFORMED_FILTER_NAME} ${FILTER_VALUE} Check HTTP Response Status Code Is 400 @@ -81,38 +87,41 @@ TC_MEC_MEC010p2_MEO_PKGM_002_BR TC_MEC_MEC010p2_MEO_PKGM_003_01_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_003_01_OK ... Check that MEO returns the an App Package when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} GET an app Package identified by ${ON_BOARDED_APP_PKG_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppPkgInfo Should Be Equal As Strings ${response['body']['id']} ${ON_BOARDED_APP_PKG_ID} - Should Be Equal As Strings ${response['body']['appName']} ${APP_NAME} - + [Teardown] Test TearDown ${setup_response['body']['id']} ${None} ${REMOVE_ACTION} + TC_MEC_MEC010p2_MEO_PKGM_003_02_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_003_02_OK ... Check that MEO returns the an onboarded App Package when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} GET an onboarded app Package identified by ${ON_BOARDED_APP_PKG_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppPkgInfo Should Be Equal As Strings ${response['body']['id']} ${ON_BOARDED_APP_PKG_ID} - Should Be Equal As Strings ${response['body']['appName']} ${APP_NAME} + [Teardown] Test TearDown ${setup_response['body']['id']} ${None} ${REMOVE_ACTION} - + + TC_MEC_MEC010p2_MEO_PKGM_003_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_003_NF ... Check that MEO responds with an error when it receives ... a request for retrieving a App Package referred with a wrong ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS GET an APP Package identified by ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 404 @@ -121,19 +130,22 @@ TC_MEC_MEC010p2_MEO_PKGM_003_NF TC_MEC_MEC010p2_MEO_PKGM_004_OK [Documentation] TP_MEC_MEO_PKGM_004_OK ... Check that MEO deletes an App Package when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete an individual APP Package identified by ${ON_BOARDED_APP_PKG_ID} + [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} + Delete an individual APP Package identified by ${setup_response['body']['id']} Check HTTP Response Status Code Is 204 Check HTTP Response Body is Empty + TC_MEC_MEC010p2_MEO_PKGM_004_NF [Documentation] TP_MEC_MEO_PKGM_004_NF ... Check that MEO responds with an error when it receives ... a request for deleting an App Package referred with a wrong ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Test Setup ${NON_EXISTENT_APP_PKG_ID} ${None} ${REMOVE_ACTION} Delete an individual APP Package identified by ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 404 @@ -141,29 +153,34 @@ TC_MEC_MEC010p2_MEO_PKGM_004_NF TC_MEC_MEC010p2_MEO_PKGM_005_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_005_OK ... Check that MEO updates the operational state of an individual application package resource - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.5 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.5 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} Update Operational State for an app Package ${ON_BOARDED_APP_PKG_ID} AppPkgInfoModifications.json Check HTTP Response Body Json Schema Is AppPkgInfoModifications Check HTTP Response Status Code Is 200 Should Be Equal As Strings ${response['body']['operationalState']} ${OPERATIONAL_STATE} + [Teardown] Test TearDown ${setup_response['body']['id']} ${None} ${REMOVE_ACTION} TC_MEC_MEC010p2_MEO_PKGM_005_BR [Documentation] TP_MEC_MEC010p2_MEO_PKGM_005_BR ... Check that MEO sends an error when it receives a malformed request to modify the operational state of an application package - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.5 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.5 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} Update Operational State for an app Package ${ON_BOARDED_APP_PKG_ID} AppPkgInfoModificationsBadRequest.json Check HTTP Response Status Code Is 400 + [Teardown] Test TearDown ${setup_response['body']['id']} ${None} ${REMOVE_ACTION} TC_MEC_MEC010p2_MEO_PKGM_005_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_005_NF ... Check that MEO responds with an error when it receives ... a request for updating an App Package referred with a wrong ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.5 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.5 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Test Setup ${NON_EXISTENT_APP_PKG_ID} ${None} ${REMOVE_ACTION} Update Operational State for an app Package ${NON_EXISTENT_APP_PKG_ID} AppPkgInfoModificationsBadRequest.json Check HTTP Response Status Code Is 404 @@ -171,68 +188,75 @@ TC_MEC_MEC010p2_MEO_PKGM_005_NF TC_MEC_MEC010p2_MEO_PKGM_006_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_006_OK ... Check that MEO service returns an application package subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.3.3.1 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} Send a request for a subscription AppPkgSubscription.json Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUBSCRIPTION_TYPE} Should Be Equal As Strings ${response['body']['callbackUri']} ${CALLBACK_URI} + [TearDown] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} + TC_MEC_MEC010p2_MEO_PKGM_006_BR [Documentation] TP_MEC_MEC010p2_MEO_PKGM_006_BR ... Check that MEO service sends an error when it receives a malformed request for creating a new subscription on AppPackages - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.1", - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4", - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.1", + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4", + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Send a request for a subscription AppPkgSubscriptionBadRequest.json Check HTTP Response Status Code Is 400 - TC_MEC_MEC010p2_MEO_PKGM_007_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_007_OK ... Check that MEO service returns the list of Application Package Subscriptions when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.3.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Send a request for a subscription AppPkgSubscription.json Get all APP Package subscriptions Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList + [TearDown] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} TC_MEC_MEC010p2_MEO_PKGM_008_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_008_OK ... Check that MEO service returns an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Send a request for a subscription AppPkgSubscription.json Get an individual APP Package subscriptions ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo Should Be Equal As Strings ${response['body']['id']} ${SUBSCRIPTION_ID} + [TearDown] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} TC_MEC_MEC010p2_MEO_PKGM_008_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_008_NF ... Check that MEO service sends an error when it receives a query for a subscription on AppPackages with a wrong identifier - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} Get an individual APP Package subscriptions ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 - TC_MEC_MEC010p2_MEO_PKGM_009_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_009_OK ... Check that MEO service deletes an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Send a request for a subscription AppPkgSubscription.json Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 Check HTTP Response Body is Empty @@ -242,29 +266,44 @@ TC_MEC_MEC010p2_MEO_PKGM_009_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_009_NF ... Check that MEO service sends an error when it receives a deletion request for a subscription on AppPackages ... with a wrong identifier - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an App Package Subscription identified by NON_EXISTENT_SUBSCRIPTION_ID Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 +##TODO integrate notification server +#TC_MEC_MEC010p2_MEO_PKGM_010_OK + #[Documentation] TP_MEC_MEC010p2_MEO_PKGM_009_NF + #... Check that the MEO service sends a application package notification + #... if the MEO service has an associated subscription and the event is generated + #... "ETSI GS MEC 010-2 3.1.1, clause 7.3.5.3.1", + #... "ETSI GS MEC 010-2 3.1.1, clause 6.2.3.6.2" //AppPkgNotification + #[Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + #[Setup] + #[Teardown] + TC_MEC_MEC010p2_MEO_PKGM_011_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_011_OK ... Check that MEO reads the content of the AppD of on-boarded individual application package resources when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.6.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Post Request to create new App Package Resource CreateAppPackage.json Get an AppD from App Package identified by ${ON_BOARDED_APP_PKG_ID} Check HTTP Response Status Code Is 200 - + [TearDown] Delete an individual APP Package identified by ${ON_BOARDED_APP_PKG_ID} + TC_MEC_MEC010p2_MEO_PKGM_011_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_011_NF ... Check that MEO responds with an error when it receives ... a request to retrieve an application descriptor referred with a wrong app package ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.6.3.2", - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2", + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an individual APP Package identified by ${NON_EXISTING_APPD_ID} Get an AppD from App Package identified by ${NON_EXISTING_APPD_ID} Check HTTP Response Status Code Is 404 @@ -272,24 +311,29 @@ TC_MEC_MEC010p2_MEO_PKGM_011_NF TC_MEC_MEC010p2_MEO_PKGM_012_01_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_012_01_OK ... Check that MEO fetches the application package content identified by appPkgId when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Post Request to create new App Package Resource CreateAppPackage.json Get app Package identified by ${ON_BOARDED_APP_PKG_ID} ${ACCEPTED_CONTENT_TYPE_ZIP} Check HTTP Response Status Code Is 200 + [TearDown] Delete an individual APP Package identified by ${ON_BOARDED_APP_PKG_ID} + TC_MEC_MEC010p2_MEO_PKGM_012_02_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_012_02_OK ... Check that MEO fetches the application package content identified by appPkgId when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Post Request to create new App Package Resource CreateAppPackage.json Get onboarded app Package identified by ${ON_BOARDED_APP_PKG_ID} ${ACCEPTED_CONTENT_TYPE_ZIP} Check HTTP Response Status Code Is 200 + [TearDown] Delete an individual APP Package identified by ${ON_BOARDED_APP_PKG_ID} TC_MEC_MEC010p2_MEO_PKGM_012_BR [Documentation] TP_MEC_MEC010p2_MEO_PKGM_012_BR ... Check that MEO service sends an error when it receives a malformed request - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Get app Package identified by ${ON_BOARDED_APP_PKG_ID} ${WRONG_CONTENT_TYPE} Check HTTP Response Status Code Is 400 @@ -297,25 +341,63 @@ TC_MEC_MEC010p2_MEO_PKGM_012_BR TC_MEC_MEC010p2_MEO_PKGM_013_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_013_OK ... Check that MEO accepts application package when submitted - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.3 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.1.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.3 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an individual APP Package identified by ${APP_PKG_ID} Submit application package ${APP_PKG_ID} Check HTTP Response Status Code Is 202 + [TearDown] Delete an individual APP Package identified by ${APP_PKG_ID} TC_MEC_MEC010p2_MEO_PKGM_013_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_013_NF ... Check that MEO returns an error when an application package with wrong id is submitted - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.3 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.1.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.3 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an individual APP Package identified by ${NOT_EXISTING_APP_PKG_ID} Submit application package ${NOT_EXISTING_APP_PKG_ID} Check HTTP Response Status Code Is 404 *** Keywords *** +Test Setup + [Arguments] ${appPkgId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/app_packages ${body} + ${output}= Output response + Set Suite Variable ${setup_response} ${output} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId} + END + +Test Teardown + [Arguments] ${appPkgId} ${content} ${action} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + IF '''${action}''' == '''${REGISTER_ACTION}''' + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST ${apiRoot}/${apiName}/${apiVersion}/app_packages ${body} + END + + IF '''${action}''' == '''${REMOVE_ACTION}''' + DELETE ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId} + END + + Post Request to create new App Package Resource [Arguments] ${content} Log Creating a new App Package @@ -482,7 +564,6 @@ Get an individual APP Package subscriptions Set Suite Variable ${response} ${output} - Delete an App Package Subscription identified by [Arguments] ${subId} Log Deleting a subscription diff --git a/MEC010p2/MEO/PKGM/environment/variables.txt b/MEC010p2/MEO/PKGM/environment/variables.txt index bdfa447..660539d 100644 --- a/MEC010p2/MEO/PKGM/environment/variables.txt +++ b/MEC010p2/MEO/PKGM/environment/variables.txt @@ -10,6 +10,12 @@ ${apiRoot} ${apiName} app_pkgm ${apiVersion} v1 + +${REGISTER_ACTION} REGISTER +${REMOVE_ACTION} REMOVE +${NO_ACTION} NO_ACTION +${APP_PKG_ID_PLACEHOLDER} APP_PKG_ID_PLACEHOLDER + # Specific variables ${APP_PKG_NAME} appName ${APP_PKG_VERSION} APP_PKG_VERSION diff --git a/MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json b/MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json index b50ced3..aee3562 100644 --- a/MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json +++ b/MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json @@ -1,28 +1,9 @@ { - "id": "AppPkgInfoId", - "appDid": "appdId", - "appName": "APP_NAME", - "appSoftwareVersion": "APP_SOFTWARE_VERSION", - "appDVersion": "APP_D_VERSION", - "checksum": { - "algorithm": "SHA-256", - "hash": "0x1234567890abcdef" - }, - "softwareImages": ["info about sofware image"], - "onBoardingState": "CREATED", - "operationalState": "ENABLED", - "usageState": "NOT_IN_USE", - "mecInfo": ["mecInfo"], - "links": { - "self": { - "href": "/app_lcm/v1/app_packages/123" - }, - "appD": { - "href": "/app_lcm/v1/on_boarded_app_packages/456/appd" - }, - "appPkgContent": { - "href": "/app_lcm/v1/on_boarded_app_packages/456/package_content" - } - } - + "appPkgName": "APP_NAME", + "appPkgVersion": "APP_SOFTWARE_VERSION", + "checksum": { + "algorithm": "SHA-256", + "hash": "0x1234567890abcdef" + }, + "appPkgPath": "someuri.com" } \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/jsons/CreateAppPackageBadRequest.json b/MEC010p2/MEO/PKGM/jsons/CreateAppPackageBadRequest.json index 0e0dcd2..d10da00 100644 --- a/MEC010p2/MEO/PKGM/jsons/CreateAppPackageBadRequest.json +++ b/MEC010p2/MEO/PKGM/jsons/CreateAppPackageBadRequest.json @@ -1,3 +1,9 @@ { - + "appPkgNameERR": "APP_NAME", + "appPkgVersion": "APP_SOFTWARE_VERSION", + "checksum": { + "algorithm": "SHA-256", + "hash": "0x1234567890abcdef" + }, + "appPkgPath": "someuri.com" } \ No newline at end of file diff --git a/MEC010p2/MEPM/LCM/PlatformConfiguration.robot b/MEC010p2/MEPM/LCM/PlatformConfiguration.robot index 00632c9..792fa26 100644 --- a/MEC010p2/MEPM/LCM/PlatformConfiguration.robot +++ b/MEC010p2/MEPM/LCM/PlatformConfiguration.robot @@ -13,19 +13,21 @@ Library OperatingSystem TC_MEC_MEC010p2_MEPM_LCM_001_OK [Documentation] TP_MEC_MEC010p2_MEPM_LCM_001_OK ... Check that MEC API provider has created the configuration information in AppD to the MEPM-V - ... ETSI GS MEC 010-2 2.2.1, clause 7.7.6.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest - + ... ETSI GS MEC 010-2 3.1.1, clause 7.7.6.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest + [Setup] Create new App Instance CreateAppInstanceRequest + ${APPD_ID_SET} Get value entry from JSON file CreateAppInstanceRequest appDId Request to configure Platform ${APP_INSTANCE_ID} ConfigPlatformForAppRequest Check HTTP Response Status Code Is 202 Check Response Header contains Location - + [Setup] Delete APP Instance ${APPD_ID_SET} + TC_MEC_MEC010p2_MEPM_LCM_001_BR [Documentation] TP_MEC_MEC010p2_MEPM_LCM_001_BR ... Check that MEC API provider sends an error when it receives a malformed request for the configuration information in AppD to the MEPM-V - ... ETSI GS MEC 010-2 2.2.1, clause 7.7.6.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.7.6.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest Request to configure Platform ${APP_INSTANCE_ID} ConfigPlatformForAppRequestBadRequest Check HTTP Response Status Code Is 400 @@ -36,14 +38,38 @@ TC_MEC_MEC010p2_MEPM_LCM_001_NF [Documentation] TP_MEC_MEC010p2_MEPM_LCM_001_BR ... "Check that MEC API provider sends an error when it receives a request ... for the configuration information in AppD to the MEPM-V with not valid app instance ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.7.6.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.7.6.3.1 + ... ETS3.1.1MEC 010-2 3.1.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest Request to configure Platform ${NOT_EXISTING_APP_INSTANCE_ID} ConfigPlatformForAppRequest Check HTTP Response Status Code Is 404 *** Keywords *** +Create new App Instance + [Arguments] ${content} + Log Creating a new app package + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/app_instances ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Delete APP Instance + [Arguments] ${app_instance_id} + Log Get single App Instance + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_instances/${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + Request to configure Platform [Argument] ${appInstanceId} ${content} Log Request to configure platform diff --git a/MEC010p2/MEPM/LCM/json/CreateAppInstanceRequest.json b/MEC010p2/MEPM/LCM/json/CreateAppInstanceRequest.json new file mode 100644 index 0000000..3691ba6 --- /dev/null +++ b/MEC010p2/MEPM/LCM/json/CreateAppInstanceRequest.json @@ -0,0 +1,5 @@ +{ + "appDId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", + "appInstanceDescription": "description", + "appInstanceName": "name" +} \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/AppPkgMgt.robot b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot index e45756f..c13a5a1 100644 --- a/MEC010p2/MEPM/PKGM/AppPkgMgt.robot +++ b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot @@ -14,36 +14,43 @@ Library OperatingSystem TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_01_OK ... Check that MEPM returns the list of App Packages when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Post APP Package CreateAppPackage.json + Set Variable ${APP_PKG_ID} ${response['body']['id']} GET all APP Packages Check HTTP Response Status Code Is 200 - FOR ${appPkg} IN @{response['body']} + + FOR ${appPkg} IN @{response['body']} Validate Json AppPkgInfo.schema.json ${appPkg} - END + Should Be Equal As Strings ${appPkg['onboardingState']} ${ONBOARDING_STATE} + + END + [TearDown] Delete APP Package ${APP_PKG_ID} + TC_MEC_MEC010p2_MEPM_PKGM_001_02_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_02_OK ... Check that MEPM returns the list of on boarded app Packages when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Post APP Package CreateAppPackage.json + Set Variable ${APP_PKG_ID} ${response['body']['id']} GET all onboarded APP Packages Check HTTP Response Status Code Is 200 - FOR ${appPkg} IN @{response['body']} + FOR ${appPkg} IN @{response['body']} Validate Json AppPkgInfo.schema.json ${appPkg} - END + END + [TearDown] Delete APP Package ${APP_PKG_ID} TC_MEC_MEC010p2_MEPM_PKGM_001_BR [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_BR ... Check that MEPM responds with an error when it receives ... a malformed request for requesting the list of existing App Packages - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.1.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS GET all APP Packages with filters ${MALFORMED_FILTER_NAME} ${FILTER_VALUE} Check HTTP Response Status Code Is 400 @@ -52,38 +59,45 @@ TC_MEC_MEC010p2_MEPM_PKGM_001_BR TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_01_OK ... Check that MEPM returns the an App Package when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - GET an APP Package identified by ${APP_PKG_ID} + [Setup] Post APP Package CreateAppPackage.json + Set Test Variable ${APP_PKG_CREATED_ID} ${response['body']['id']} + GET an APP Package identified by ${APP_PKG_CREATED_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppPkgInfo Should Be Equal As Strings ${response['body']['id']} ${APP_PKG_ID} + [TearDown] Delete APP Package ${APP_PKG_CREATED_ID} TC_MEC_MEC010p2_MEPM_PKGM_002_02_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_02_OK ... Check that MEPM returns the an App Package when requested - Note 3 - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - GET an onboarded APP Package identified by ${APP_PKG_ID} + [Setup] Post APP Package CreateAppPackage.json + Set Test Variable ${APP_PKG_CREATED_ID} ${response['body']['id']} + GET an onboarded APP Package identified by ${APP_PKG_CREATED_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppPkgInfo Should Be Equal As Strings ${response['body']['id']} ${APP_PKG_ID} + [TearDown] Delete APP Package ${APP_PKG_CREATED_ID} TC_MEC_MEC010p2_MEPM_PKGM_002_NF [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_NF ... Check that MEPM responds with an error when it receives ... a request for returning a App Package referred with a wrong ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [TearDown] Delete APP Package ${NON_EXISTENT_APP_PKG_ID} GET an APP Package identified by ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 404 @@ -91,15 +105,16 @@ TC_MEC_MEC010p2_MEPM_PKGM_002_NF TC_MEC_MEC010p2_MEPM_PKGM_003_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_003_OK ... Check that MEPM service returns an application package subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.3.3.1", - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1", + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Send a request for a subscription AppPkgSubscription Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo Should Be Equal As Strings ${response}[body][subscriptionType] AppPackageOnBoardingSubscription Should Be Equal As Strings ${response}[body][callbackUri] ${CALLBACK_URI} + [TearDown] Delete an App Package Subscription identified by ${response}[body][id] @@ -107,7 +122,7 @@ TC_MEC_MEC010p2_MEPM_PKGM_003_BR [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_003_BR ... Check that MEPM service sends an error when it receives a ... malformed request for creating a new subscription on AppPackages - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.3.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Send a request for a subscription AppPkgSubscriptionBadRequest Check HTTP Response Status Code Is 400 @@ -116,64 +131,76 @@ TC_MEC_MEC010p2_MEPM_PKGM_003_BR TC_MEC_MEC010p2_MEPM_PKGM_004_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_OK ... Check that MEPM service returns the list of Application Package Subscriptions when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.3.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.3.5.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Send a request for a subscription AppPkgSubscription + Set Test Variable ${SUB_ID} ${response}[body][id] Get all APP Package subscriptions Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList + [TearDown] Delete an App Package Subscription identified by ${SUB_ID} TC_MEC_MEC010p2_MEPM_PKGM_005_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_005_OK ... Check that MEPM service returns an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual APP Package subscriptions ${SUBSCRIPTION_ID} + [Setup] Send a request for a subscription AppPkgSubscription + Set Test Variable ${SUB_ID} ${response['body']['id']} + Get an individual APP Package subscriptions ${SUB_ID} Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo Check HTTP Response Status Code Is 200 - Should Be Equal As Strings ${response}[body][id] ${SUBSCRIPTION_ID} - Should Contain ${response}[body][_links][self][href] /app_pkgm/v1/subscriptions/${SUBSCRIPTION_ID} + Should Be Equal As Strings ${response}[body][id] ${SUB_ID} + Should Contain ${response}[body][_links][self][href] /app_pkgm/v1/subscriptions/${SUB_ID} + [TearDown] Delete an App Package Subscription identified by ${SUB_ID} TC_MEC_MEC010p2_MEPM_PKGM_005_NF [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_005_NF ... Check that MEPM service sends an error when it receives a query for a subscription on AppPackages ... with a wrong identifier - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} Get an individual APP Package subscriptions ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 - + TC_MEC_MEC010p2_MEPM_PKGM_006_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_OK ... Check that MEPM service deletes an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} + [Setup] Send a request for a subscription AppPkgSubscription + Set Test Variable ${SUB_ID} ${response['body']['id']} + Delete an App Package Subscription identified by ${SUB_ID} Check HTTP Response Status Code Is 204 TC_MEC_MEC010p2_MEPM_PKGM_006_NF [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_NF ... Check that MEPM service sends an error when it receives a deletion request for a subscription on AppPackages ... with a wrong identifier - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.4.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 +##### TP_MEC_MEC010p2_MEPM_PKGM_007_OK TODO + + TC_MEC_MEC010p2_MEPM_PKGM_008_NA [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_008_NA ... Check that MEPM responds with an error when it receives ... a POST request referring an application descriptor AppD - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.6.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Post AppD by ${APPD_ID} Check HTTP Response Status Code Is 405 @@ -181,20 +208,25 @@ TC_MEC_MEC010p2_MEPM_PKGM_008_NA TC_MEC_MEC010p2_MEPM_PKGM_009_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_009_OK ... Check that MEPM returns the Application Descriptor contained on a on-boarded Application Package when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.6.3.2 - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.1.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get AppD by ${APPD_ID} + [Setup] Post APP Package CreateAppPackage.json + Set Test Variable ${APP_PKG_ID} ${response['body']['id']} + Set Test Variable ${CREATED_APPD_ID} ${response['body']['appDId']} + Get AppD by ${CREATED_APPD_ID} Check HTTP Response Status Code Is 200 + [TearDown] Delete APP Package ${APP_PKG_ID} TC_MEC_MEC010p2_MEPM_PKGM_009_NF [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_009_NF ... Check that MEPM responds with an error when it receives ... a request for returning a App Descriptor referred with a wrong App Package ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.6.3.2", - ... ETSI GS MEC 010-2 2.2.1, clause 6.2.1.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2", + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get AppD by ${NON_EXISTENT_APPD_ID} + [Setup] Delete APP Package ${NON_EXISTENT_APP_PKG_ID} + Get AppD by ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 404 @@ -203,7 +235,7 @@ TC_MEC_MEC010p2_MEPM_PKGM_010_FO [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_010_FO ... Check that MEPM responds with an error when it receives ... a PUT request referring an application descriptor AppD - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.6.3.3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Put on AppD endpoint ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 403 @@ -212,7 +244,7 @@ TC_MEC_MEC010p2_MEPM_PKGM_011_NA [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_011_NA ... Check that MEPM responds with an error when it receives ... a DELETE request referring an application descriptor AppD - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.6.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Delete on AppD endpoint ${APP_PKG_ID} Check HTTP Response Status Code Is 405 @@ -221,26 +253,36 @@ TC_MEC_MEC010p2_MEPM_PKGM_011_NA TC_MEC_MEC010p2_MEPM_PKGM_012_01_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_01_OK ... Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get application package by AppId ${APP_PKG_ID} + [Setup] Post APP Package CreateAppPackage.json + Set Test Variable ${APP_PKG_ID} ${response['body']['id']} + Set Test Variable ${CREATED_APPD_ID} ${response['body']['appDId']} + Get application package by AppId ${CREATED_APPD_ID} Check HTTP Response Status Code Is 200 + [TearDown] Delete APP Package ${APP_PKG_ID} + TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_02_OK ... Check that MEPM fetches the on-boarded application package content identified by appDId when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get onboarded application package by AppdId ${APPD_ID} + [Setup] Post APP Package CreateAppPackage.json + Set Test Variable ${APP_PKG_ID} ${response['body']['id']} + Set Test Variable ${CREATED_APPD_ID} ${response['body']['appDId']} + + Get onboarded application package by AppdId ${CREATED_APPD_ID} Check HTTP Response Status Code Is 200 + [TearDown] Delete APP Package ${APP_PKG_ID} TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_01_NF ... Check that MEPM returns an error when performing ... a request for returning a App Descriptor referred with a wrong App Package ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Get application package by AppId ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 404 @@ -249,7 +291,7 @@ TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_02_NF ... Check that MEPM returns an error when performing ... a request for returning an onboarded App Descriptor referred with a wrong App Package ID - ... ETSI GS MEC 010-2 2.2.1, clause 7.3.7.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Get onboarded application package by AppdId ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 404 @@ -257,15 +299,27 @@ TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF *** Keywords *** Post APP Package - Log Getting all App Packages + [Arguments] ${content} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} Post ${apiRoot}/${apiName}/${apiVersion}/app_packages + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} ${output}= Output response Set Suite Variable ${response} ${output} +Delete APP Package + [Arguments] ${app_pkg_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_packages/${app_pkg_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + GET all APP Packages Log Getting all App Packages Set Headers {"Accept":"application/json"} diff --git a/MEC010p2/MEPM/PKGM/environment/variables.txt b/MEC010p2/MEPM/PKGM/environment/variables.txt index b71bde6..fc95e30 100644 --- a/MEC010p2/MEPM/PKGM/environment/variables.txt +++ b/MEC010p2/MEPM/PKGM/environment/variables.txt @@ -22,4 +22,5 @@ ${MALFORMED_FILTER_NAME} operationalStatus ${FILTER_VALUE} ENABLED ${NON_EXISTENT_APP_PKG_ID} NON_EXISTENT_APP_PKG_ID ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID -${NON_EXISTENT_APPD_ID} NON_EXISTENT_APPD_ID \ No newline at end of file +${NON_EXISTENT_APPD_ID} NON_EXISTENT_APPD_ID +${ONBOARDING_STATE} CREATED \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/jsons/CreateAppPackage.json b/MEC010p2/MEPM/PKGM/jsons/CreateAppPackage.json new file mode 100644 index 0000000..aee3562 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/jsons/CreateAppPackage.json @@ -0,0 +1,9 @@ +{ + "appPkgName": "APP_NAME", + "appPkgVersion": "APP_SOFTWARE_VERSION", + "checksum": { + "algorithm": "SHA-256", + "hash": "0x1234567890abcdef" + }, + "appPkgPath": "someuri.com" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/AppInstanceMgmt.robot b/MEC010p2/MEX/LCM/AppInstanceMgmt.robot index 45d7cb0..2b7f527 100644 --- a/MEC010p2/MEX/LCM/AppInstanceMgmt.robot +++ b/MEC010p2/MEX/LCM/AppInstanceMgmt.robot @@ -7,83 +7,96 @@ Resource ../../../GenericKeywords.robot Library REST ${MEPM_SCHEMA}://${MEPM_HOST}:${MEPM_PORT} ssl_verify=false Library BuiltIn Library OperatingSystem +Library String *** Test Cases *** TC_MEC_MEC010p2_MEX_LCM_001_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_001_OK ... Check that MEC API provider creates a new App Package when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.3.2-1 #CreateAppInstanceRequest - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.4.2-1 #AppInstanceInfo + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.3.2-1 #CreateAppInstanceRequest + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.4.2-1 #AppInstanceInfo Create new App Instance CreateAppInstanceRequest + ${APPD_ID_SET} Get value entry from JSON file CreateAppInstanceRequest appDId Check HTTP Response Status Code Is 201 + ##TODO validate against the new schema Check HTTP Response Body Json Schema Is AppInstanceInfo Check HTTP Response Header Contains Location - Should Be Equal As Strings ${response['body']['appDId']} ${APPD_ID} + Should Be Equal As Strings ${response['body']['appDId']} ${APPD_ID_SET} Should Be Equal As Strings ${response['body']['instantiationState']} NOT_INSTANTIATED - + [TearDown] Delete APP Instance ${response['body']['id']} TC_MEC_MEC010p2_MEX_LCM_001_BR [Documentation] TP_MEC_MEC010p2_MEX_LCM_001_BR ... Check that MEC API provider sends an error when it receives a malformed request for the creation of a new App Instance - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.1.3.1 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.3.2-1 #CreateAppInstanceRequest - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.4.2-1 #AppInstanceInfo + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.3.2-1 #CreateAppInstanceRequest + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.4.2-1 #AppInstanceInfo Create new App Instance CreateAppInstanceRequestBadRequest Check HTTP Response Status Code Is 400 - - TC_MEC_MEC010p2_MEX_LCM_002_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_002_OK ... Check that MEC API provider retrieves the list of App instances when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.1.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.4.2-1 #AppInstanceInfo + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.1.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.4.2-1 #AppInstanceInfo + [Setup] Create new App Instance CreateAppInstanceRequest + Set Test Variable ${NEW_APP_INSTANCE_ID} ${response['body']['id']} GET all APP Instances Check HTTP Response Status Code Is 200 FOR ${appInstance} IN @{response['body']} + ##TODO validate against the new schema Validate Json AppInstanceInfo.schema.json ${appInstance} - Log ${appInstance} - ${passed} Run Keyword And Return Status Should Be Equal As Strings ${appInstance}[id] ${APP_INSTANCE_ID} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${appInstance}[id] ${NEW_APP_INSTANCE_ID} Exit For Loop If ${passed} END Should Be True ${passed} + [TearDown] Delete APP Instance ${NEW_APP_INSTANCE_ID} + TC_MEC_MEC010p2_MEX_LCM_003_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_003_OK ... Check that MEC API provider retrieves an App Package when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.2.3.2 - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.4.2-1 #AppInstanceInfo - GET APP Instance ${APP_INSTANCE_ID} + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.4.2-1 #AppInstanceInfo + [Setup] Create new App Instance CreateAppInstanceRequest + Set Test Variable ${NEW_APP_INSTANCE_ID} ${response['body']['id']} + GET APP Instance ${NEW_APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 + ##TODO validate against the new schema Check HTTP Response Body Json Schema Is AppInstanceInfo Log ${response['body']} - Should Be Equal As Strings ${response['body']['id']} ${APP_INSTANCE_ID} + Should Be Equal As Strings ${response['body']['id']} ${NEW_APP_INSTANCE_ID} + [TearDown] Delete APP Instance ${NEW_APP_INSTANCE_ID} TC_MEC_MEC010p2_MEX_LCM_003_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_003_NF ... Check that MEC API provider fails on deletion of an App Instance when requested using wrong appInstanceId - ... ETSI GS MEC 010-2 2.2.1, Table 6.2.2.4.2-1 #AppInstanceInfo + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.4.2-1 #AppInstanceInfo + [Setup] Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} GET APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 TC_MEC_MEC010p2_MEX_LCM_004_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_003_OK ... Check that MEC API provider service deletes an App Instance when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.2.3.4 - Delete APP Instance ${APP_INSTANCE_ID} + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.2.3.4 + [Setup] Create new App Instance CreateAppInstanceRequest + Set Test Variable ${NEW_APP_INSTANCE_ID} ${response['body']['id']} + Delete APP Instance ${NEW_APP_INSTANCE_ID} Check HTTP Response Status Code Is 204 TC_MEC_MEC010p2_MEX_LCM_004_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_004_NF ... Check that MEC API provider fails on deletion of an App Instance when requested using wrong appInstanceId - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.2.3.4 + [Setup] Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 @@ -91,17 +104,21 @@ TC_MEC_MEC010p2_MEX_LCM_004_NF TC_MEC_MEC010p2_MEX_LCM_005_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_005_OK ... Check that MEC API provider service instantiates an App Instance when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.6.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.7.2-1 #InstantiateAppRequest - Instantiate App Request ${APP_INSTANCE_ID} InstantiateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.6.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.7.2-1 #InstantiateAppRequest + [Setup] Create new App Instance CreateAppInstanceRequest + Set Test Variable ${NEW_APP_INSTANCE_ID} ${response['body']['id']} + Instantiate App Request ${NEW_APP_INSTANCE_ID} InstantiateAppRequest Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location + [TearDown] Delete APP Instance ${NEW_APP_INSTANCE_ID} + TC_MEC_MEC010p2_MEX_LCM_005_BR [Documentation] TP_MEC_MEC010p2_MEX_LCM_005_BR ... Check that MEC API provider service fails to instantiate an App Instance when it receives a malformed request - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.6.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.7.2-1 #InstantiateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.6.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.7.2-1 #InstantiateAppRequest Instantiate App Request ${APP_INSTANCE_ID} InstantiateAppRequestBadRequest Check HTTP Response Status Code Is 400 @@ -110,8 +127,9 @@ TC_MEC_MEC010p2_MEX_LCM_005_BR TC_MEC_MEC010p2_MEX_LCM_005_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_005_NF ... Check that MEC API provider service fails to instantiate an App Instance when it receives a request related to a not existing App Instance - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.6.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.7.2-1 #InstantiateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.6.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.7.2-1 #InstantiateAppRequest + [Setup] Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} Instantiate App Request ${NOT_EXISTING_APP_INSTANCE_ID} InstantiateAppRequest Check HTTP Response Status Code Is 404 @@ -120,17 +138,21 @@ TC_MEC_MEC010p2_MEX_LCM_005_NF TC_MEC_MEC010p2_MEX_LCM_006_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_006_OK ... Check that MEC API provider service terminates an App Instance when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.7.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.9.2-1 #TerminateAppRequest - Terminate App Request ${APP_INSTANCE_ID} TerminateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.7.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.9.2-1 #TerminateAppRequest + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest + ##TODO sleep for a while because the instantiation is not immediate + Terminate App Request ${APP_ID} TerminateAppRequest Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location + [TearDown] Delete APP Instance ${APP_ID} + TC_MEC_MEC010p2_MEX_LCM_006_BR [Documentation] TP_MEC_MEC010p2_MEX_LCM_006_OK ... Check that MEC API provider service fails to terminate an App Instance when it receives a malformed request - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.7.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.9.2-1 #TerminateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.7.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.9.2-1 #TerminateAppRequest Terminate App Request ${APP_INSTANCE_ID} TerminateAppRequestBadRequest Check HTTP Response Status Code Is 400 @@ -138,38 +160,42 @@ TC_MEC_MEC010p2_MEX_LCM_006_BR TC_MEC_MEC010p2_MEX_LCM_006_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_006_NF ... Check that MEC API provider service fails to terminate an App Instance when it receives a request related to a not existing App Instance - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.7.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.9.2-1 #TerminateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.7.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.9.2-1 #TerminateAppRequest + [Setup] Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} Terminate App Request ${NOT_EXISTING_APP_INSTANCE_ID} TerminateAppRequest Check HTTP Response Status Code Is 404 -TPC_MEC_MEC010p2_MEX_LCM_007_OK +TC_MEC_MEC010p2_MEX_LCM_007_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_007_OK ... Check that MEC API provider service changes the status of an App Instance from its INITIAL_STATE to a given FINAL_STATE, when requested. ... The following combinations INITIAL_STATE - FINAL_STATE are supported: ... - STARTED/STOP ... - STOPPED/STARTCheck that MEC API provider service terminates an App Instance when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.8.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.8.2-1 #OperateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.8.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.8.2-1 #OperateAppRequest + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest + ##TODO sleep for a while because the instantiation is not immediate Operate App Request ${APP_INSTANCE_ID} OperateAppRequest Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location + [TearDown] Delete APP Instance ${APP_ID} TC_MEC_MEC010p2_MEX_LCM_007_BR [Documentation] TP_MEC_MEC010p2_MEX_LCM_007_BR ... Check that MEC API provider service fails to operate on an App Instance when it receives a malformed request - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.8.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.8.2-1 #OperateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.8.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.8.2-1 #OperateAppRequest Operate App Request ${APP_INSTANCE_ID} OperateAppRequestBadRequest Check HTTP Response Status Code Is 400 TC_MEC_MEC010p2_MEX_LCM_007_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_007_NF ... Check that MEC API provider service fails to change the status of an App Instance when it receives a request related to a not existing App Instance - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.8.3.1 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.8.2-1 #OperateAppRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.8.3.1 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.8.2-1 #OperateAppRequest Operate App Request ${NOT_EXISTING_APP_INSTANCE_ID} OperateAppRequest Check HTTP Response Status Code Is 404 @@ -178,38 +204,33 @@ TC_MEC_MEC010p2_MEX_LCM_007_NF TC_MEC_MEC010p2_MEX_LCM_008_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_008_OK ... Check that MEC API provider service retrieves info about LCM Operation Occurrence on App Instances when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.9.3.2 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.13.2-1 #AppLcmOpOcc + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.9.3.2 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.13.2-1 #AppLcmOpOcc + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest GET all App LCM op Occs Check HTTP Response Status Code Is 200 FOR ${appLcmOpOcc} IN @{response['body']} - ##The referred JSON schema is in compliance with MEC010p2 v2.1.1 but not with v2.2.1. Some attributes are missing in the older version Validate Json AppLcmOpOcc.schema.json ${appLcmOpOcc} - ${passed} Run Keyword And Return Status Should Be Equal As Strings ${appLcmOpOcc}[id] ${APP_LCM_OP_OCC_ID} - Exit For Loop If ${passed} END - - Should Be True ${passed} - - TC_MEC_MEC010p2_MEX_LCM_009_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_009_OK ... Check that MEC API provider service retrieves info about LCM Operation Occurrence on an App Instance when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.10.3.2 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.13.2-1 #AppLcmOpOcc - GET App LCM op Occ ${APP_LCM_OP_OCC_ID} + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.10.3.2 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.13.2-1 #AppLcmOpOcc + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest + GET App LCM op Occ ${APP_LCM_OP_OCCS_ID} Check HTTP Response Status Code Is 200 Validate Json AppLcmOpOcc.schema.json ${response}[body] - Should Be Equal As Strings ${response}[body][id] ${APP_LCM_OP_OCC_ID} + Should Be Equal As Strings ${response}[body][id] ${APP_LCM_OP_OCCS_ID} TC_MEC_MEC010p2_MEX_LCM_009_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_009_NF ... Check that MEC API provider service sends an error when it receives a query for a not existing LCM Operation Occurence - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.10.3.2 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.13.2-1 #AppLcmOpOcc + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.10.3.2 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.13.2-1 #AppLcmOpOcc GET App LCM op Occ ${NOT_EXISTING_APP_LCM_OP_OCC_ID} Check HTTP Response Status Code Is 404 @@ -220,82 +241,92 @@ TC_MEC_MEC010p2_MEX_LCM_010_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_010_OK ... Check that MEC API provider service creates a LCM Subscription when requested, where the subscription request can ... have SUBSCRIPTION_TYPE AppInstanceStateChangeSubscription or AppLcmOpOccStateChangeSubscription - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.3.3.1, - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.12.2-1 #AppInstSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.14.2-1 #AppLcmOpOccSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.25.2-1 #AppInstIdCreationSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.28.2-1 #AppInstIdDeletionSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.3.3.1, + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.12.2-1 #AppInstSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.14.2-1 #AppLcmOpOccSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.25.2-1 #AppInstIdCreationSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.28.2-1 #AppInstIdDeletionSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo Send a request for a subscription AppInstSubscriptionRequest Check HTTP Response Status Code Is 201 Validate Json AppInstSubscriptionRequest.schema.json ${response}[body] - - Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE} - Should Be Equal As Strings ${response['body']['callbackUri']} ${CALLBACK_URI} - + ${REQ_SUBSCRIPTION_TYPE} Get value entry from JSON file AppInstSubscriptionRequest subscriptionType + ${REQ_CALLBACK_URI} Get value entry from JSON file AppInstSubscriptionRequest callbackUri + + Should Be Equal As Strings ${response['body']['subscriptionType']} ${REQ_SUBSCRIPTION_TYPE} + Should Be Equal As Strings ${response['body']['callbackUri']} ${REQ_CALLBACK_URI} + [TearDown] Send a request for deleting a subscription ${response['body']['id']} + TC_MEC_MEC010p2_MEX_LCM_010_BR [Documentation] TP_MEC_MEC010p2_MEX_LCM_010_BR ... Check that MEC API provider service sends an error when it receives a malformed request to create a LCM Subscription - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.3.3.1, - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.12.2-1 #AppInstSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.14.2-1 #AppLcmOpOccSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.25.2-1 #AppInstIdCreationSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.28.2-1 #AppInstIdDeletionSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo - + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.3.3.1, + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.12.2-1 #AppInstSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.14.2-1 #AppLcmOpOccSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.25.2-1 #AppInstIdCreationSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.28.2-1 #AppInstIdDeletionSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo + Send a request for a subscription AppInstSubscriptionRequestBadRequest Check HTTP Response Status Code Is 400 + TC_MEC_MEC010p2_MEX_LCM_011_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_011_OK ... Check that MEC API provider service sends the list of LCM Subscriptions when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.3.3.2, - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.12.2-1 #AppInstSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.14.2-1 #AppLcmOpOccSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.25.2-1 #AppInstIdCreationSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.28.2-1 #AppInstIdDeletionSubscriptionRequest - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo - + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.3.3.2, + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.12.2-1 #AppInstSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.14.2-1 #AppLcmOpOccSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.25.2-1 #AppInstIdCreationSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.28.2-1 #AppInstIdDeletionSubscriptionRequest + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo + [Setup] Send a request for a subscription AppInstSubscriptionRequest + Set Test Variable ${SUB_ID} ${response['body']['id']} + Send a request for retrieving all subscriptions Check HTTP Response Status Code Is 200 Validate Json AppInstanceSubscriptionLinkList.schema.json ${response}[body] + [TearDown] Send a request for deleting a subscription ${SUB_ID} + TC_MEC_MEC010p2_MEX_LCM_012_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_012_OK ... Check that MEC API provider service sends the information about an existing LCM subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.4.3.2 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo - - Send a request for retrieving a subscription ${SUBSCRIPTION_ID} + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.4.3.2 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo + [Setup] Send a request for a subscription AppInstSubscriptionRequest + Set Test Variable ${SUB_ID} ${response['body']['id']} + Send a request for retrieving a subscription ${SUB_ID} Check HTTP Response Status Code Is 200 - Should Be Equal As Strings ${response['body']['id']} ${SUBSCRIPTION_ID} + Should Be Equal As Strings ${response['body']['id']} ${SUB_ID} + [TearDown] Send a request for deleting a subscription ${SUB_ID} TC_MEC_MEC010p2_MEX_LCM_012_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_012_NF ... Check that MEC API provider service sends an error when it receives a query for a not existing LCM Subscription - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.4.3.2 - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo - + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.4.3.2 + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.10.2-1 #AppInstSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.15.2-1 #AppLcmOpOccSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.26.2-1 #AppInstIdCreationSubscriptionInfo + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.29.2-1 #AppInstIdDeletionSubscriptionInfo + [Setup] Send a request for deleting a subscription ${NOT_EXISTING_SUBSCRIPTION_ID} Send a request for retrieving a subscription ${NOT_EXISTING_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 @@ -303,41 +334,53 @@ TC_MEC_MEC010p2_MEX_LCM_012_NF TC_MEC_MEC010p2_MEX_LCM_013_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_013_OK ... Check that MEC API provider service delete an existing LCM Subscription when requested - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.3.3.4 - Send a request for deleting a subscription ${SUBSCRIPTION_ID} + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.3.3.4 + [Setup] Send a request for a subscription AppInstSubscriptionRequest + Set Test Variable ${SUB_ID} ${response['body']['id']} + + Send a request for deleting a subscription ${SUB_ID} Check HTTP Response Status Code Is 204 TC_MEC_MEC010p2_MEX_LCM_013_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_013_NF ... Check that MEC API provider service sends an error when it receives a deletion request for a not existing LCM Subscription - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.3.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.3.3.4 + [Setup] Send a request for deleting a subscription ${NOT_EXISTING_SUBSCRIPTION_ID} + Send a request for deleting a subscription ${NOT_EXISTING_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 + TC_MEC_MEC010p2_MEX_LCM_014_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_014_OK ... Check that MEC API provider service cancels an on going LCM Operation - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.11.3.1", - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.32.2-1" #CancelMode - Cancel on going LCM Operation ${APP_LCM_OP_OCC_ID} CancelMode + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.11.3.1", + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.32.2-1" #CancelMode + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest + Cancel on going LCM Operation ${APP_LCM_OP_OCCS_ID} CancelMode Check HTTP Response Status Code Is 202 + [TearDown] Delete APP Instance ${APP_ID} + TC_MEC_MEC010p2_MEX_LCM_014_BR [Documentation] TP_MEC_MEC010p2_MEX_LCM_014_BR ... Check that MEC API provider service fails to cancel an on going LCM Operation when it receives a malformed request - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.11.3.1", - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.32.2-1" #CancelMode - Cancel on going LCM Operation ${APP_LCM_OP_OCC_ID} CancelModeBadRequest + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.11.3.1", + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.32.2-1" #CancelMode + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest + Cancel on going LCM Operation ${APP_LCM_OP_OCCS_ID} CancelModeBadRequest Check HTTP Response Status Code Is 400 + [TearDown] Delete APP Instance ${APP_ID} + TC_MEC_MEC010p2_MEX_LCM_014_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_014_NF ... Check that MEC API provider service fails to cancel an on going LCM Operation when it receives a request related to a not existing application LCM Operation - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.11.3.1", - ... ETSI GS MEC 010-2 2.2.1, table 6.2.2.32.2-1" #CancelMode + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.11.3.1", + ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.32.2-1" #CancelMode Cancel on going LCM Operation ${NOT_EXISTING_APP_LCM_OP_OCC_ID} CancelMode Check HTTP Response Status Code Is 404 @@ -346,16 +389,18 @@ TC_MEC_MEC010p2_MEX_LCM_014_NF TC_MEC_MEC010p2_MEX_LCM_015_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_015_OK ... Check that MEC API provider service makes failed an on going LCM Operation - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.12.3.1 - Fail on going LCM Operation ${APP_LCM_OP_OCC_ID} + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.12.3.1 + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest + Fail on going LCM Operation ${APP_LCM_OP_OCCS_ID} Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppLcmOpOcc + Validate Json AppLcmOpOcc.schema.json ${response}[body] + [TearDown] Delete APP Instance ${APP_ID} TC_MEC_MEC010p2_MEX_LCM_015_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_015_NF ... Check that MEC API provider service makes failed an on going LCM Operation - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.12.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.12.3.1 Fail on going LCM Operation ${NOT_EXISTING_APP_LCM_OP_OCC_ID} Check HTTP Response Status Code Is 404 @@ -363,15 +408,17 @@ TC_MEC_MEC010p2_MEX_LCM_015_NF TC_MEC_MEC010p2_MEX_LCM_016_OK [Documentation] TP_MEC_MEC010p2_MEX_LCM_016_OK ... Check that MEC API provider service retries an on going LCM Operation - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.13.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.13.3.1 + [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest Retry on going LCM Operation ${APP_LCM_OP_OCC_ID} - Check HTTP Response Status Code Is 200 + Check HTTP Response Status Code Is 202 + [TearDown] Delete APP Instance ${APP_ID} TC_MEC_MEC010p2_MEX_LCM_016_NF [Documentation] TP_MEC_MEC010p2_MEX_LCM_016_NF ... Check that MEC API provider service fails to retry an LCM Operation when it receives a request related to a not existing application LCM Operation - ... ETSI GS MEC 010-2 2.2.1, clause 7.4.13.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.4.13.3.1 Retry on going LCM Operation ${NOT_EXISTING_APP_LCM_OP_OCC_ID} Check HTTP Response Status Code Is 404 @@ -424,6 +471,15 @@ Delete APP Instance Set Suite Variable ${response} ${output} +Create and Instantiate App Instance + [Arguments] ${appInstanceFile} ${instantiatePayloadFile} + Create new App Instance ${appInstanceFile} + Set Suite Variable ${APP_ID} ${response['body']['id']} + Instantiate App Request ${response['body']['id']} ${instantiatePayloadFile} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${APP_LCM_OP_OCCS_ID} ${elements}[4] + + Instantiate App Request [Arguments] ${appInstanceId} ${content} diff --git a/MEC010p2/MEX/LCM/environment/variables.txt b/MEC010p2/MEX/LCM/environment/variables.txt index a82e2bb..4ee64a4 100644 --- a/MEC010p2/MEX/LCM/environment/variables.txt +++ b/MEC010p2/MEX/LCM/environment/variables.txt @@ -20,4 +20,8 @@ ${OPERATION_VALUE} DISABLE ${CALLBACK_URI} https://callback.uri/path ${SUB_TYPE} AppInstanceStateChangeSubscription ${SUBSCRIPTION_ID} 01234e2b-6e50-4f33-ab09-8bf05850890 -${NOT_EXISTING_SUBSCRIPTION_ID} NOT_EXISTING_SUBSCRIPTION_ID \ No newline at end of file +${NOT_EXISTING_SUBSCRIPTION_ID} NOT_EXISTING_SUBSCRIPTION_ID + +${REQ_SUBSCRIPTION_TYPE} +${REQ_CALLBACK_URI} +${SUB_ID} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/OperateAppRequest.json b/MEC010p2/MEX/LCM/jsons/OperateAppRequest.json index 472fae8..495279e 100644 --- a/MEC010p2/MEX/LCM/jsons/OperateAppRequest.json +++ b/MEC010p2/MEX/LCM/jsons/OperateAppRequest.json @@ -1,3 +1,3 @@ { - "changeStateTo": "STARTED" + "changeStateTo": "STOPPED" } \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/schemas/AppInstanceSubscriptionLinkList.schema.json b/MEC010p2/MEX/LCM/schemas/AppInstanceSubscriptionLinkList.schema.json index 57be3c7..0b63e56 100644 --- a/MEC010p2/MEX/LCM/schemas/AppInstanceSubscriptionLinkList.schema.json +++ b/MEC010p2/MEX/LCM/schemas/AppInstanceSubscriptionLinkList.schema.json @@ -35,7 +35,7 @@ "type": "object", "required": [ "href", - "subsctiptionType" + "subscriptionType" ], "properties": { "href": { @@ -43,7 +43,7 @@ "type": "string", "format": "uri" }, - "subsctiptionType": { + "subscriptionTypeType": { "description": "'Subscribed notification type'", "type": "string", "enum": [ -- GitLab From d6c81a38c782c4a1c933430a36d6fc60d749e178 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 18 Dec 2023 20:15:47 +0100 Subject: [PATCH 23/94] Added test setup and teardown for MEC011 v3.2.1 APPSAQ TCs --- MEC011/SRV/APPSAQ/PlatAppServices.robot | 142 +++++++++++++++--------- 1 file changed, 89 insertions(+), 53 deletions(-) diff --git a/MEC011/SRV/APPSAQ/PlatAppServices.robot b/MEC011/SRV/APPSAQ/PlatAppServices.robot index 37ccca3..2daddf9 100644 --- a/MEC011/SRV/APPSAQ/PlatAppServices.robot +++ b/MEC011/SRV/APPSAQ/PlatAppServices.robot @@ -10,44 +10,46 @@ Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Default Tags TC_MEC_SRV_APPSAQ -*** Test Cases *** -TP_MEC_MEC011_SRV_APPSAQ_001_OK +*** Test Cases *** +TC_MEC_MEC011_SRV_APPSAQ_001_OK [Documentation] ... Check that the IUT responds with a list of available MEC services ... for a given application instance when queried by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Get a list of mecService of an application instance ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfoList + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} + - -TP_MEC_MEC011_SRV_APPSAQ_001_BR +TC_MEC_MEC011_SRV_APPSAQ_001_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES # Wrong query parameter name should trigger an error response. Get a list of mecService of an application instance with parameters ${APP_INSTANCE_ID} ${INSTANCE_ID} ${FAKE_INSTANCE_ID_VALUE} Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_APPSAQ_002_OK +TC_MEC_MEC011_SRV_APPSAQ_002_OK [Documentation] ... Check that the IUT notifies the authorised relevant (subscribed) application ... instances when a new service for a given application instance is registered ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create new service ServiceInfo ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 201 @@ -57,133 +59,145 @@ TP_MEC_MEC011_SRV_APPSAQ_002_OK ##TODO add notification server -TP_MEC_MEC011_SRV_APPSAQ_002_BR +TC_MEC_MEC011_SRV_APPSAQ_002_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create new service ServiceInfoError ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_APPSAQ_002_NF +TC_MEC_MEC011_SRV_APPSAQ_002_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove individual service ${NON_EXISTENT_APP_INSTANCE_ID} ${SERVICE_ID} Create new service ServiceInfo ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_APPSAQ_003_OK +TC_MEC_MEC011_SRV_APPSAQ_003_OK [Documentation] ... Check that the IUT responds with the information on a specific service ... for a given application instance when queried by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Get individual service ${APP_INSTANCE_ID} ${SERVICE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfo Check Response Contains ${response['body']} serInstanceId ${SERVICE_ID} + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} + - -TP_MEC_MEC011_SRV_APPSAQ_003_NF +TC_MEC_MEC011_SRV_APPSAQ_003_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.5", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove individual service ${NON_EXISTENT_APP_INSTANCE_ID} ${SERVICE_ID} Get individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_APPSAQ_004_OK +TC_MEC_MEC011_SRV_APPSAQ_004_OK [Documentation] ... Check that the IUT updates a service information for a given ... application instance when commanded by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.4, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfo Check Response Contains ${response['body']} version ${SVC_NEW_VERSION} + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} -TP_MEC_MEC011_SRV_APPSAQ_004_BR +TC_MEC_MEC011_SRV_APPSAQ_004_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.4, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdatedError Check HTTP Response Status Code Is 400 + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} -TP_MEC_MEC011_SRV_APPSAQ_004_NF +TC_MEC_MEC011_SRV_APPSAQ_004_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.4, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Update service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} ServiceInfoUpdated Check HTTP Response Status Code Is 404 - -TP_MEC_MEC011_SRV_APPSAQ_004_PF +TC_MEC_MEC011_SRV_APPSAQ_004_PF [Documentation] ... Check that the IUT responds with an error when ... a request sent by a MEC Application doesn't comply with a required condition ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.4", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2" + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.4, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Update service with etag ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated ${INVALID_ETAG} Check HTTP Response Status Code Is 412 + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} -TP_MEC_MEC011_SRV_APPSAQ_005_OK +TC_MEC_MEC011_SRV_APPSAQ_005_OK [Documentation] ... Check that the IUT executes the deletion of a service ... for a given application instance when requested by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" + ... Reference ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} - Check HTTP Response Status Code Is 204 + Check HTTP Response Status Code Is 204 -TP_MEC_MEC011_SRV_APPSAQ_005_NF +TC_MEC_MEC011_SRV_APPSAQ_005_NF [Documentation] ... Check that the IUT responds with an error when ... a request for deletion of a unknown service is sent by a MEC Application ... - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5" + ... Reference ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Remove individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 @@ -266,3 +280,25 @@ Remove individual service ${output}= Output response Set Suite Variable ${response} ${output} + +# Check Plaform IUT notifies the MEC Application instances + # [Documentation] + # ... + + # [Arguments] ${instance_id} ${content} + + # TODO check how to send the message (isn't defined). Does it need to be tested as it's not defined? + + # // MEC 011, clause 6.4.2 + # the IUT entity sends a notification_message containing + # body containing + # notificationType set to "SerAvailabilityNotification", + # services containing + # serName set to SERVICE_NAME + # _links containing + # subscription set to MP1_SUBSCRIPTION_A + # ; + # ; + # ; + # ; + # to the MEC_APP_Subscriber entity -- GitLab From 5f24ecd74b3c164b64e8a7d616402d73a148c2cd Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 18 Dec 2023 20:35:04 +0100 Subject: [PATCH 24/94] MEC011 v3.2.1 APPSUB Draft TCs: added test setup and test teardown --- MEC011/SRV/APPSUB/PlatAppSubscriptions.robot | 39 ++++++++++++++------ 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot index 9ba0238..4a2edb7 100644 --- a/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot +++ b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot @@ -7,13 +7,13 @@ Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem - +Library String Default Tags TC_MEC_SRV_APPSUB *** Test Cases *** -TP_MEC_MEC011_SRV_APPSUB_001_OK +TC_MEC_MEC011_SRV_APPSUB_001_OK [Documentation] ... Check that the IUT responds with a list of subscriptions for notifications ... on services availability when queried by a MEC Application @@ -21,12 +21,16 @@ TP_MEC_MEC011_SRV_APPSUB_001_OK ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription + ${elements} = Split String ${response['body']['_links']['self']['href']} / + Set Suite Variable ${SUB_ID} ${elements[3]} Get Subscriptions list ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SubscriptionsLinkList + [TearDown] Remove subscription ${APP_INSTANCE_ID} ${SUB_ID} + - -TP_MEC_MEC011_SRV_APPSUB_001_NF +TC_MEC_MEC011_SRV_APPSUB_001_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -34,11 +38,12 @@ TP_MEC_MEC011_SRV_APPSUB_001_NF ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [TearDown] Remove subscription ${NON_EXISTENT_APP_INSTANCE_ID} ${SUB_ID} Get Subscriptions list ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_APPSUB_002_OK +TC_MEC_MEC011_SRV_APPSUB_002_OK [Documentation] ... Check that the IUT acknowledges the subscription by a MEC Application ... to notifications on service availability events @@ -47,14 +52,18 @@ TP_MEC_MEC011_SRV_APPSUB_002_OK ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription + ${elements} = Split String ${response['body']['_links']['self']['href']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is AppTerminationNotificationSubscription Check HTTP Response Header Contains Location Check Response Contains ${response['body']} subscriptionType AppTerminationNotificationSubscription Check Response Contains ${response['body']} callbackReference ${APP_TERM_NOTIF_CALLBACK_URI} + [TearDown] Remove subscription ${APP_INSTANCE_ID} ${SUB_ID} -TP_MEC_MEC011_SRV_APPSUB_002_BR +TC_MEC_MEC011_SRV_APPSUB_002_BR [Documentation] ... Check that the IUT responds with the information on a specific subscription ... when queried by a MEC Application @@ -66,7 +75,7 @@ TP_MEC_MEC011_SRV_APPSUB_002_BR Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_APPSUB_003_OK +TC_MEC_MEC011_SRV_APPSUB_003_OK [Documentation] ... Check that the IUT responds with the information on a specific subscription ... when queried by a MEC Application @@ -74,12 +83,16 @@ TP_MEC_MEC011_SRV_APPSUB_003_OK ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - Get individual subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} + [Setup] Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription + ${elements} = Split String ${response['body']['_links']['self']['href']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Get individual subscription ${APP_INSTANCE_ID} ${SUB_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppTerminationNotificationSubscription + [TearDown] Remove subscription ${APP_INSTANCE_ID} ${SUB_ID} -TP_MEC_MEC011_SRV_APPSUB_003_NF +TC_MEC_MEC011_SRV_APPSUB_003_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -87,11 +100,12 @@ TP_MEC_MEC011_SRV_APPSUB_003_NF ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove subscription ${APP_INSTANCE_ID} ${NON_EXISTENT_SUBSCRIPTION_ID} Get individual subscription ${APP_INSTANCE_ID} ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_APPSUB_004_OK +TC_MEC_MEC011_SRV_APPSUB_004_OK [Documentation] ... Check that the IUT acknowledges the unsubscribe from service availability event notifications ... when commanded by a MEC Application @@ -99,11 +113,12 @@ TP_MEC_MEC011_SRV_APPSUB_004_OK ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription Remove subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC011_SRV_APPSUB_004_NF +TC_MEC_MEC011_SRV_APPSUB_004_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -111,6 +126,7 @@ TP_MEC_MEC011_SRV_APPSUB_004_NF ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove subscription ${NON_EXISTENT_APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Remove subscription ${NON_EXISTENT_APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 @@ -137,6 +153,7 @@ Create new subscription ${output}= Output response Set Suite Variable ${response} ${output} + Get individual subscription [Arguments] ${appInstanceId} ${subscriptionId} -- GitLab From ca199cb0d5c5f8dd059e41adeaf9a2a2a6f93b92 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 19 Dec 2023 11:27:42 +0100 Subject: [PATCH 25/94] TCs draft version for MEC011 v3.2.1 CONF. Added also test setup and test teardown. --- MEC011/SRV/CONFTASK/PlatConfirmation.robot | 47 +++++++++++++++---- MEC011/SRV/CONFTASK/environment/variables.txt | 8 ++++ MEC011/SRV/CONFTASK/jsons/AppInfo.json | 3 ++ 3 files changed, 50 insertions(+), 8 deletions(-) create mode 100644 MEC011/SRV/CONFTASK/jsons/AppInfo.json diff --git a/MEC011/SRV/CONFTASK/PlatConfirmation.robot b/MEC011/SRV/CONFTASK/PlatConfirmation.robot index de6f139..32f4ff7 100644 --- a/MEC011/SRV/CONFTASK/PlatConfirmation.robot +++ b/MEC011/SRV/CONFTASK/PlatConfirmation.robot @@ -1,7 +1,7 @@ *** Settings *** Documentation -... A test suite for validating DNS rules (DNS) operations. +... A test suite for validating Platform Configuration (CONF) operations. Resource ../../../GenericKeywords.robot Resource environment/variables.txt @@ -16,7 +16,7 @@ Default Tags TC_MEC_SRV_CONF *** Test Cases *** -TP_MEC_MEC011_SRV_CONFTASK_001_OK +TC_MEC_MEC011_SRV_CONFTASK_001_OK [Documentation] ... Check that the IUT responds that it has completed ... the application level termination @@ -25,11 +25,13 @@ TP_MEC_MEC011_SRV_CONFTASK_001_OK ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES - Request termination of MEC Application ${APP_INSTANCE_ID} AppTerminationConfirmation + [Setup] Create a new MEC application instance profile AppInfo + Request termination of MEC Application ${APP_INSTANCE_ID} AppTerminationConfirmation Check HTTP Response Status Code Is 204 + [Teardown] Delete MEC application instance profile ${APP_INSTANCE_ID} + - -TP_MEC_MEC011_SRV_CONFTASK_001_NF +TC_MEC_MEC011_SRV_CONFTASK_001_NF [Documentation] ... Check that the IUT responds with an error ... when requested graceful termination/stop of an unknown MEC Application instance @@ -38,13 +40,14 @@ TP_MEC_MEC011_SRV_CONFTASK_001_NF ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Teardown] Delete MEC application instance profile ${NON_EXISTING_APP_INSTANCE_ID} Request termination of MEC Application ${NON_EXISTING_APP_INSTANCE_ID} AppTerminationConfirmation Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_CONFTASK_002_OK +TC_MEC_MEC011_SRV_CONFTASK_002_OK [Documentation] ... Check that the IUT responds with an acknowledge ... when requested readiness status for a MEC Application instance @@ -53,11 +56,13 @@ TP_MEC_MEC011_SRV_CONFTASK_002_OK ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo Request readiness status of MEC Application ${APP_INSTANCE_ID} AppReadyConfirmation Check HTTP Response Status Code Is 204 + [Teardown] Delete MEC application instance profile ${APP_INSTANCE_ID} + - -TP_MEC_MEC011_SRV_CONFTASK_002_NF +TC_MEC_MEC011_SRV_CONFTASK_002_NF [Documentation] ... Check that the IUT responds with an error ... when requested readiness status for an unknown MEC Application instance @@ -66,11 +71,37 @@ TP_MEC_MEC011_SRV_CONFTASK_002_NF ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Teardown] Delete MEC application instance profile ${NON_EXISTING_APP_INSTANCE_ID} Request readiness status of MEC Application ${NON_EXISTING_APP_INSTANCE_ID} AppReadyConfirmation Check HTTP Response Status Code Is 404 *** Keywords *** +Create a new MEC application instance profile + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST http://${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['appInstanceId']} + + + +Delete MEC application instance profile + [Arguments] ${app_instance_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete http://${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations/${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + Request termination of MEC Application [Arguments] ${appInstanceId} ${content} Set Headers {"Accept":"application/json"} diff --git a/MEC011/SRV/CONFTASK/environment/variables.txt b/MEC011/SRV/CONFTASK/environment/variables.txt index cd46f8a..d4719e0 100644 --- a/MEC011/SRV/CONFTASK/environment/variables.txt +++ b/MEC011/SRV/CONFTASK/environment/variables.txt @@ -9,6 +9,14 @@ ${apiRoot} ${apiName} mec_app_support ${apiVersion} v2 + +${HOST_REG_APP} 127.0.0.1 +${PORT_REG_APP} 8082 +${apiRoot_REG_APP} +${apiName_REG_APP} mec_app_support +${apiVersion_REG_APP} v2 + + # Specific variables ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${NON_EXISTING_APP_INSTANCE_ID} NON_EXISTING_APP_INSTANCE_ID \ No newline at end of file diff --git a/MEC011/SRV/CONFTASK/jsons/AppInfo.json b/MEC011/SRV/CONFTASK/jsons/AppInfo.json new file mode 100644 index 0000000..31c9053 --- /dev/null +++ b/MEC011/SRV/CONFTASK/jsons/AppInfo.json @@ -0,0 +1,3 @@ +{ + "appName": "sampleAppName" +} \ No newline at end of file -- GitLab From 1d21047bf22dfcfdb393b238a45558d1cf9b5178 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 19 Dec 2023 11:45:48 +0100 Subject: [PATCH 26/94] TCs draft version for MEC011 v3.2.1 DNS available --- MEC011/SRV/DNS/PlatDnsRules.robot | 64 +++++++++++++++++++----- MEC011/SRV/DNS/environment/variables.txt | 6 +++ MEC011/SRV/DNS/jsons/AppInfo.json | 3 ++ 3 files changed, 61 insertions(+), 12 deletions(-) create mode 100644 MEC011/SRV/DNS/jsons/AppInfo.json diff --git a/MEC011/SRV/DNS/PlatDnsRules.robot b/MEC011/SRV/DNS/PlatDnsRules.robot index b792fe0..b5c29f4 100644 --- a/MEC011/SRV/DNS/PlatDnsRules.robot +++ b/MEC011/SRV/DNS/PlatDnsRules.robot @@ -16,7 +16,7 @@ Default Tags TC_MEC_SRV_DNS *** Test Cases *** -TP_MEC_MEC011_SRV_DNS_001_OK +TC_MEC_MEC011_SRV_DNS_001_OK [Documentation] ... Check that the IUT responds with a list of active DNS rules ... when queried by a MEC Application @@ -25,11 +25,13 @@ TP_MEC_MEC011_SRV_DNS_001_OK ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.9.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo Get list of active DNS rules ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DnsRuleList - -TP_MEC_MEC011_SRV_DNS_001_NF + [Teardown] Delete MEC application instance profile ${APP_INSTANCE_ID} + +TC_MEC_MEC011_SRV_DNS_001_NF [Documentation] ... Check that the IUT responds with a list of active DNS rules ... when queried by a MEC Application @@ -38,13 +40,14 @@ TP_MEC_MEC011_SRV_DNS_001_NF ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.9.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Teardown] Delete MEC application instance profile ${NOT_EXISTENT_APP_INSTANCE_ID} Get list of active DNS rules ${NOT_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_DNS_002_OK +TC_MEC_MEC011_SRV_DNS_002_OK [Documentation] ... Check that the IUT responds with the information on a specific DNS rule ... when queried by a MEC Application @@ -53,6 +56,8 @@ TP_MEC_MEC011_SRV_DNS_002_OK ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo + Get individual DNS rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DnsRule @@ -60,7 +65,7 @@ TP_MEC_MEC011_SRV_DNS_002_OK -TP_MEC_MEC011_SRV_DNS_002_NF +TC_MEC_MEC011_SRV_DNS_002_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -69,11 +74,12 @@ TP_MEC_MEC011_SRV_DNS_002_NF ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + Get individual DNS rule ${APP_INSTANCE_ID} ${NON_ESISTENT_DNS_RULE_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_DNS_003_OK +TC_MEC_MEC011_SRV_DNS_003_OK [Documentation] ... Check that the IUT responds with the information on a specific DNS rule ... when queried by a MEC Application @@ -82,14 +88,16 @@ TP_MEC_MEC011_SRV_DNS_003_OK ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo Update a DNS Rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdate Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DnsRule Check Response Contains ${response['body']} dnsRuleId ${DNS_RULE_ID} Check Response Contains ${response['body']} ipAddress ${SOME_IP_ADDRESS} + [Teardown] Delete MEC application instance profile ${APP_INSTANCE_ID} + - -TP_MEC_MEC011_SRV_DNS_003_BR +TC_MEC_MEC011_SRV_DNS_003_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -99,11 +107,13 @@ TP_MEC_MEC011_SRV_DNS_003_BR ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo Update a DNS Rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdateError Check HTTP Response Status Code Is 400 + [Teardown] Delete MEC application instance profile ${APP_INSTANCE_ID} + - -TP_MEC_MEC011_SRV_DNS_003_NF +TC_MEC_MEC011_SRV_DNS_003_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -113,12 +123,14 @@ TP_MEC_MEC011_SRV_DNS_003_NF ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo Update a DNS Rule ${APP_INSTANCE_ID} ${NON_ESISTENT_DNS_RULE_ID} DnsRuleUpdate Check HTTP Response Status Code Is 404 + [Teardown] Delete MEC application instance profile ${APP_INSTANCE_ID} + - -TP_MEC_MEC011_SRV_DNS_003_PF +TC_MEC_MEC011_SRV_DNS_003_PF [Documentation] ... Check that the IUT responds with an error when ... a request sent by a MEC Application doesn't comply with a required condition @@ -127,12 +139,40 @@ TP_MEC_MEC011_SRV_DNS_003_PF ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo Update a DNS Rule with invalid etag ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdate Check HTTP Response Status Code Is 412 + [Teardown] Delete MEC application instance profile ${APP_INSTANCE_ID} + *** Keywords *** +Create a new MEC application instance profile + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST http://${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['appInstanceId']} + + + +Delete MEC application instance profile + [Arguments] ${app_instance_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete http://${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations/${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + Get list of active DNS rules [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} diff --git a/MEC011/SRV/DNS/environment/variables.txt b/MEC011/SRV/DNS/environment/variables.txt index 08e8d3a..4c2346c 100644 --- a/MEC011/SRV/DNS/environment/variables.txt +++ b/MEC011/SRV/DNS/environment/variables.txt @@ -10,6 +10,12 @@ ${apiName} mec_app_support ${apiVersion} v2 # Specific variables +${HOST_REG_APP} 127.0.0.1 +${PORT_REG_APP} 8082 +${apiRoot_REG_APP} +${apiName_REG_APP} mec_app_support +${apiVersion_REG_APP} v2 + ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${NOT_EXISTENT_APP_INSTANCE_ID} NOT_EXISTENT_APP_INSTANCE_ID ${DNS_RULE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 diff --git a/MEC011/SRV/DNS/jsons/AppInfo.json b/MEC011/SRV/DNS/jsons/AppInfo.json new file mode 100644 index 0000000..31c9053 --- /dev/null +++ b/MEC011/SRV/DNS/jsons/AppInfo.json @@ -0,0 +1,3 @@ +{ + "appName": "sampleAppName" +} \ No newline at end of file -- GitLab From 8bd05da7dbda5056b61e6f399259b6090831bfe2 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Tue, 19 Dec 2023 15:08:40 +0100 Subject: [PATCH 27/94] MEC028 completed for AP_INFO and EXT_SUB --- MEC028/WAI/AP_INFO/WaiApInfo.robot | 24 ++--- MEC028/WAI/AP_INFO/environment/variables.txt | 13 ++- MEC028/WAI/AP_INFO/jsons/APInfo.json | 0 MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json | 10 +- MEC028/WAI/EXT_SUB/ExistingSubscription.robot | 94 +++++++++++++++---- MEC028/WAI/EXT_SUB/environment/variables.txt | 12 ++- .../jsons/CreateAssocStaSubscription.json | 23 +++++ 7 files changed, 133 insertions(+), 43 deletions(-) create mode 100644 MEC028/WAI/AP_INFO/jsons/APInfo.json create mode 100644 MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json diff --git a/MEC028/WAI/AP_INFO/WaiApInfo.robot b/MEC028/WAI/AP_INFO/WaiApInfo.robot index c181ba0..39b43c5 100644 --- a/MEC028/WAI/AP_INFO/WaiApInfo.robot +++ b/MEC028/WAI/AP_INFO/WaiApInfo.robot @@ -9,13 +9,12 @@ Library String Library OperatingSystem Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false - *** Test Cases *** -TP_MEC_MEC028_SRV_WAI_001_OK +TC_MEC_MEC028_SRV_WAI_001_OK [Documentation] ... Check that the IUT responds with the list of WLAN Access Point - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.3.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/ApInfo ##Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.3.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/ApInfo Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the access point information @@ -28,11 +27,11 @@ TP_MEC_MEC028_SRV_WAI_001_OK END Should Be True ${passed} -TP_MEC_MEC028_SRV_WAI_002_OK +TC_MEC_MEC028_SRV_WAI_002_OK [Documentation] ... Check that the IUT responds with the list of WLAN Access Point filtered by the macId provided as query parameter - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.3.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/ApInfo ##Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.3.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/ApInfo Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the access point information using filters ${filter} @@ -46,11 +45,11 @@ TP_MEC_MEC028_SRV_WAI_002_OK Should Be True ${passed} -TP_MEC_MEC028_SRV_WAI_002_BR +TC_MEC_MEC028_SRV_WAI_002_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.3.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/ApInfo ##Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.3.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/ApInfo Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the access point information using filters ${bad_filter} @@ -78,4 +77,7 @@ Retrieve the access point information using filters Set Headers {"Authorization":"${TOKEN}"} GET ${apiRoot}/${apiName}/${apiVersion}/queries/ap/ap_information?filter=${filter} ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file + Set Suite Variable ${response} ${output} + + + diff --git a/MEC028/WAI/AP_INFO/environment/variables.txt b/MEC028/WAI/AP_INFO/environment/variables.txt index 0f20b2e..b368c61 100644 --- a/MEC028/WAI/AP_INFO/environment/variables.txt +++ b/MEC028/WAI/AP_INFO/environment/variables.txt @@ -4,11 +4,16 @@ ${apiName} wai ${apiVersion} v2 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 127.0.0.1 -${MEC-APP_PORT} 8082 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3001 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${MAC_ID} macId01 -${filter} (eq,apId/macId,macId01) -${bad_filter} (eq,apId/mac,macId01) \ No newline at end of file +${filter} macId01 +${bad_filter} badMacId + +${REGISTER_ACTION} REGISTER +${REMOVE_ACTION} REMOVE +${NO_ACTION} NO_ACTION +${DEVICE_ID_PLACEHOLDER} PLACEHOLDER_DEVICEID diff --git a/MEC028/WAI/AP_INFO/jsons/APInfo.json b/MEC028/WAI/AP_INFO/jsons/APInfo.json new file mode 100644 index 0000000..e69de29 diff --git a/MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json b/MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json index 19cc713..854d99f 100644 --- a/MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json +++ b/MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json @@ -248,7 +248,7 @@ "geolocation": { "properties": { "altitude": { - "description": "The altitude value of location as defined in IETF RFC 6225 [6]", + "description": "The altitude value of location as defined in IETF RFC 6225 [6]", "format": "uint32", "type": "integer", "x-etsi-mec-cardinality": "0..1", @@ -276,7 +276,7 @@ "x-etsi-mec-origin-type": "Uint8" }, "lat": { - "description": "The latitude value of location as defined in IETF RFC 6225 [6]", + "description": "The latitude value of location as defined in IETF RFC�6225 [6]", "format": "int64", "type": "integer", "x-etsi-mec-cardinality": "1", @@ -290,7 +290,7 @@ "x-etsi-mec-origin-type": "Uint8" }, "long": { - "description": "The longitude value of location as defined in IETF RFC 6225 [6]", + "description": "The longitude value of location as defined in IETF RFC�6225 [6]", "format": "int64", "type": "integer", "x-etsi-mec-cardinality": "1", @@ -375,7 +375,7 @@ "x-etsi-mec-origin-type": "Uint16" }, "channelUtilization": { - "description": "The percentage of time, linearly scaled with 255 representing 100 %, that the AP sensed the medium was busy, as indicated by either the physical or virtual Carrier Sense (CS) mechanism.", + "description": "The percentage of time, linearly scaled with 255 representing 100�%, that the AP sensed the medium was busy, as indicated by either the physical or virtual Carrier Sense (CS) mechanism.", "format": "uint8", "type": "integer", "x-etsi-mec-cardinality": "1", @@ -435,7 +435,7 @@ "x-etsi-mec-origin-type": "Uint8" }, "spatStreamUnderUtil": { - "description": "The percentage of time, linearly scaled with 255 representing 100 %, that the AP has underutilized spatial domain resources for given busy time of the medium.", + "description": "The percentage of time, linearly scaled with 255 representing 100�%, that the AP has underutilized spatial domain resources for given busy time of the medium.", "format": "uint8", "type": "integer", "x-etsi-mec-cardinality": "1", diff --git a/MEC028/WAI/EXT_SUB/ExistingSubscription.robot b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot index 187ff91..2015b8b 100644 --- a/MEC028/WAI/EXT_SUB/ExistingSubscription.robot +++ b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot @@ -5,16 +5,21 @@ Resource environment/variables.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot +Library Collections Library String Library OperatingSystem Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false *** Test Cases *** -TP_MEC_MEC028_SRV_WAI_008_OK +TC_MEC_MEC028_SRV_WAI_008_OK [Documentation] ... Check that the IUT responds with the list of Subscription" - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.6.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription ##Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.6.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription + + [Setup] Create New Subscription Info ${SUB_ID} + Set Suite Variable ${Location} ${response['headers']['Location']} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve existing subscription information ${SUB_ID} @@ -22,25 +27,31 @@ TP_MEC_MEC028_SRV_WAI_008_OK Check HTTP Response Body Json Schema Is AssocStaSubscription Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE} Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URI} - Should Be Equal As Strings ${response['body']['apId']['macId']} ${MAC_ID} + Should Be Equal As Strings ${response['body']['apId']['bssid']} ${BSSID} + + [TearDown] Remove Subscription Info ${Location} -TP_MEC_MEC028_SRV_WAI_008_NF +TC_MEC_MEC028_SRV_WAI_008_NF [Documentation] ... Check that the IUT responds with an error when a request for existing subscription with incorrect parameters is sent" - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.6.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription ##Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.6.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription + [Setup] Remove Subscription Info Using SubId ${SUB_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve existing subscription information ${NOT_EXISTING_SUB_ID} - Check HTTP Response Status Code Is 404 - + Check HTTP Response Status Code Is 404 *** Test Cases *** -TP_MEC_MEC028_SRV_WAI_009_OK +TC_MEC_MEC028_SRV_WAI_009_OK [Documentation] ... Check that the IUT responds with a Notification Subscription when it is modified" - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.6.3.2 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription ##Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.6.3.2 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription + [Setup] Create New Subscription Info ${SUB_ID} + Set Suite Variable ${Location} ${response['headers']['Location']} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Modify existing subscription information ${SUB_ID} UpdateAssocStaSubscription.json @@ -49,31 +60,40 @@ TP_MEC_MEC028_SRV_WAI_009_OK Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE} Should Be Equal As Strings ${response['body']['callbackReference']} ${NEW_CALLBACK_URI} Should Be Equal As Strings ${response['body']['apId']['macId']} ${MAC_ID} + + [TearDown] Remove Subscription Info ${Location} -TP_MEC_MEC028_SRV_WAI_009_BR +TC_MEC_MEC028_SRV_WAI_009_BR [Documentation] ... Check that the IUT responds with an error when an invalid field is set in the subscription modification request" - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.6.3.2 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription ##Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.6.3.2 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - Modify existing subscription information ${SUB_ID} UpdateAssocStaSubscription_BR.json + Modify existing subscription information ${BAD_REQUEST_SUB_ID} UpdateAssocStaSubscription_BR.json Check HTTP Response Status Code Is 400 -TP_MEC_MEC028_SRV_WAI_010_OK +TC_MEC_MEC028_SRV_WAI_010_OK [Documentation] ... Check that the IUT responds with 204 when an existing subscription is correctly deleted" - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.6.3.5 + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.6.3.5 + + [Setup] Create New Subscription Info ${SUB_ID} + Set Suite Variable ${Location} ${response['headers']['Location']} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription information ${SUB_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC028_SRV_WAI_010_NF +TC_MEC_MEC028_SRV_WAI_010_NF [Documentation] ... Check that the IUT responds with an error when an not existing subscription cannot be deleted" ... Reference "ETSI GS MEC 028 2.2.1, clause 7.6.3.5 + + [Setup] Remove Subscription Info Using SubId ${NOT_EXISTING_SUB_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription information ${NOT_EXISTING_SUB_ID} @@ -115,4 +135,38 @@ Remove existing subscription information Set Headers {"Authorization":"${TOKEN}"} DELETE ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${SUB_ID} ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file + Set Suite Variable ${response} ${output} + +Create New Subscription Info + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + ${file}= Catenate SEPARATOR= jsons/ CreateAssocStaSubscription .json + ${body}= Get File ${file} + ${json_data}= Evaluate json.loads('''${body}''') json + Log Original JSON: ${json_data} + ${new_href}= Set Variable ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT}/${apiRoot}/${apiName}/${apiVersion}/subscriptions/${SUB_ID} + Set To Dictionary ${json_data["_links"]["self"]} href=${new_href} + ${modified_json_string}= Evaluate json.dumps(${json_data}) + + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${modified_json_string} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove Subscription Info + [Arguments] ${delete_url} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + DELETE ${delete_url} + +Remove Subscription Info Using SubId + [Arguments] ${SUB_ID} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + DELETE ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT}/${apiRoot}/${apiName}/${apiVersion}/subscriptions/${SUB_ID} \ No newline at end of file diff --git a/MEC028/WAI/EXT_SUB/environment/variables.txt b/MEC028/WAI/EXT_SUB/environment/variables.txt index d7beea8..7bf7a4b 100644 --- a/MEC028/WAI/EXT_SUB/environment/variables.txt +++ b/MEC028/WAI/EXT_SUB/environment/variables.txt @@ -4,14 +4,20 @@ ${apiName} wai ${apiVersion} v2 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 127.0.0.1 -${MEC-APP_PORT} 8082 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3001 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${SUB_TYPE} AssocStaSubscription ${SUB_ID} 1 ${NOT_EXISTING_SUB_ID} 99 +${BAD_REQUEST_SUB_ID} 98 ${CALLBACK_URI} http://callback.uri/1 ${NEW_CALLBACK_URI} http://new.callback.uri/1 -${MAC_ID} macId01 \ No newline at end of file +${MAC_ID} macId01 +${BSSID} 005C0A0A0A0A + +${REGISTER_ACTION} REGISTER +${REMOVE_ACTION} REMOVE +${NO_ACTION} NO_ACTION \ No newline at end of file diff --git a/MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json b/MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json new file mode 100644 index 0000000..3e04ff8 --- /dev/null +++ b/MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json @@ -0,0 +1,23 @@ +{ + "subscriptionType": "AssocStaSubscription", + "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", + "_links": { + "self": { + "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" + } + }, + "expiryDeadline": { + "seconds": 1977836800, + "nanoSeconds": 0 + }, + "apId": { + "bssid": "005C0A0A0A0A", + "ssid": [ + "myNetworkSsid" + ], + "macId": "macId01", + "ipAddress": [ + "10.10.100.1" + ] + } +} \ No newline at end of file -- GitLab From 5628f0188d0e62e605645eb61e71f89c471dc7ef Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Wed, 20 Dec 2023 10:43:45 +0100 Subject: [PATCH 28/94] Draft TCs for MEC011 v3.2.1 available --- MEC011/SRV/APPSUB/environment/variables.txt | 4 +- MEC011/SRV/{LIV => MLS}/Liveness.robot | 46 ++++-- MEC011/SRV/{LIV => MLS}/README.md | 0 .../{LIV => MLS}/environment/variables.txt | 12 +- MEC011/SRV/MLS/jsons/ServiceInfo.json | 8 + .../jsons/ServiceLivenessUpdate.json | 0 .../jsons/ServiceLivenessUpdateError.json | 0 .../schemas/ServiceLivenessInfo.schema.json | 0 MEC011/SRV/REGAPPS/RegApps.robot | 97 +++++++----- MEC011/SRV/REGAPPS/jsons/ServiceInfo.json | 8 + MEC011/SRV/SAQ/PlatServices.robot | 49 ++++-- MEC011/SRV/SAQ/environment/variables.txt | 13 +- MEC011/SRV/SAQ/jsons/ServiceInfo.json | 8 + MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot | 130 +++++++++++----- MEC011/SRV/SRVSUB/environment/variables.txt | 11 +- MEC011/SRV/SRVSUB/jsons/AppInfo.json | 3 + ...labilityNotificationSubscriptionError.json | 2 +- MEC011/SRV/TIME/PlatTiming.robot | 17 +-- MEC011/SRV/TIME/environment/variables.txt | 2 +- MEC011/SRV/TRAF/PlatTrafficRules.robot | 111 +++++++++----- MEC011/SRV/TRAF/environment/variables.txt | 11 +- MEC011/SRV/TRAF/jsons/AppInfo.json | 3 + MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json | 6 +- .../TRAF/jsons/TrafficRuleUpdateError.json | 141 +++++++++--------- MEC011/SRV/TRANS/PlatTransport.robot | 7 +- 25 files changed, 459 insertions(+), 230 deletions(-) rename MEC011/SRV/{LIV => MLS}/Liveness.robot (70%) rename MEC011/SRV/{LIV => MLS}/README.md (100%) rename MEC011/SRV/{LIV => MLS}/environment/variables.txt (59%) create mode 100644 MEC011/SRV/MLS/jsons/ServiceInfo.json rename MEC011/SRV/{LIV => MLS}/jsons/ServiceLivenessUpdate.json (100%) rename MEC011/SRV/{LIV => MLS}/jsons/ServiceLivenessUpdateError.json (100%) rename MEC011/SRV/{LIV => MLS}/schemas/ServiceLivenessInfo.schema.json (100%) create mode 100644 MEC011/SRV/REGAPPS/jsons/ServiceInfo.json create mode 100644 MEC011/SRV/SAQ/jsons/ServiceInfo.json create mode 100644 MEC011/SRV/SRVSUB/jsons/AppInfo.json create mode 100644 MEC011/SRV/TRAF/jsons/AppInfo.json diff --git a/MEC011/SRV/APPSUB/environment/variables.txt b/MEC011/SRV/APPSUB/environment/variables.txt index c66b1e9..aa73f74 100644 --- a/MEC011/SRV/APPSUB/environment/variables.txt +++ b/MEC011/SRV/APPSUB/environment/variables.txt @@ -18,7 +18,7 @@ ${APP_TERM_NOTIF_CALLBACK_URI} http://127.0.0.1/subscribe ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID - +${SUB_ID} # ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription @@ -34,4 +34,4 @@ ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID # ${callback_endpoint} /amsi/subscriptions # ${callback_endpoint_error} /subs_404 # ${total_polling_time} 2 min -# ${polling_interval} 10 sec \ No newline at end of file +# ${polling_interval} 10 sec diff --git a/MEC011/SRV/LIV/Liveness.robot b/MEC011/SRV/MLS/Liveness.robot similarity index 70% rename from MEC011/SRV/LIV/Liveness.robot rename to MEC011/SRV/MLS/Liveness.robot index 72fd4ba..7dbf1ad 100644 --- a/MEC011/SRV/LIV/Liveness.robot +++ b/MEC011/SRV/MLS/Liveness.robot @@ -10,8 +10,7 @@ Library OperatingSystem *** Test Cases *** - -TP_MEC_MEC011_SRV_MSL_001_OK +TC_MEC_MEC011_SRV_MSL_001_OK [Documentation] ... Check that the IUT responds with the liveness of a MEC service instance ... when queried by a MEC Application @@ -19,13 +18,14 @@ TP_MEC_MEC011_SRV_MSL_001_OK ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.4", ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - Individual MEC service liveness ${URL_SERVICE_MEC_LIVENESS} + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + Individual MEC service liveness ${LIVENESS_URI} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceLivenessInfo Check Response Contains ${response['body']} state ACTIVE - - -TP_MEC_MEC011_SRV_MSL_001_NF + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_NAME} + +TC_MEC_MEC011_SRV_MSL_001_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an URI that cannot be mapped to a valid resource URI @@ -38,7 +38,7 @@ TP_MEC_MEC011_SRV_MSL_001_NF Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_MSL_002_OK_01 +TC_MEC_MEC011_SRV_MSL_002_OK_01 [Documentation] ... Check that the IUT updates the liveness of a MEC service instance ... when requested by a MEC Application @@ -49,13 +49,15 @@ TP_MEC_MEC011_SRV_MSL_002_OK_01 Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ServiceLivenessUpdate .json ${body}= Get File ${file} + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Update MEC service liveness ${URL_SERVICE_MEC_LIVENESS} ${body} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceLivenessInfo Check Response Contains ${response['body']} state ACTIVE + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_NAME} -TP_MEC_MEC011_SRV_MSL_002_OK_02 +TC_MEC_MEC011_SRV_MSL_002_OK_02 [Documentation] ... Check that the IUT updates the liveness of a MEC service instance ... when requested by a MEC Application @@ -71,7 +73,7 @@ TP_MEC_MEC011_SRV_MSL_002_OK_02 Check HTTP Response Status Code Is 204 -TP_MEC_MEC011_SRV_MSL_002_BR +TC_MEC_MEC011_SRV_MSL_002_BR [Documentation] ... Check that the IUT responds with an error when ... incorrect parameters were sent by a MEC Application @@ -88,6 +90,32 @@ TP_MEC_MEC011_SRV_MSL_002_BR *** Keywords *** +Create new service + [Arguments] ${content} ${appInstanceId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Suite Variable ${LIVENESS_URI} ${response['body']['_links']['liveness']['href']} + Set Suite Variable ${SERVICE_NAME} ${response['body']['serName']} + + + +Remove individual service + [Arguments] ${appInstanceId} ${serviceName} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} + DELETE http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services/${serviceName} + ${output}= Output response + Set Suite Variable ${response} ${output} + + Individual MEC service liveness [Arguments] ${URL_MEC_SERVICE_LIVENESS} Set Headers {"Accept":"application/json"} diff --git a/MEC011/SRV/LIV/README.md b/MEC011/SRV/MLS/README.md similarity index 100% rename from MEC011/SRV/LIV/README.md rename to MEC011/SRV/MLS/README.md diff --git a/MEC011/SRV/LIV/environment/variables.txt b/MEC011/SRV/MLS/environment/variables.txt similarity index 59% rename from MEC011/SRV/LIV/environment/variables.txt rename to MEC011/SRV/MLS/environment/variables.txt index eb2e7bf..c421169 100644 --- a/MEC011/SRV/LIV/environment/variables.txt +++ b/MEC011/SRV/MLS/environment/variables.txt @@ -9,4 +9,14 @@ ${apiRoot} # Specific variables ${URL_SERVICE_MEC_LIVENESS} /link/to/individual/mecServiceLiveness -${NOT_EXISING_URL_SERVICE_MEC_LIVENESS} /not_existing_link/to/individual/mecServiceLiveness \ No newline at end of file +${NOT_EXISING_URL_SERVICE_MEC_LIVENESS} /not_existing_link/to/individual/mecServiceLiveness + + +#Variables for test setups and teardowns +${HOST_APP_SAQ} 127.0.0.1 +${PORT_APP_SAQ} 8082 +${apiRoot_APP_SAQ} +${apiName_APP_SAQ} mec_service_mgmt +${apiVersion_APP_SAQ} v1 +${APP_INSTANCE_ID} appInstanceId +${SERVICE_NAME} diff --git a/MEC011/SRV/MLS/jsons/ServiceInfo.json b/MEC011/SRV/MLS/jsons/ServiceInfo.json new file mode 100644 index 0000000..1cc5adf --- /dev/null +++ b/MEC011/SRV/MLS/jsons/ServiceInfo.json @@ -0,0 +1,8 @@ +{ + "serName": "serviceName", + "version": "0.1", + "state": "INACTIVE", + "serializer": "XML", + "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", + "transportId": "transportId" +} \ No newline at end of file diff --git a/MEC011/SRV/LIV/jsons/ServiceLivenessUpdate.json b/MEC011/SRV/MLS/jsons/ServiceLivenessUpdate.json similarity index 100% rename from MEC011/SRV/LIV/jsons/ServiceLivenessUpdate.json rename to MEC011/SRV/MLS/jsons/ServiceLivenessUpdate.json diff --git a/MEC011/SRV/LIV/jsons/ServiceLivenessUpdateError.json b/MEC011/SRV/MLS/jsons/ServiceLivenessUpdateError.json similarity index 100% rename from MEC011/SRV/LIV/jsons/ServiceLivenessUpdateError.json rename to MEC011/SRV/MLS/jsons/ServiceLivenessUpdateError.json diff --git a/MEC011/SRV/LIV/schemas/ServiceLivenessInfo.schema.json b/MEC011/SRV/MLS/schemas/ServiceLivenessInfo.schema.json similarity index 100% rename from MEC011/SRV/LIV/schemas/ServiceLivenessInfo.schema.json rename to MEC011/SRV/MLS/schemas/ServiceLivenessInfo.schema.json diff --git a/MEC011/SRV/REGAPPS/RegApps.robot b/MEC011/SRV/REGAPPS/RegApps.robot index 6efdd88..a7e64dd 100644 --- a/MEC011/SRV/REGAPPS/RegApps.robot +++ b/MEC011/SRV/REGAPPS/RegApps.robot @@ -12,13 +12,12 @@ Default Tags TC_MEC_SRV_REGAPPS *** Test Cases *** - -TP_MEC_MEC011_SRV_REGAPPS_001_OK_01 +TC_MEC_MEC011_SRV_REGAPPS_001_OK_01 [Documentation] ... Check that the IUT acknowledges the registration ... by a MEC Application to the MEC platform ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfo @@ -26,108 +25,116 @@ TP_MEC_MEC011_SRV_REGAPPS_001_OK_01 Check HTTP Response Header Contains Location Check HTTP Response Body Json Schema Is AppInfo Check Response Contains ${response['body']} appName ${APP_NAME} - + [TearDown] Delete MEC application instance profile ${response['body']['appInstanceId']} -TP_MEC_MEC011_SRV_REGAPPS_001_OK_02 +TC_MEC_MEC011_SRV_REGAPPS_001_OK_02 [Documentation] ... Check that the IUT acknowledges the registration ... by a MEC Application to the MEC platform ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfo2 + ${APP_INSTANCE_ID_REQ} Get value entry from JSON file AppInfo2 appInstanceId Check HTTP Response Status Code Is 201 Check HTTP Response Header Contains Location Check HTTP Response Body Json Schema Is AppInfo Check Response Contains ${response['body']} appName ${APP_NAME} - Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID} + Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID_REQ} + [TearDown] Delete MEC application instance profile ${APP_INSTANCE_ID_REQ} + -TP_MEC_MEC011_SRV_REGAPPS_001_OK_03 +TC_MEC_MEC011_SRV_REGAPPS_001_OK_03 [Documentation] ... Check that the IUT acknowledges the registration ... by a MEC Application to the MEC platform ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfo3 + ${APP_INSTANCE_ID_REQ} Get value entry from JSON file AppInfo3 appInstanceId + ${APPD_NAME_REQ} Get value entry from JSON file AppInfo3 appName + ${APPD_ID_REQ} Get value entry from JSON file AppInfo3 appDId + Check HTTP Response Status Code Is 201 Check HTTP Response Header Contains Location Check HTTP Response Body Json Schema Is AppInfo Check Response Contains ${response['body']} appName ${APP_NAME} - Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID} - Check Response Contains ${response['body']} appDId ${APPD_ID} - + Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID_REQ} + Check Response Contains ${response['body']} appDId ${APPD_ID_REQ} + [TearDown] Delete MEC application instance profile ${APP_INSTANCE_ID_REQ} + -TP_MEC_MEC011_SRV_REGAPPS_001_BR_01 +TC_MEC_MEC011_SRV_REGAPPS_001_BR_01 [Documentation] ... Check that the IUT responds with an error message when the IUT received a registration with ... missing fields from a MEC Application instantiated by the MEC platform ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR1 Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_REGAPPS_001_BR_02 +TC_MEC_MEC011_SRV_REGAPPS_001_BR_02 [Documentation] ... Check that the IUT responds with an error message ... when the IUT received by a MEC Application registration with missing endpoint ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR2 Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_REGAPPS_001_BR_03 +TC_MEC_MEC011_SRV_REGAPPS_001_BR_03 [Documentation] ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appServiceRequired ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR3 Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_REGAPPS_001_BR_04 +TC_MEC_MEC011_SRV_REGAPPS_001_BR_04 [Documentation] ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appServiceRequired ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR4 Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_REGAPPS_001_BR_05 +TC_MEC_MEC011_SRV_REGAPPS_001_BR_05 [Documentation] ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appFeatureRequired ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR5 Check HTTP Response Status Code Is 400 -TP_MEC_MEC011_SRV_REGAPPS_001_BR_06 +TC_MEC_MEC011_SRV_REGAPPS_001_BR_06 [Documentation] ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appFeatureOptional ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.13.3.4 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR6 @@ -135,80 +142,90 @@ TP_MEC_MEC011_SRV_REGAPPS_001_BR_06 -TP_MEC_MEC011_SRV_REGAPPS_002_OK +TC_MEC_MEC011_SRV_REGAPPS_002_OK [Documentation] ... Check that the IUT responds with the AppInfo description ... when queried by a MEC Application ... - ... ETSI GS MEC 011 3.1.1, clause 7.2.14.3.1 + ... ETSI GS MEC 011 3.2.1, clause 7.2.14.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get MEC application instance profile ${APP_INSTANCE_ID} + [Setup] Create a new MEC application instance profile AppInfo + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['appInstanceId']} + Get MEC application instance profile ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppInfo Check Response Contains ${response['body']} appInstanceId ${APP_INSTANCE_ID} - + [TearDown] Delete MEC application instance profile ${APP_INSTANCE_ID} -TP_MEC_MEC011_SRV_REGAPPS_002_NF +TC_MEC_MEC011_SRV_REGAPPS_002_NF [Documentation] ... Check that the IUT responds with an error ... when it receives a request for returning an AppInfo with a wrong ID ... - ... ETSI GS MEC 011 3.1.1, clause 7.2.14.3.1 + ... ETSI GS MEC 011 3.2.1, clause 7.2.14.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Delete MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} Get MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_REGAPPS_003_OK +TC_MEC_MEC011_SRV_REGAPPS_003_OK [Documentation] ... Check that the IUT responds with 204 No Content ... when queried to update MEC Application registration ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.2 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.14.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['appInstanceId']} Update MEC application registration ${APP_INSTANCE_ID} AppInfoUpdate Check HTTP Response Status Code Is 204 + [TearDown] Delete MEC application instance profile ${APP_INSTANCE_ID} + - -TP_MEC_MEC011_SRV_REGAPPS_003_NF +TC_MEC_MEC011_SRV_REGAPPS_003_NF [Documentation] ... Check that the IUT responds with 204 No Content ... when queried to update MEC Application registration ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.2 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.14.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Delete MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} Update MEC application registration ${NOT_EXISTING_APP_INSTANCE_ID} AppInfoUpdate Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_REGAPPS_004_OK +TC_MEC_MEC011_SRV_REGAPPS_004_OK [Documentation] ... Check that the IUT responds with 204 No Content ... when queried to delete an existing MEC Application registration ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.5 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.14.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile AppInfo + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['appInstanceId']} Delete MEC application instance profile ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC011_SRV_REGAPPS_004_NF +TC_MEC_MEC011_SRV_REGAPPS_004_NF [Documentation] ... Check that the IUT responds with an error when queried to ... delete an unknown MEC Application registration ... - ... Reference ETSI GS MEC 011 3.1.1, clause 7.2.14.3.5 + ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.14.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Delete MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} Delete MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 @@ -255,8 +272,6 @@ Update MEC application registration Set Suite Variable ${response} ${output} - - Delete MEC application instance profile [Arguments] ${app_instance_id} Set Headers {"Accept":"application/json"} diff --git a/MEC011/SRV/REGAPPS/jsons/ServiceInfo.json b/MEC011/SRV/REGAPPS/jsons/ServiceInfo.json new file mode 100644 index 0000000..1cc5adf --- /dev/null +++ b/MEC011/SRV/REGAPPS/jsons/ServiceInfo.json @@ -0,0 +1,8 @@ +{ + "serName": "serviceName", + "version": "0.1", + "state": "INACTIVE", + "serializer": "XML", + "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", + "transportId": "transportId" +} \ No newline at end of file diff --git a/MEC011/SRV/SAQ/PlatServices.robot b/MEC011/SRV/SAQ/PlatServices.robot index c699340..72142b6 100644 --- a/MEC011/SRV/SAQ/PlatServices.robot +++ b/MEC011/SRV/SAQ/PlatServices.robot @@ -13,8 +13,7 @@ Default Tags TC_MEC_SRV_SAQ *** Test Cases *** - -TP_MEC_MEC011_SRV_SAQ_001_OK +TC_MEC_MEC011_SRV_SAQ_001_OK [Documentation] ... Check that the IUT responds with a list of available MEC services ... when queried by a MEC Application @@ -24,12 +23,15 @@ TP_MEC_MEC011_SRV_SAQ_001_OK ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + ${SER_NAME} Get value entry from JSON file ServiceInfo serName Get list of available MEC services Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfoList + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SER_NAME} + - -TP_MEC_MEC011_SRV_SAQ_001_BR +TC_MEC_MEC011_SRV_SAQ_001_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -39,11 +41,14 @@ TP_MEC_MEC011_SRV_SAQ_001_BR ... Reference "ETSI GS MEC 011 3.2.1, clause 8.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + ${SER_NAME} Get value entry from JSON file ServiceInfo serName Get list of available MEC services with parameters instance_id ${INVALID_VALUE} Check HTTP Response Status Code Is 400 + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SER_NAME} -TP_MEC_MEC011_SRV_SAQ_002_OK +TC_MEC_MEC011_SRV_SAQ_002_OK [Documentation] ... Check that the IUT responds with the information on a specific service ... when queried by a MEC Application @@ -52,13 +57,15 @@ TP_MEC_MEC011_SRV_SAQ_002_OK ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", ... "ETSI GS MEC 011 3.2.1, clause 8.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - Get specific MEC service ${SERVICE_ID} + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + ${SER_NAME} Get value entry from JSON file ServiceInfo serName + Get specific MEC service ${response['body']['serInstanceId']} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfo - Check Response Contains ${response['body']} serInstanceId ${SERVICE_ID} - + Check Response Contains ${response['body']} serInstanceId ${response['body']['serInstanceId']} + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SER_NAME} -TP_MEC_MEC011_SRV_SAQ_002_NF +TC_MEC_MEC011_SRV_SAQ_002_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -67,11 +74,35 @@ TP_MEC_MEC011_SRV_SAQ_002_NF ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.2", ... "ETSI GS MEC 011 3.2.1, clause 8.2.4.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${NON_EXISTENT_SERVICE_ID} Get specific MEC service ${NON_EXISTENT_SERVICE_ID} Check HTTP Response Status Code Is 404 *** Keywords *** +Create new service + [Arguments] ${content} ${appInstanceId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Suite Variable ${SERVICE_NAME} ${response['body']['serName']} + +Remove individual service + [Arguments] ${appInstanceId} ${serviceName} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} + DELETE http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services/${serviceName} + ${output}= Output response + Set Suite Variable ${response} ${output} + + Get list of available MEC services with parameters [Arguments] ${key}=None ${value}=None Set Headers {"Accept":"application/json"} diff --git a/MEC011/SRV/SAQ/environment/variables.txt b/MEC011/SRV/SAQ/environment/variables.txt index f7395c2..633b86c 100644 --- a/MEC011/SRV/SAQ/environment/variables.txt +++ b/MEC011/SRV/SAQ/environment/variables.txt @@ -2,7 +2,7 @@ # Generic variables ${SCHEMA} http ${HOST} 127.0.0.1 -${PORT} 8081 +${PORT} 8082 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} @@ -38,4 +38,13 @@ ${INVALID_ETAG} INVALID_ETAG # ${callback_endpoint} /amsi/subscriptions # ${callback_endpoint_error} /subs_404 # ${total_polling_time} 2 min -# ${polling_interval} 10 sec \ No newline at end of file +# ${polling_interval} 10 sec + +#Variables for test setups and teardowns +${HOST_APP_SAQ} 127.0.0.1 +${PORT_APP_SAQ} 8082 +${apiRoot_APP_SAQ} +${apiName_APP_SAQ} mec_service_mgmt +${apiVersion_APP_SAQ} v1 +${APP_INSTANCE_ID} appInstanceId +${SERVICE_NAME} \ No newline at end of file diff --git a/MEC011/SRV/SAQ/jsons/ServiceInfo.json b/MEC011/SRV/SAQ/jsons/ServiceInfo.json new file mode 100644 index 0000000..1cc5adf --- /dev/null +++ b/MEC011/SRV/SAQ/jsons/ServiceInfo.json @@ -0,0 +1,8 @@ +{ + "serName": "serviceName", + "version": "0.1", + "state": "INACTIVE", + "serializer": "XML", + "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", + "transportId": "transportId" +} \ No newline at end of file diff --git a/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot b/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot index 1c9edc8..b1cd77d 100644 --- a/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot +++ b/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot @@ -7,120 +7,180 @@ Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem - +Library String Default Tags TC_MEC_SRV_SRVSUB *** Test Cases *** -TP_MEC_MEC011_SRV_SRVSUB_001_OK +TC_MEC_MEC011_SRV_SRVSUB_001_OK [Documentation] ... Check that the IUT responds with a list of subscriptions for notifications ... on services availability when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.8.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/MecServiceMgmtApiSubscriptionLinkList - - [Tags] PIC_MEC_PLAT PIC_SERVICES + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.8.3.1" + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile and create subscription AppInfo SerAvailabilityNotificationSubscription Get list of subscriptions ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SubscriptionLinkList + [TearDown] Remove subscription and Delete MEC application instance profile ${SUB_ID} ${APP_INSTANCE_ID} -TP_MEC_MEC011_SRV_SRVSUB_001_NF +TC_MEC_MEC011_SRV_SRVSUB_001_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.8.3.1 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.8.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove MEC application ${NON_EXISTENT_INSTANCE_ID} Get list of subscriptions ${NON_EXISTENT_INSTANCE_ID} Check HTTP Response Status Code Is 404 - -TP_MEC_MEC011_SRV_SRVSUB_002_OK +TC_MEC_MEC011_SRV_SRVSUB_002_OK [Documentation] ... Check that the IUT acknowledges the subscription by a MEC Application ... to notifications on service availability events ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.8.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/SerAvailabilityNotificationSubscription - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.8.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo Create a new subscription ${APP_INSTANCE_ID} SerAvailabilityNotificationSubscription + ${APP_SRVSUB_NOTIF_CALLBACK_URI} Get value entry from JSON file SerAvailabilityNotificationSubscription callbackReference + ${SUB_TYPE} Get value entry from JSON file SerAvailabilityNotificationSubscription subscriptionType + Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is SerAvailabilityNotificationSubscription Check HTTP Response Header Contains Location - Check Response Contains ${response['body']} subscriptionType SerAvailabilityNotificationSubscription - Check Response Contains ${response['body']} callbackReference ${APP_SRVSUB_NOTIF_CALLBACK_URI} - + Check Response Contains ${response['body']} subscriptionType ${SUB_TYPE} + Check Response Contains ${response['body']} callbackReference ${APP_SRVSUB_NOTIF_CALLBACK_URI} + [TearDown] Remove MEC application ${APP_INSTANCE_ID} + -TP_MEC_MEC011_SRV_SRVSUB_002_BR +TC_MEC_MEC011_SRV_SRVSUB_002_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.8.3.4 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/SerAvailabilityNotificationSubscription - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.8.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo Create a new subscription ${APP_INSTANCE_ID} SerAvailabilityNotificationSubscriptionError Check HTTP Response Status Code Is 400 + [TearDown] Remove MEC application ${APP_INSTANCE_ID} -TP_MEC_MEC011_SRV_SRVSUB_003_OK +TC_MEC_MEC011_SRV_SRVSUB_003_OK [Documentation] ... Check that the IUT responds with the information on a specific subscription ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.9.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/SerAvailabilityNotificationSubscription - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.9.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - Get individual subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} + [Setup] Create a new MEC application instance profile and create subscription AppInfo SerAvailabilityNotificationSubscription + + Get individual subscription ${APP_INSTANCE_ID} ${SUB_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SerAvailabilityNotificationSubscription Check Response Contains ${response['body']} subscriptionType SerAvailabilityNotificationSubscription + [TearDown] Remove subscription and Delete MEC application instance profile ${SUB_ID} ${APP_INSTANCE_ID} -TP_MEC_MEC011_SRV_SRVSUB_003_NF + + +TC_MEC_MEC011_SRV_SRVSUB_003_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.9.3.1 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.9.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo Get individual subscription ${APP_INSTANCE_ID} ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 + [TearDown] Remove MEC application ${APP_INSTANCE_ID} - -TP_MEC_MEC011_SRV_SRVSUB_004_OK +TC_MEC_MEC011_SRV_SRVSUB_004_OK [Documentation] ... Check that the IUT acknowledges the unsubscribe from service availability event notifications ... when commanded by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.9.3.5 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.9.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application instance profile and create subscription AppInfo SerAvailabilityNotificationSubscription Remove subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC011_SRV_SRVSUB_004_NF +TC_MEC_MEC011_SRV_SRVSUB_004_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.9.3.5 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.9.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES + [TearDown] Remove MEC application ${NON_EXISTENT_INSTANCE_ID} Remove subscription ${NON_EXISTENT_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 *** Keywords *** + +Create a new MEC application + [Arguments] ${reg_app_content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${reg_app_content} .json + ${body}= Get File ${file} + POST http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations ${body} + ${output}= Output response + Set Suite Variable ${APP_INSTANCE_ID} ${output['body']['appInstanceId']} + +Remove MEC application + [Arguments] ${app_instance_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + DELETE http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations/${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Create a new MEC application instance profile and create subscription + [Arguments] ${reg_app_content} ${sub_content} + Create a new MEC application ${reg_app_content} + Create a new subscription ${APP_INSTANCE_ID} ${sub_content} + ${elements} = Split String ${response['body']['_links']['self']['href']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + + +Remove subscription and Delete MEC application instance profile + [Arguments] ${subscription_id} ${app_instance_id} + Remove subscription ${appInstanceId} ${subscription_id} + Remove MEC application ${app_instance_id} + + Get list of subscriptions [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} diff --git a/MEC011/SRV/SRVSUB/environment/variables.txt b/MEC011/SRV/SRVSUB/environment/variables.txt index 0e357a5..270fc5f 100644 --- a/MEC011/SRV/SRVSUB/environment/variables.txt +++ b/MEC011/SRV/SRVSUB/environment/variables.txt @@ -2,7 +2,7 @@ # Generic variables ${SCHEMA} http ${HOST} 127.0.0.1 -${PORT} 8081 +${PORT} 8082 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} @@ -15,3 +15,12 @@ ${NON_EXISTENT_INSTANCE_ID} NON_EXISTENT_INSTANCE_ID ${APP_SRVSUB_NOTIF_CALLBACK_URI} http://127.0.0.1/subscribe ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID + + +##Registration app setup test case variables +${HOST_REGAPP} 127.0.0.1 +${PORT_REGAPP} 8081 +${apiRoot_REGAPP} +${apiName_REGAPP} mec_app_support +${apiVersion_REGAPP} v2 + diff --git a/MEC011/SRV/SRVSUB/jsons/AppInfo.json b/MEC011/SRV/SRVSUB/jsons/AppInfo.json new file mode 100644 index 0000000..31c9053 --- /dev/null +++ b/MEC011/SRV/SRVSUB/jsons/AppInfo.json @@ -0,0 +1,3 @@ +{ + "appName": "sampleAppName" +} \ No newline at end of file diff --git a/MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json b/MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json index 7e7e156..8b315cb 100644 --- a/MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json +++ b/MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json @@ -1,5 +1,5 @@ { - "subscription": "SerAvailabilityNotificationSubscription", + "subscriptionType": "INVALID_SUBSCRIPTION", "callbackReference": "http://127.0.0.1/subscribe", "_links": { "self": { diff --git a/MEC011/SRV/TIME/PlatTiming.robot b/MEC011/SRV/TIME/PlatTiming.robot index e93be9e..f34e261 100644 --- a/MEC011/SRV/TIME/PlatTiming.robot +++ b/MEC011/SRV/TIME/PlatTiming.robot @@ -14,27 +14,26 @@ Default Tags TC_MEC_SRV_TIME *** Test Cases *** -TP_MEC_MEC011_SRV_TIME_001_OK +TC_MEC_MEC011_SRV_TIME_001_OK [Documentation] ... Check that the IUT responds with timing capabilities ... when queried by a MEC Application - ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.5.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/TimingCaps - + ... ETSI GS MEC 011 3.2.1, clause 5.2.10.3, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.4, + ... ETSI GS MEC 011 3.2.1, clause 7.2.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get time capabilities Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is TimingCaps -TP_MEC_MEC011_SRV_TIME_002_OK +TC_MEC_MEC011_SRV_TIME_002_OK [Documentation] ... Check that the IUT responds with current time ... when queried by a MEC Application - ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.6.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/CurrentTime + ... ETSI GS MEC 011 3.2.1, clause 5.2.10.2, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.5, + ... ETSI GS MEC 011 3.2.1, clause 7.2.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get current time diff --git a/MEC011/SRV/TIME/environment/variables.txt b/MEC011/SRV/TIME/environment/variables.txt index 3ae69ae..c4f8c75 100644 --- a/MEC011/SRV/TIME/environment/variables.txt +++ b/MEC011/SRV/TIME/environment/variables.txt @@ -7,7 +7,7 @@ ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} mec_app_support -${apiVersion} v1 +${apiVersion} v2 diff --git a/MEC011/SRV/TRAF/PlatTrafficRules.robot b/MEC011/SRV/TRAF/PlatTrafficRules.robot index 1bf634b..cd94ee4 100644 --- a/MEC011/SRV/TRAF/PlatTrafficRules.robot +++ b/MEC011/SRV/TRAF/PlatTrafficRules.robot @@ -10,105 +10,144 @@ Library OperatingSystem Default Tags TC_MEC_SRV_TRAF - + *** Test Cases *** -TP_MEC_MEC011_SRV_TRAF_001_OK +TC_MEC_MEC011_SRV_TRAF_001_OK [Documentation] ... Check that the IUT responds with a list of available traffic rules ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.7.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/TrafficRule + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 7.2.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo Get list of traffic rules ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is TrafficRuleList + [TearDown] Remove MEC application ${APP_INSTANCE_ID} -TP_MEC_MEC011_SRV_TRAF_001_NF +TC_MEC_MEC011_SRV_TRAF_001_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.8.3.1 + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 7.2.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + [TearDown] Remove MEC application ${NON_EXISTENT_APP_INSTANCE_ID} Get list of traffic rules ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 -TP_MEC_MEC011_SRV_TRAF_002_OK +TC_MEC_MEC011_SRV_TRAF_002_OK [Documentation] ... Check that the IUT responds with the information on a specific traffic rule ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.8.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/TrafficRule - + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo + Get individual traffic rule ${APP_INSTANCE_ID} ${TRAFFIC_RULE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is TrafficRule Check Response Contains ${response['body']} trafficRuleId ${TRAFFIC_RULE_ID} + [TearDown] Remove MEC application ${APP_INSTANCE_ID} - -TP_MEC_MEC011_SRV_TRAF_003_OK +TC_MEC_MEC011_SRV_TRAF_003_OK [Documentation] ... Check that the IUT updates a specific traffic rule ... when commanded by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.8.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/TrafficRule - + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo + ${TRAFFIC_RULE_ID} Get value entry from JSON file TrafficRuleUpdate trafficRuleId Update a traffic rule ${APP_INSTANCE_ID} ${TRAFFIC_RULE_ID} TrafficRuleUpdate Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is TrafficRule Check Response Contains ${response['body']} trafficRuleId ${TRAFFIC_RULE_ID} Check Response Contains ${response['body']} action DROP + [TearDown] Remove MEC application ${APP_INSTANCE_ID} - -TP_MEC_MEC011_SRV_TRAF_003_BR +TC_MEC_MEC011_SRV_TRAF_003_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.8.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/TrafficRule - + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo Update a traffic rule ${APP_INSTANCE_ID} ${TRAFFIC_RULE_ID} TrafficRuleUpdateError Check HTTP Response Status Code Is 400 + [TearDown] Remove MEC application ${APP_INSTANCE_ID} -TP_MEC_MEC011_SRV_TRAF_003_NF +TC_MEC_MEC011_SRV_TRAF_003_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.8.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/TrafficRule - + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7", + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2", + ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo Update a traffic rule ${APP_INSTANCE_ID} ${NON_EXISTENT_TRAFFIC_RULE_ID} TrafficRuleUpdate Check HTTP Response Status Code Is 404 + [TearDown] Remove MEC application ${APP_INSTANCE_ID} + -## Commented as ETag is not mandatory -#TP_MEC_MEC011_SRV_TRAF_003_PF -# [Documentation] -# ... Check that the IUT responds with an error when -# ... a request sent by a MEC Application doesn't comply with a required condition -# ... -# ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.8.3.2 -# ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecAppSupportApi.yaml#/definitions/TrafficRule -# -# [Tags] PIC_MEC_PLAT PIC_SERVICES -# Update a traffic rule with invalid etag ${APP_INSTANCE_ID} ${TRAFFIC_RULE_ID} TrafficRuleUpdate -# Check HTTP Response Status Code Is 412 +TC_MEC_MEC011_SRV_TRAF_003_PF + [Documentation] + ... Check that the IUT responds with an error when + ... a request sent by a MEC Application doesn't comply with a required condition + ... + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo + + Update a traffic rule with invalid etag ${APP_INSTANCE_ID} ${TRAFFIC_RULE_ID} TrafficRuleUpdate + Check HTTP Response Status Code Is 412 + [TearDown] Remove MEC application ${APP_INSTANCE_ID} *** Keywords *** +Create a new MEC application + [Arguments] ${reg_app_content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${reg_app_content} .json + ${body}= Get File ${file} + POST http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations ${body} + ${output}= Output response + Set Suite Variable ${APP_INSTANCE_ID} ${output['body']['appInstanceId']} + +Remove MEC application + [Arguments] ${app_instance_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + #Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + DELETE http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations/${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + Get list of traffic rules [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} diff --git a/MEC011/SRV/TRAF/environment/variables.txt b/MEC011/SRV/TRAF/environment/variables.txt index 74db1cc..4519014 100644 --- a/MEC011/SRV/TRAF/environment/variables.txt +++ b/MEC011/SRV/TRAF/environment/variables.txt @@ -7,11 +7,18 @@ ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} mec_app_support -${apiVersion} v1 +${apiVersion} v2 # Specific variables ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f -${NON_EXISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID +${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID ${TRAFFIC_RULE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NON_EXISTENT_TRAFFIC_RULE_ID} NON_EXISTENT_TRAFFIC_RULE_ID ${INVALID_ETAG} INVALID_ETAG + +##Registration App variables +${HOST_REGAPP} 127.0.0.1 +${PORT_REGAPP} 8082 +${apiRoot_REGAPP} +${apiName_REGAPP} mec_app_support +${apiVersion_REGAPP} v2 \ No newline at end of file diff --git a/MEC011/SRV/TRAF/jsons/AppInfo.json b/MEC011/SRV/TRAF/jsons/AppInfo.json new file mode 100644 index 0000000..31c9053 --- /dev/null +++ b/MEC011/SRV/TRAF/jsons/AppInfo.json @@ -0,0 +1,3 @@ +{ + "appName": "sampleAppName" +} \ No newline at end of file diff --git a/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json index ed2c8b6..1068a47 100644 --- a/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json +++ b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json @@ -87,11 +87,7 @@ "UDP" ], "token": [ - "occaecat", - "reprehenderit esse", - "enim ipsum Lorem", - "nulla ad sed deserunt", - "irure" + "token" ], "srcTunnelAddress": [ "159.20.1.1", diff --git a/MEC011/SRV/TRAF/jsons/TrafficRuleUpdateError.json b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdateError.json index a4af638..cd5b633 100644 --- a/MEC011/SRV/TRAF/jsons/TrafficRuleUpdateError.json +++ b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdateError.json @@ -1,35 +1,33 @@ { - "trafficRuleId": "elit sint id occaecat mollit", + "trafficRuleId": "traffic_rule_01", "filterType": "FLOW", "priority": 1, "trafficFilter": [ { "srcAddress": [ - "magna tempor do", - "nisi reprehenderit veniam adipisicing", - "sed ut tempor voluptate esse", - "consectetur magna culpa" + "192.168.1.1", + "192.168.2.1", + "192.168.3.1" ], "dstAddress": [ - "dolor dolore", - "Excepteur ut aliquip" + "192.168.1.2", + "192.168.2.2", + "192.168.3.2" ], "srcPort": [ - "et anim", - "nulla in minim ea cillum", - "ipsum sunt quis qui Ut" + "30078", + "1029", + "30089" ], "dstPort": [ - "dolore tempor ut voluptate dolor", - "consequat incididunt ad sed mollit", - "in amet aute non" + "30099", + "30098", + "30097" ], "protocol": [ - "mollit Duis", - "irure ullamco Lorem ex tempor", - "ullamco in dolor incididunt", - "elit ea ad", - "magna officia et ad" + "TCP", + "HTTP", + "UDP" ], "token": [ "occaecat", @@ -39,84 +37,81 @@ "irure" ], "srcTunnelAddress": [ - "ut exercitation", - "ea", - "magna et" + "159.10.1.1", + "159.10.2.1", + "159.10.3.1" ], "tgtTunnelAddress": [ - "et anim aliqua", - "dolor in sint consectetur culpa", - "eu", - "deserunt qui mollit sint commodo" + "159.10.1.2", + "159.10.2.2", + "159.10.3.2" ], "srcTunnelPort": [ - "dolore laborum", - "consequat", - "nostrud nulla", - "est id dolore commodo aliquip", - "qui dolor id dolore" + "5566", + "5567", + "5568" ], "dstTunnelPort": [ - "Ut nostrud Excepteur", - "dolor culpa", - "in", - "incididunt" - ], - "qCI": 22902321, - "dSCP": -86264428, - "tC": -40655175 + "5576", + "5578", + "5579" + ], + "qCI": 1, + "dSCP": 0, + "tC": 1 }, { "srcAddress": [ - "incididunt sit qui", - "laborum dolore voluptate exercitation", - "ut" + "192.157.1.1", + "192.157.2.1", + "192.157.3.1" ], "dstAddress": [ - "pariatur sunt", - "id elit aute ut", - "voluptate", - "irure laboris consectetur ullamco id", - "reprehenderit laborum" + "192.157.1.2", + "192.157.2.2", + "192.157.3.2" ], "srcPort": [ - "nisi tempor ut in", - "culpa sed" + "30078", + "1029", + "30089" ], "dstPort": [ - "amet laboris exercitation voluptate veniam" + "30099", + "30098", + "30097" ], "protocol": [ - "incididunt sint Lorem qui" + "TCP", + "HTTP", + "UDP" ], "token": [ - "sunt", - "veniam labore quis dolor", - "Ut ex esse deserunt" + "token" ], "srcTunnelAddress": [ - "cillum irure incididunt adipisicing", - "Duis officia laboris ea dolor" + "159.20.1.1", + "159.20.2.1", + "159.20.3.1" ], "tgtTunnelAddress": [ - "eu deserunt et", - "cupidatat proident Excepteur nisi", - "consequat fugiat Lorem adipisicing" + "159.20.1.2", + "159.20.2.2", + "159.20.3.2" ], "srcTunnelPort": [ - "velit Lorem cillum ex", - "consectetur in ad", - "officia est adipisicing irure aute" + "5566", + "5567", + "5568" ], "dstTunnelPort": [ - "proident velit Lorem labore do", - "magna sit sed ea", - "cillum", - "nostrud" - ], - "qCI": -69609374, - "dSCP": 46042141, - "tC": 67400065 + "5576", + "5578", + "5579" + ], + "qCI": 2, + "dSCP": 0, + "tC": 4 } ], "action": "UNKNOWN_VALUE", @@ -125,10 +120,10 @@ "interfaceType": "TUNNEL", "tunnelInfo": { "tunnelType": "GTP_U", - "tunnelDstAddress": "est", - "tunnelSrcAddress": "culpa nostrud amet labore" + "tunnelDstAddress": "169.54.61.15", + "tunnelSrcAddress": "169.54.61.31" }, - "srcMacAddress": "esse", - "dstMacAddress": "ut nostrud voluptate ipsum cupidatat" + "srcMacAddress": "fc:3f:2b:42:dc:ba", + "dstMacAddress": "02:42:2c:58:6a:7d" } } \ No newline at end of file diff --git a/MEC011/SRV/TRANS/PlatTransport.robot b/MEC011/SRV/TRANS/PlatTransport.robot index 6dd57cc..54c4a16 100644 --- a/MEC011/SRV/TRANS/PlatTransport.robot +++ b/MEC011/SRV/TRANS/PlatTransport.robot @@ -13,13 +13,14 @@ Default Tags TC_MEC_SRV_TRANS *** Test Cases *** -TP_MEC_MEC011_SRV_TRANS_001_OK +TC_MEC_MEC011_SRV_TRANS_001_OK [Documentation] ... Check that the IUT responds with a list of available transports ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.5.3.1 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/TransportInfo + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.9, + ... ETSI GS MEC 011 3.2.1, clause 8.1.2.3, + ... ETSI GS MEC 011 3.2.1, clause 8.2.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of available transports -- GitLab From d1c8bd65516ec0431bc39e12f6b32ea3ccf4a00b Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Wed, 20 Dec 2023 12:53:45 +0100 Subject: [PATCH 29/94] Draft version of MEC014 v3.1.1 TCs available --- MEC014/SRV/UETAG/PlatUeIdentity.robot | 173 +++++++++++------- MEC014/SRV/UETAG/environment/variables.txt | 21 ++- .../UETAG/jsons/CreateAppInstanceRequest.json | 5 + MEC014/SRV/UETAG/jsons/IdentityTag.json | 8 + MEC014/SRV/UETAG/jsons/IdentityTagBR.json | 8 + MEC014/SRV/UETAG/jsons/IdentityTagPF.json | 8 + 6 files changed, 150 insertions(+), 73 deletions(-) create mode 100644 MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json create mode 100644 MEC014/SRV/UETAG/jsons/IdentityTag.json create mode 100644 MEC014/SRV/UETAG/jsons/IdentityTagBR.json create mode 100644 MEC014/SRV/UETAG/jsons/IdentityTagPF.json diff --git a/MEC014/SRV/UETAG/PlatUeIdentity.robot b/MEC014/SRV/UETAG/PlatUeIdentity.robot index c9cdc4c..17c6d1f 100644 --- a/MEC014/SRV/UETAG/PlatUeIdentity.robot +++ b/MEC014/SRV/UETAG/PlatUeIdentity.robot @@ -14,144 +14,181 @@ Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_v TC_MEC_MEC014_SRV_UETAG_001_OK [Documentation] Request UE Identity Tag information ... Check that the IUT responds with the information on a UE Identity tag when queried by a MEC Application - ... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo - Get UE Identity Tag information + ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.1, + ... ETSI GS MEC 014 3.1.1, clause 6.2.2 + [Setup] Create new App Instance CreateAppInstanceRequest + Get UE Identity Tag information ${APP_INSTANCE_ID} ${UE_IDENTITY_TAG} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ueIdentityTagInfo - Check Result Contains ${response['body']['ueIdentityTagInfo']['ueIdentityTags']} ueIdentityTag ${UE_IDENTITY_TAG} + FOR ${identityTag} IN @{response['body']['ueIdentityTags']} + ${ueidentity_tag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[ueIdentityTag] ${UE_IDENTITY_TAG} + ${registered_flag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[state] REGISTERED + Exit For Loop If ${ueidentity_tag} and ${registered_flag} + END + Should Be True ${ueidentity_tag} + Should Be True ${registered_flag} + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} + TC_MEC_MEC014_SRV_UETAG_001_BR [Documentation] Request UE Identity Tag information using bad parameters ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo - Get UE Identity Tag information using bad parameters + ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.1 + [Setup] Create new App Instance CreateAppInstanceRequest + Get UE Identity Tag information using bad parameters ${APP_INSTANCE_ID} ${UE_IDENTITY_TAG} Check HTTP Response Status Code Is 400 - Check ProblemDetails 400 + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} TC_MEC_MEC014_SRV_UETAG_001_NF [Documentation] Request UE Identity Tag information using non-existent application instance ... Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application - ... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo - Get UE Identity Tag information using non-existent application instance + ... Reference ETSI GS MEC 014 V3.1.1, clause 7.3.3.1 + [Setup] Delete APP Instance ${NON_EXISTENT_APP_INSTANCE_ID} + Get UE Identity Tag information ${NON_EXISTENT_APP_INSTANCE_ID} ${UE_IDENTITY_TAG} Check HTTP Response Status Code Is 404 - Check ProblemDetails 404 TC_MEC_MEC014_SRV_UETAG_002_OK [Documentation] Register an UE Identity Tag ... Check that the IUT registers a tag (representing a UE) or a list of tags when commanded by a MEC Application - ... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.2 + ... Reference ETSI GS MEC 014 V3.1.1, clause 7.3.3.2 ... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo - Update an UE Identity Tag {"ueIdentityTags":[{"ueIdentityTag":"${UE_IDENTITY_TAG}","state":"REGISTERED"}]} + [Setup] Create new App Instance and Check User Identity Tag unregistered state CreateAppInstanceRequest ${APP_INSTANCE_ID} UeIdentityTag + Update an UE Identity Tag ${APP_INSTANCE_ID} IdentityTag Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UeIdentityTagInfo - Log Checking Postcondition - Check User Identity Tag state ${UE_IDENTITY_TAG} REGISTERED + FOR ${identityTag} IN @{response['body']['ueIdentityTags']} + ${ueidentity_tag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[ueIdentityTag] ${UE_IDENTITY_TAG} + ${registered_flag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[state] REGISTERED + + Exit For Loop If ${ueidentity_tag} and ${registered_flag} + END + Should Be True ${ueidentity_tag} + Should Be True ${registered_flag} + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} TC_MEC_MEC014_SRV_UETAG_002_BR [Documentation] Register an UE Identity Tag using invalid state ... Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application - ... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.2 - ... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo - Update an UE Identity Tag using invalid state {"ueIdentityTags":[{"ueIdentityTag":"${UE_IDENTITY_TAG}","state":"INVALID_STATE"}]} + ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.2, + ... ETSI GS MEC 014 3.1.1, clause 6.2.2 + [Setup] Create new App Instance CreateAppInstanceRequest + Update an UE Identity Tag ${APP_INSTANCE_ID} IdentityTagBR Check HTTP Response Status Code Is 400 - Check ProblemDetails 400 + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} +TC_MEC_MEC014_SRV_UETAG_002_NF + [Documentation] Register an UE Identity Tag using invalid state + ... Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application + ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.2 + [Setup] Delete APP Instance ${NON_EXISTENT_APP_INSTANCE_ID} + Update an UE Identity Tag ${NON_EXISTENT_APP_INSTANCE_ID} IdentityTag + Check HTTP Response Status Code Is 404 + TC_MEC_MEC014_SRV_UETAG_002_PF [Documentation] Unregister an UE Identity Tag already in unregistered state - ... Check that the IUT responds with ProblemDetails on information an invalid URI - ... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.2 - ... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo - Update an UE Identity Tag using a not applicable valid state {"ueIdentityTags":[{"ueIdentityTag":"${UE_IDENTITY_TAG_INVALID_STATE}","state":"UNREGISTERED"}]} + ... Check that the IUT responds with an error when + ... a request sent by a MEC Application doesn't comply with a required condition + ... Reference ETSI GS MEC 014 V3.1.1, clause 7.3.3.2 + [Setup] Create new App Instance CreateAppInstanceRequest + Update an UE Identity Tag ${APP_INSTANCE_ID} IdentityTagPF Check HTTP Response Status Code Is 412 - Check ProblemDetails 412 + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} + *** Keywords *** -Get UE Identity Tag information - Should Be True ${PIC_MEC_PLAT} == 1 - Should Be True ${PIC_SERVICES} == 1 +Create new App Instance + [Arguments] ${content} + Log Creating a new app package Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTag=${UE_IDENTITY_TAG} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances ${body} ${output}= Output response Set Suite Variable ${response} ${output} - - -Get UE Identity Tag information using bad parameters -# FIXME Which IE protocol should be invalid? - Should Be True ${PIC_MEC_PLAT} == 1 - Should Be True ${PIC_SERVICES} == 1 + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['id']} + + +Create new App Instance and Check User Identity Tag unregistered state + [Arguments] ${content} ${app_instance_id} ${ue_identity_tag} + Get UE Identity Tag information ${app_instance_id} ${ue_identity_tag} + FOR ${identityTag} IN @{response['body']['ueIdentityTags']} + ${ueidentity_tag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[ueIdentityTag] ${ue_identity_tag} + ${registered_flag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[state] UNREGISTERED + Exit For Loop If ${ueidentity_tag} and ${registered_flag} + END + Should Be True ${ueidentity_tag} + Should Be True ${registered_flag} + +Delete APP Instance + [Arguments] ${app_instance_id} + Log Get single App Instance Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} + Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTagERROR=${UE_IDENTITY_TAG} + DELETE http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances${app_instance_id} ${output}= Output response - Set Suite Variable ${response} ${output} - + Set Suite Variable ${response} ${output} + -Get UE Identity Tag information using non-existent application instance + +Get UE Identity Tag information + [Arguments] ${app_instance_id} ${ue_identity_tag} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get /exampleAPI/ui/v1/${NON_EXISTENT_APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTag=${UE_IDENTITY_TAG} + Get /${apiName}/${apiVersion}/${app_instance_id}/ue_identity_tag_info?ueIdentityTag=${ue_identity_tag} ${output}= Output response Set Suite Variable ${response} ${output} -Update an UE Identity Tag - [Arguments] ${content} +Get UE Identity Tag information using bad parameters + [Arguments] ${app_instance_id} ${ue_identity_tag} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - ## As far as I understood, we are not checking preconditions. - # Preamble: Check that the user tag is not registered - ## Check User Identity Tag state ${UE_IDENTITY_TAG} UNREGISTERED - log ${content} - Put /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info ${content} + Set Headers {"Content-Length":"0"} + Get /${apiName}/${apiVersion}/${app_instance_id}/ue_identity_tag_info?ueIdentityTagERROR=${ue_identity_tag} ${output}= Output response Set Suite Variable ${response} ${output} +Check User Identity Tag unregistered state + [Arguments] ${app_instance_id} ${ue_identity_tag} + Get UE Identity Tag information ${app_instance_id} ${ue_identity_tag} + FOR ${identityTag} IN @{response['body']['ueIdentityTags']} + ${ueidentity_tag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[ueIdentityTag] ${ue_identity_tag} + ${registered_flag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[state] UNREGISTERED + Exit For Loop If ${ueidentity_tag} and ${registered_flag} + END + Should Be True ${ueidentity_tag} + Should Be True ${registered_flag} + -Update an UE Identity Tag using invalid state - [Arguments] ${content} - Should Be True ${PIC_MEC_PLAT} == 1 - Should Be True ${PIC_SERVICES} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - # Test Body: Register the tag user and check that the IUT has registered the tag user - Put /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info ${content} - ${output}= Output response - Set Suite Variable ${response} ${output} - -Update an UE Identity Tag using a not applicable valid state - [Arguments] ${content} +Update an UE Identity Tag + [Arguments] ${app_instance_id} ${content} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - # Test Body: Register the tag user and check that the IUT has registered the tag user - Put /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info ${content} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Put /${apiName}/${apiVersion}/${app_instance_id}/ue_identity_tag_info ${body} ${output}= Output response Set Suite Variable ${response} ${output} - # TODO Check ProblemDetails + diff --git a/MEC014/SRV/UETAG/environment/variables.txt b/MEC014/SRV/UETAG/environment/variables.txt index 492b598..8230688 100644 --- a/MEC014/SRV/UETAG/environment/variables.txt +++ b/MEC014/SRV/UETAG/environment/variables.txt @@ -2,12 +2,23 @@ ${MEC-APP_SCHEMA} http #${MEC-APP_HOST} 172.28.4.87 #${MEC-APP_HOST} 127.0.0.1 -${MEC-APP_HOST} 192.168.56.1 -${MEC-APP_PORT} 8081 +${MEC-APP_HOST} 127.0.0.1 +${MEC-APP_PORT} 8085 +${apiRoot} +${apiName} ui +${apiVersion} v1 + ${ZONE_ID} zone01 -${APP_INSTANCE_ID} appInst01 -${NON_EXISTENT_APP_INSTANCE_ID} appInst99 -${UE_IDENTITY_TAG} UeTagA +${APP_INSTANCE_ID} +${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID +${UE_IDENTITY_TAG} UeIdentityTag ${UE_IDENTITY_TAG_INVALID_STATE} UeTagC ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +##Variables for App Instances management +${APP_INST_HOST} 127.0.0.1 +${APP_INST_PORT} 8081 +${apiRoot_APP_INST} +${apiName_APP_INST} app_lcm +${apiVersion_APP_INST} v1 diff --git a/MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json b/MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json new file mode 100644 index 0000000..3691ba6 --- /dev/null +++ b/MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json @@ -0,0 +1,5 @@ +{ + "appDId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", + "appInstanceDescription": "description", + "appInstanceName": "name" +} \ No newline at end of file diff --git a/MEC014/SRV/UETAG/jsons/IdentityTag.json b/MEC014/SRV/UETAG/jsons/IdentityTag.json new file mode 100644 index 0000000..10f4601 --- /dev/null +++ b/MEC014/SRV/UETAG/jsons/IdentityTag.json @@ -0,0 +1,8 @@ +{ + "ueIdentityTags": [ + { + "ueIdentityTag": "UeIdentityTag", + "state": "REGISTERED" + } + ] +} \ No newline at end of file diff --git a/MEC014/SRV/UETAG/jsons/IdentityTagBR.json b/MEC014/SRV/UETAG/jsons/IdentityTagBR.json new file mode 100644 index 0000000..f63d098 --- /dev/null +++ b/MEC014/SRV/UETAG/jsons/IdentityTagBR.json @@ -0,0 +1,8 @@ +{ + "ueIdentityTags": [ + { + "ueIdentityTag": "UeIdentityTag", + "state": "INVALID_STATE" + } + ] +} \ No newline at end of file diff --git a/MEC014/SRV/UETAG/jsons/IdentityTagPF.json b/MEC014/SRV/UETAG/jsons/IdentityTagPF.json new file mode 100644 index 0000000..f4f5644 --- /dev/null +++ b/MEC014/SRV/UETAG/jsons/IdentityTagPF.json @@ -0,0 +1,8 @@ +{ + "ueIdentityTags": [ + { + "ueIdentityTag": "UeIdentityTag", + "state": "UNREGISTER" + } + ] +} \ No newline at end of file -- GitLab From 5f551ac96804ed36168e0c6815a639c01d2d080e Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 21 Dec 2023 15:33:58 +0100 Subject: [PATCH 30/94] Draft TCs for MEC015 v2.1.1 multi-access traffic steering API (MTS) available --- .../SRV/MTS/MultiAccessTrafficSteering.robot | 327 +++++++++++++----- MEC015/SRV/MTS/environment/variables.txt | 10 + .../MTS/jsons/CreateAppInstanceRequest.json | 5 + 3 files changed, 246 insertions(+), 96 deletions(-) create mode 100644 MEC015/SRV/MTS/jsons/CreateAppInstanceRequest.json diff --git a/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot b/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot index fa054b6..cc0c916 100644 --- a/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot +++ b/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot @@ -7,198 +7,322 @@ Resource ../../../pics.txt Resource ../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem +Library String - -##GET on ${apiRoot}/${apiName}/${apiVersion}/mts_info *** Test Cases *** -TP_MEC_MEC015_SRV_MTS_001_OK +TC_MEC_MEC015_SRV_MTS_001_OK [Documentation] ... Check that the IUT responds with the Multi-access Traffic Steering information when queried by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.4, ... ETSI GS MEC 015 V2.1.1, clause 9.3.3.1 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml Retrieve MTS capability information Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MtsCapabilityInfo -##GET on ${apiRoot}/${apiName}/${apiVersion}/mts_sessions -TP_MEC_MEC015_SRV_MTS_002_OK +TC_MEC_MEC015_SRV_MTS_002_OK_01 [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, + ... ETSI GS MEC 015 V2.1.1, clause 9.3.3.1 + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SESSION_ID} ${elements}[3] + Retrieve MTS session list information + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is MtsSessionInfo + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + + +TC_MEC_MEC015_SRV_MTS_002_OK_02 + [Documentation] + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - #Retrieve MTS session list information - Retrieve MTS session list information using filter ${CORRECT_FILTER} ${SESSION_ID} + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SESSION_ID} ${elements}[3] + Retrieve MTS session list information using filter ${APP_NAME_FILTER} ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MtsSessionInfo + LOG ${response} FOR ${mstSessionInfo} IN @{response['body']} - ${passed} Run Keyword And Return Status Should Be Equal As Strings ${mstSessionInfo['appInsId']} ${APP_INSTANCE_ID} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${mstSessionInfo['appInsId']} ${APP_INSTANCE_ID} Exit For Loop If ${passed} END Should Be True ${passed} + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} -TP_MEC_MEC015_SRV_MTS_002_BR +# TC_MEC_MEC015_SRV_MTS_002_OK_03 + # ##TODO the corresponding TP must be fixed: appName is not a property of mtsSessionInfo + # [Documentation] + # ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + # ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, + # ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, + # ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 + # [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + + # ${APP_NAME} Get value entry from JSON file MtsSessionInfoApplicationSpecific appName + # Retrieve MTS session list information using filter ${APP_NAME_FILTER} ${APP_NAME} + # Check HTTP Response Status Code Is 200 + # Check HTTP Response Body Json Schema Is MtsSessionInfo + # [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + +# TC_MEC_MEC015_SRV_MTS_002_OK_04 + # ##TODO the corresponding TP must be fixed: sessionId is not a property of mtsSessionInfo + # [Documentation] + # ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + # ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, + # ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, + # ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 + # [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + + # Check HTTP Response Status Code Is 200 + # Check HTTP Response Body Json Schema Is MtsSessionInfo + # [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + + + +TC_MEC_MEC015_SRV_MTS_002_BR [Documentation] ... Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + LOG ${response} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SESSION_ID} ${elements}[3] + Retrieve MTS session list information using filter ${BAD_FILTER} ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 400 + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + -TP_MEC_MEC015_SRV_MTS_002_NF +TC_MEC_MEC015_SRV_MTS_002_NF [Documentation] ... Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} Retrieve MTS session list information using filter ${CORRECT_FILTER} ${NOT_EXISTING_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 - -##POST on ${apiRoot}/${apiName}/${apiVersion}/mts_sessions -TP_MEC_MEC015_SRV_MTS_003_OK_01 + + +TC_MEC_MEC015_SRV_MTS_003_OK_01 [Documentation] ... Check that the IUT creates a MTS session when queried by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.7, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.2 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - ${path} Catenate SEPARATOR= jsons/ MtsSessionInfoApplicationSpecific.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Register MTS session ${body} + [Setup] Create new App Instance CreateAppInstanceRequest + Register MTS session MtsSessionInfoApplicationSpecific + Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MtsSessionInfo - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['requestType']} ${json_object['requestType']} - Should Be Equal As Strings ${response['body']['qosD']} ${json_object['qosD']} - Should Be Equal As Strings ${response['body']['mtsMode']} ${json_object['mtsMode']} - Should Be Equal As Strings ${response['body']['trafficDirection']} ${json_object['trafficDirection']} + ${appInsId} Get value entry from JSON file MtsSessionInfoApplicationSpecific appInsId + ${requestType} Get value entry from JSON file MtsSessionInfoApplicationSpecific requestType + ${qosD} Get value entry from JSON file MtsSessionInfoApplicationSpecific qosD + ${mtsMode} Get value entry from JSON file MtsSessionInfoApplicationSpecific mtsMode + ${trafficDirection} Get value entry from JSON file MtsSessionInfoApplicationSpecific trafficDirection + Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} + Should Be Equal As Strings ${response['body']['requestType']} ${requestType} + Should Be Equal As Strings ${response['body']['qosD']} ${qosD} + Should Be Equal As Strings ${response['body']['mtsMode']} ${mtsMode} + Should Be Equal As Strings ${response['body']['trafficDirection']} ${trafficDirection} + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} -TP_MEC_MEC015_SRV_MTS_003_OK_02 +TC_MEC_MEC015_SRV_MTS_003_OK_02 [Documentation] ... Check that the IUT creates a MTS session when queried by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.2 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - ${path} Catenate SEPARATOR= jsons/ MtsSessionInfoSessionSpecific.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Register MTS session ${body} + [Setup] Create new App Instance CreateAppInstanceRequest + Register MTS session MtsSessionInfoSessionSpecific Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MtsSessionInfo - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['requestType']} ${json_object['requestType']} - Should Be Equal As Strings ${response['body']['flowFilter']} ${json_object['flowFilter']} - Should Be Equal As Strings ${response['body']['qosD']} ${json_object['qosD']} - Should Be Equal As Strings ${response['body']['mtsMode']} ${json_object['mtsMode']} - Should Be Equal As Strings ${response['body']['trafficDirection']} ${json_object['trafficDirection']} - + ${appInsId} Get value entry from JSON file MtsSessionInfoSessionSpecific appInsId + ${requestType} Get value entry from JSON file MtsSessionInfoSessionSpecific requestType + ${flowFilter} Get value entry from JSON file MtsSessionInfoSessionSpecific flowFilter + ${qosD} Get value entry from JSON file MtsSessionInfoSessionSpecific qosD + ${mtsMode} Get value entry from JSON file MtsSessionInfoSessionSpecific mtsMode + ${trafficDirection} Get value entry from JSON file MtsSessionInfoSessionSpecific trafficDirection + + Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} + Should Be Equal As Strings ${response['body']['requestType']} ${requestType} + Should Be Equal As Strings ${response['body']['flowFilter']} ${flowFilter} + Should Be Equal As Strings ${response['body']['qosD']} ${qosD} + Should Be Equal As Strings ${response['body']['mtsMode']} ${mtsMode} + Should Be Equal As Strings ${response['body']['trafficDirection']} ${trafficDirection} + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} -TP_MEC_MEC015_SRV_MTS_003_BR +TC_MEC_MEC015_SRV_MTS_003_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.2 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - ${path} Catenate SEPARATOR= jsons/ MtsSessionInfoApplicationSpecific_BR.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Register MTS session ${body} + ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Create new App Instance CreateAppInstanceRequest + Register MTS session MtsSessionInfoApplicationSpecific_BR Check HTTP Response Status Code Is 400 - Check HTTP Response Body Json Schema Is MtsSessionInfo - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['requestType']} ${json_object['requestType']} - Should Be Equal As Strings ${response['body']['qosD']} ${json_object['qosD']} - Should Be Equal As Strings ${response['body']['mtsMode']} ${json_object['mtsMode']} - Should Be Equal As Strings ${response['body']['trafficDirection']} ${json_object['trafficDirection']} - + [TearDown] Delete APP Instance ${APP_INSTANCE_ID} -##GET on ${apiRoot}/${apiName}/${apiVersion}/mts_sessions/{sessionId} -TP_MEC_MEC015_SRV_MTS_004_OK +TC_MEC_MEC015_SRV_MTS_004_OK [Documentation] ... Check that the IUT responds with a configured Multi-access Traffic Steering session when queried by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.1 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SESSION_ID} ${elements}[3] Retrieve single MTS session ${SESSION_ID} Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is MtsSessionInfo - Should Be Equal As Strings ${response['body']['appInsId']} ${APP_INSTANCE_ID} - Should Be Equal As Strings ${response['body']['requestType']} ${REQUEST_TYPE_APPLICATION} - Should Be Equal As Strings ${response['body']['mtsMode']} ${MTS_LOW_MODE_COST} - Should Be Equal As Strings ${response['body']['trafficDirection']} ${TRAFFIC_DIRECTION_DL} + Check HTTP Response Body Json Schema Is MtsSessionInfo + ${appInsId} Get value entry from JSON file MtsSessionInfoSessionSpecific appInsId + ${requestType} Get value entry from JSON file MtsSessionInfoSessionSpecific requestType + ${mtsMode} Get value entry from JSON file MtsSessionInfoSessionSpecific mtsMode + ${trafficDirection} Get value entry from JSON file MtsSessionInfoSessionSpecific trafficDirection + Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} + Should Be Equal As Strings ${response['body']['requestType']} ${requestType} + Should Be Equal As Strings ${response['body']['mtsMode']} ${mtsMode} + Should Be Equal As Strings ${response['body']['trafficDirection']} ${trafficDirection} + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + -TP_MEC_MEC015_SRV_MTS_004_BR - [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.1 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - Retrieve single MTS session ${WRONG_SESSION_ID} - Check HTTP Response Status Code Is 400 +# TC_MEC_MEC015_SRV_MTS_004_BR + # [Documentation] + # ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + # ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.1 + # ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + # Retrieve single MTS session ${WRONG_SESSION_ID} + # Check HTTP Response Status Code Is 400 -TP_MEC_MEC015_SRV_MTS_004_NF +TC_MEC_MEC015_SRV_MTS_004_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.1 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} Retrieve single MTS session ${NOT_EXISTING_SESSION_ID} Check HTTP Response Status Code Is 404 -##PUT on ${apiRoot}/${apiName}/${apiVersion}/mts_sessions/{sessionId} -TP_MEC_MEC015_SRV_MTS_005_OK +TC_MEC_MEC015_SRV_MTS_005_OK [Documentation] ... Check that the IUT updates the information about an individual MTS session when commanded by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.9 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.2 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - ${path} Catenate SEPARATOR= jsons/ MtsSessionInfoApplicationSpecificUpdate.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Update requested requirements on the MTS Service ${SESSION_ID} ${body} + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SESSION_ID} ${elements}[3] + Update requested requirements on the MTS Service ${SESSION_ID} MtsSessionInfoApplicationSpecificUpdate Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MtsSessionInfo - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['requestType']} ${json_object['requestType']} - Should Be Equal As Strings ${response['body']['qosD']} ${json_object['qosD']} - Should Be Equal As Strings ${response['body']['mtsMode']} ${json_object['mtsMode']} - Should Be Equal As Strings ${response['body']['trafficDirection']} ${json_object['trafficDirection']} + ${appInsId} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate appInsId + ${requestType} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate requestType + ${qosD} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate qosD + ${mtsMode} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate mtsMode + ${trafficDirection} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate trafficDirection + Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} + Should Be Equal As Strings ${response['body']['requestType']} ${requestType} + Should Be Equal As Strings ${response['body']['qosD']} ${qosD} + Should Be Equal As Strings ${response['body']['mtsMode']} ${mtsMode} + Should Be Equal As Strings ${response['body']['trafficDirection']} ${trafficDirection} + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + -TP_MEC_MEC015_SRV_MTS_005_BR +TC_MEC_MEC015_SRV_MTS_005_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.9 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.2 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - ${path} Catenate SEPARATOR= jsons/ MtsSessionInfoApplicationSpecificUpdate_BR.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Update requested requirements on the MTS Service ${SESSION_ID} ${body} + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SESSION_ID} ${elements}[3] + Update requested requirements on the MTS Service ${SESSION_ID} MtsSessionInfoApplicationSpecificUpdate_BR Check HTTP Response Status Code Is 400 + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + -TP_MEC_MEC015_SRV_MTS_005_NF +TC_MEC_MEC015_SRV_MTS_005_NF [Documentation] ... Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.9 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.2 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - ${path} Catenate SEPARATOR= jsons/ MtsSessionInfoApplicationSpecificUpdate.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Update requested requirements on the MTS Service ${NOT_EXISTING_SESSION_ID} ${body} + [Setup] Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} + Update requested requirements on the MTS Service ${NOT_EXISTING_SESSION_ID} MtsSessionInfoApplicationSpecificUpdate Check HTTP Response Status Code Is 404 -##DELETE on ${apiRoot}/${apiName}/${apiVersion}/mts_sessions/{sessionId} -TP_MEC_MEC015_SRV_MTS_006_OK + +TC_MEC_MEC015_SRV_MTS_006_OK [Documentation] ... Check that the IUT deregisters a MTS session when commanded by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.8 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.3 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SESSION_ID} ${elements}[3] Unregister from the MTS Service ${SESSION_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC015_SRV_MTS_006_NF +TC_MEC_MEC015_SRV_MTS_006_NF [Documentation] ... Check that the IUT deregisters a MTS session when commanded by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.8 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.3 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} Check HTTP Response Status Code Is 404 *** Keywords *** +Create new App Instance and Register MTS session + [Arguments] ${appInstancePayload} ${mtsSessionPayload} + Create new App Instance ${appInstancePayload} + Register MTS session ${mtsSessionPayload} + + + +Unregister from the MTS Service And Delete APP Instance + [Arguments] ${sessionId} ${app_instance_id} + Unregister from the MTS Service ${sessionId} + Delete APP Instance ${app_instance_id} + +Create new App Instance + [Arguments] ${content} + Log Creating a new app package + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['id']} + + + + +Delete APP Instance + [Arguments] ${app_instance_id} + Log Get single App Instance + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + DELETE http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + Retrieve MTS capability information Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -235,9 +359,12 @@ Retrieve MTS session list information using filter Set Suite Variable ${response} ${output} Register MTS session - [Arguments] ${body} + [Arguments] ${content} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 + ${path} Catenate SEPARATOR= jsons/ ${content}.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} @@ -247,6 +374,8 @@ Register MTS session Set Suite Variable ${response} ${output} + + Register MTS session wrong URI [Arguments] ${content} Should Be True ${PIC_MEC_PLAT} == 1 @@ -257,10 +386,13 @@ Register MTS session wrong URI Set Headers {"Content-Length":"0"} ${path} Catenate SEPARATOR= jsons/ ${content} ${body} Get File ${path} - POST ${apiRoot}/${apiName}/v0/mts_sessions ${body} + POST ${apiRoot}/${apiName}/v10/mts_sessions ${body} ${output}= Output response Set Suite Variable ${response} ${output} + + + Retrieve single MTS session [Arguments] ${sessionId} Should Be True ${PIC_MEC_PLAT} == 1 @@ -273,12 +405,15 @@ Retrieve single MTS session Set Suite Variable ${response} ${output} Update requested requirements on the MTS Service - [Arguments] ${sessionId} ${body} + [Arguments] ${sessionId} ${content} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content}.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json PUT ${apiRoot}/${apiName}/${apiVersion}/mts_sessions/${sessionId} ${body} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC015/SRV/MTS/environment/variables.txt b/MEC015/SRV/MTS/environment/variables.txt index 3a0e17f..b585dd8 100644 --- a/MEC015/SRV/MTS/environment/variables.txt +++ b/MEC015/SRV/MTS/environment/variables.txt @@ -13,6 +13,7 @@ ${apiVersion} v1 ${APP_INSTANCE_ID} appInstId01 ${NOT_EXISTING_APP_INSTANCE_ID} NOT_EXISTING_APP_INS_ID ${CORRECT_FILTER} app_instance_id +${APP_NAME_FILTER} APP_NAME ${BAD_FILTER} appInsId ${SESSION_ID} 1 @@ -22,3 +23,12 @@ ${NOT_EXISTING_SESSION_ID} NOT_EXISTING_SESSION_ID ${REQUEST_TYPE_APPLICATION} 1 ${MTS_LOW_MODE_COST} 0 ${TRAFFIC_DIRECTION_DL} 00 + + +##Variables for App Instances management +${APP_INST_HOST} 127.0.0.1 +${APP_INST_PORT} 8081 +${apiRoot_APP_INST} +${apiName_APP_INST} app_lcm +${apiVersion_APP_INST} v1 +${elements} \ No newline at end of file diff --git a/MEC015/SRV/MTS/jsons/CreateAppInstanceRequest.json b/MEC015/SRV/MTS/jsons/CreateAppInstanceRequest.json new file mode 100644 index 0000000..3691ba6 --- /dev/null +++ b/MEC015/SRV/MTS/jsons/CreateAppInstanceRequest.json @@ -0,0 +1,5 @@ +{ + "appDId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", + "appInstanceDescription": "description", + "appInstanceName": "name" +} \ No newline at end of file -- GitLab From 0a30faa4968ea5dcfd25a7ad53dbe26c47d09a71 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 21 Dec 2023 18:21:47 +0100 Subject: [PATCH 31/94] Draft TCs for MEC015 v2.1.1 Bandwidth allocation (BWA) available --- MEC015/SRV/TM/TrafficManagement.robot | 418 ++++++++++-------- MEC015/SRV/TM/environment/variables.txt | 18 +- .../TM/jsons/BwInfoApplicationSpecific.json | 2 +- MEC015/SRV/TM/jsons/BwInfoDeltas.json | 2 +- MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json | 3 +- MEC015/SRV/TM/jsons/BwInfoDeltas_BR2.json | 6 + MEC015/SRV/TM/jsons/BwInfoUpdate.json | 2 +- MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json | 4 +- MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json | 5 + MEC015/SRV/TM/jsons/BwInfo_BR.json | 1 + MEC015/SRV/TM/jsons/BwInfo_BR2.json | 17 +- .../TM/jsons/CreateAppInstanceRequest.json | 5 + MEC015/SRV/TM/schemas/BwInfo.schema.json | 2 - MEC015/SRV/TM/schemas/BwInfoList.schema.json | 127 ++++++ 14 files changed, 412 insertions(+), 200 deletions(-) create mode 100644 MEC015/SRV/TM/jsons/BwInfoDeltas_BR2.json create mode 100644 MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json create mode 100644 MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json create mode 100644 MEC015/SRV/TM/schemas/BwInfoList.schema.json diff --git a/MEC015/SRV/TM/TrafficManagement.robot b/MEC015/SRV/TM/TrafficManagement.robot index 323dc06..a964fd0 100644 --- a/MEC015/SRV/TM/TrafficManagement.robot +++ b/MEC015/SRV/TM/TrafficManagement.robot @@ -1,5 +1,5 @@ ''[Documentation] robot --outputdir ../../../outputs ./TrafficManagement.robot -... Test Suite to validate Bandwidth Management API (BWA) operations. +... Test Suite to validate Bandwidth Management allocations (BWA) operations. *** Settings *** Resource environment/variables.txt @@ -7,224 +7,345 @@ Resource ../../../pics.txt Resource ../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem +Library String - -##GET on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations *** Test Cases *** -TP_MEC_MEC015_SRV_TM_001_OK + +TC_MEC_MEC015_SRV_TM_001_OK_01 [Documentation] ... Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application - ... Reference ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Retrieve the list of configured bandwidth allocations Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is BwInfo - FOR ${bwInfo} IN @{response['body']} - ${passed} Run Keyword And Return Status Should Be Equal As Strings ${bwInfo['appInsId']} ${APP_INSTANCE_ID} - Exit For Loop If ${passed} - END - Should Be True ${passed} + Check HTTP Response Body Json Schema Is BwInfoList + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} -TP_MEC_MEC015_SRV_TM_002_OK +TC_MEC_MEC015_SRV_TM_001_OK_02 [Documentation] - ... Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application - ... Reference ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + ... Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Retrieve the list of configured bandwidth using filter ${CORRECT_FILTER} ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is BwInfo + Check HTTP Response Body Json Schema Is BwInfoList FOR ${bwInfo} IN @{response['body']} ${passed} Run Keyword And Return Status Should Be Equal As Strings ${bwInfo['appInsId']} ${APP_INSTANCE_ID} Exit For Loop If ${passed} END Should Be True ${passed} + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} + -TP_MEC_MEC015_SRV_TM_002_BR +TC_MEC_MEC015_SRV_TM_001_OK_03 + [Documentation] + ... Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Retrieve the list of configured bandwidth using filter ${APP_NAME_FILTER} ${APP_NAME} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is BwInfoList + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} + +# TC_MEC_MEC015_SRV_TM_001_OK_04 + ##TODO To discuss the corresponding TP: the sessionId is not attribute of BwInfo data type + # [Documentation] + # ... Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application + # ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, + # ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + # ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + # [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + # Retrieve the list of configured bandwidth using filter ${SESSION_ID_FILTER} ${SESSION_ID} + # Check HTTP Response Status Code Is 200 + # Check HTTP Response Body Json Schema Is BwInfoList + # [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} + + + +TC_MEC_MEC015_SRV_TM_001_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... Reference ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Retrieve the list of configured bandwidth using filter ${BAD_FILTER} ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 400 + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} + -TP_MEC_MEC015_SRV_TM_002_NF +TC_MEC_MEC015_SRV_TM_001_NF_01 [Documentation] - ... Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - ... Reference ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + ... Check that the IUT responds with an error when + ... a request with an unknown resource URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 Retrieve the list of configured bandwidth using filter ${CORRECT_FILTER} ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 - - -##POST on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations -TP_MEC_MEC015_SRV_TM_003_OK_01 +TC_MEC_MEC015_SRV_TM_001_NF_02 [Documentation] - ... Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - Register Bandwidth Management Service Application specific BwInfoApplicationSpecific - -TP_MEC_MEC015_SRV_TM_003_OK_02 + ... Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - app_name + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + Retrieve the list of configured bandwidth using filter ${APP_NAME_FILTER} ${NON_EXISTENT_APP_NAME} + Check HTTP Response Status Code Is 404 + +TC_MEC_MEC015_SRV_TM_001_NF_03 [Documentation] - ... Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - Register Bandwidth Management Service Session specific BwInfoSessionSpecific - + ... Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - session_id + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + Retrieve the list of configured bandwidth using filter ${SESSION_ID_FILTER} ${NON_EXISTENT_SESSION_ID} + Check HTTP Response Status Code Is 404 -TP_MEC_MEC015_SRV_TM_003_BR_01 +TC_MEC_MEC015_SRV_TM_002_OK [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - Register Bandwidth Management Service with incorrect parameters BwInfo_BR - -TP_MEC_MEC015_SRV_TM_003_BR_02 + ... Check that the IUT acknowledges a creation of a bandwidthAllocation resource + ... ETSI GS MEC 015 V2.1.1, clause 6.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 + [Setup] Create new App Instance CreateAppInstanceRequest + Registration for bandwidth services ${APP_INSTANCE_ID} BwInfoApplicationSpecific + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is BwInfo + ${appInsId} Get value entry from JSON file BwInfoApplicationSpecific appInsId + ${requestType} Get value entry from JSON file BwInfoApplicationSpecific requestType + ${fixedAllocation} Get value entry from JSON file BwInfoApplicationSpecific fixedAllocation + ${allocationDirection} Get value entry from JSON file BwInfoApplicationSpecific allocationDirection + Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} + Should Be Equal As Strings ${response['body']['requestType']} ${requestType} + Should Be Equal As Strings ${response['body']['fixedAllocation']} ${fixedAllocation} + Should Be Equal As Strings ${response['body']['allocationDirection']} ${allocationDirection} + [TearDown] Delete App Instance ${APP_INSTANCE_ID} + + +TC_MEC_MEC015_SRV_TM_002_BR_01 [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - Register Bandwidth Management Service with incorrect parameters BwInfo_BR2 - -TP_MEC_MEC015_SRV_TM_003_BR_03 + [Setup] Create new App Instance CreateAppInstanceRequest + Registration for bandwidth services ${APP_INSTANCE_ID} BwInfo_BR + Check HTTP Response Status Code Is 400 + [TearDown] Delete App Instance ${APP_INSTANCE_ID} + +TC_MEC_MEC015_SRV_TM_002_BR_02 [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - Register Bandwidth Management Service with incorrect parameters BwInfo_BR3 - + [Setup] Create new App Instance CreateAppInstanceRequest + Registration for bandwidth services ${APP_INSTANCE_ID} BwInfo_BR2 + Check HTTP Response Status Code Is 400 + [TearDown] Delete App Instance ${APP_INSTANCE_ID} -##GET on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} -TP_MEC_MEC015_SRV_TM_004_OK +TC_MEC_MEC015_SRV_TM_003_OK [Documentation] ... Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Get a bandwidth allocation ${ALLOCATION_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is BwInfo Should Be Equal As Strings ${response['body']['appInsId']} ${APP_INSTANCE_ID} + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} -TP_MEC_MEC015_SRV_TM_004_NF +TC_MEC_MEC015_SRV_TM_003_NF [Documentation] ... Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.5 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + [Setup] Unregister Bandwidth Management Service ${NON_EXISTENT_ALLOCATION_ID} Get a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} Check HTTP Response Status Code Is 404 -##PUT on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} -TP_MEC_MEC015_SRV_TM_005_OK + +TC_MEC_MEC015_SRV_TM_004_OK [Documentation] ... Check that the IUT updates the requested bandwidth requirements when commanded by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - ${path} Catenate SEPARATOR= jsons/ BwInfoUpdate.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Update a bandwidth allocation ${ALLOCATION_ID} ${body} + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Update a bandwidth allocation ${ALLOCATION_ID} BwInfoUpdate + ${appInsId} Get value entry from JSON file BwInfoUpdate appInsId + ${fixedAllocation} Get value entry from JSON file BwInfoUpdate fixedAllocation + ${allocationDirection} Get value entry from JSON file BwInfoUpdate allocationDirection Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is BwInfo - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['fixedAllocation']} ${json_object['fixedAllocation']} - Should Be Equal As Strings ${response['body']['allocationDirection']} ${json_object['allocationDirection']} + Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} + Should Be Equal As Strings ${response['body']['fixedAllocation']} ${fixedAllocation} + Should Be Equal As Strings ${response['body']['allocationDirection']} ${allocationDirection} + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} -TP_MEC_MEC015_SRV_TM_005_BR +TC_MEC_MEC015_SRV_TM_004_BR_01 [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - ${path} Catenate SEPARATOR= jsons/ BwInfoUpdate_BR.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Update a bandwidth allocation ${ALLOCATION_ID} ${body} + + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Update a bandwidth allocation ${ALLOCATION_ID} BwInfoUpdate_BR Check HTTP Response Status Code Is 400 + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} -TP_MEC_MEC015_SRV_TM_005_NF +TC_MEC_MEC015_SRV_TM_004_BR_02 + [Documentation] + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Update a bandwidth allocation ${ALLOCATION_ID} BwInfoUpdate_BR2 + Check HTTP Response Status Code Is 400 + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} + + +TC_MEC_MEC015_SRV_TM_004_NF [Documentation] ... Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - ${path} Catenate SEPARATOR= jsons/ BwInfoUpdate.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json + + [Setup] Delete APP Instance ${NON_EXISTENT_ALLOCATION_ID} Update a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} BwInfoUpdate Check HTTP Response Status Code Is 404 -##PATCH on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} -TP_MEC_MEC015_SRV_TM_006_OK +TC_MEC_MEC015_SRV_TM_005_OK [Documentation] ... Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - # Preamble - Register Bandwidth Management Service Application specific BwInfoApplicationSpecific - # Test body - ${path} Catenate SEPARATOR= jsons/ BwInfoDeltas.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Request a deltas changes ${ALLOCATION_ID} ${body} + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Request a deltas changes ${ALLOCATION_ID} BwInfoDeltas + Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is BwInfoDelta - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['fixedAllocation']} ${json_object['fixedAllocation']} - Should Be Equal As Strings ${response['body']['allocationDirection']} ${json_object['allocationDirection']} - -TP_MEC_MEC015_SRV_TM_006_BR + ${appInsId} Get value entry from JSON file BwInfoDeltas appInsId + ${fixedAllocation} Get value entry from JSON file BwInfoDeltas fixedAllocation + ${allocationDirection} Get value entry from JSON file BwInfoDeltas allocationDirection + Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} + Should Be Equal As Strings ${response['body']['fixedAllocation']} ${fixedAllocation} + Should Be Equal As Strings ${response['body']['allocationDirection']} ${allocationDirection} + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} + +TC_MEC_MEC015_SRV_TM_005_BR_01 [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - # Preamble - Register Bandwidth Management Service Application specific BwInfoApplicationSpecific - # Test body - ${path} Catenate SEPARATOR= jsons/ BwInfoDeltas_BR.json - ${body} Get File ${path} - Request a deltas changes ${ALLOCATION_ID} ${body} + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Request a deltas changes ${ALLOCATION_ID} BwInfoDeltas_BR Check HTTP Response Status Code Is 400 +TC_MEC_MEC015_SRV_TM_005_BR_02 + [Documentation] + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be present + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Request a deltas changes ${ALLOCATION_ID} BwInfoDeltas_BR2 + Check HTTP Response Status Code Is 400 + -TP_MEC_MEC015_SRV_TM_006_NF +TC_MEC_MEC015_SRV_TM_005_NF [Documentation] ... Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - ${path} Catenate SEPARATOR= jsons/ BwInfoDeltas_BR.json - ${body} Get File ${path} - Request a deltas changes ${NON_EXISTENT_ALLOCATION_ID} ${body} - Check HTTP Response Status Code Is 400 + [Setup] Delete APP Instance ${NON_EXISTENT_ALLOCATION_ID} + Request a deltas changes ${NON_EXISTENT_ALLOCATION_ID} BwInfoDeltas + Check HTTP Response Status Code Is 404 + - -##DELETE on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} -TP_MEC_MEC015_SRV_TM_007_OK +TC_MEC_MEC015_SRV_TM_006_OK [Documentation] ... Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.3 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.5 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Unregister Bandwidth Management Service ${ALLOCATION_ID} Check HTTP Response Status Code Is 204 + [TearDown] Delete APP Instance ${ALLOCATION_ID} -TP_MEC_MEC015_SRV_TM_007_NF +TC_MEC_MEC015_SRV_TM_006_NF [Documentation] ... Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.1.1, clause 6.2.3 + ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.5 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + [Setup] Unregister Bandwidth Management Service ${NON_EXISTENT_ALLOCATION_ID} Unregister Bandwidth Management Service ${NON_EXISTENT_ALLOCATION_ID} Check HTTP Response Status Code Is 404 - *** Keywords *** +Create new App Instance and Register for bw service + [Arguments] ${appInstancePayload} ${bwServicePayload} + Create new App Instance ${appInstancePayload} + Registration for bandwidth services ${APP_INSTANCE_ID} ${bwServicePayload} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${ALLOCATION_ID} ${elements}[3] + + + +Unregister bw Service And Delete APP Instance + [Arguments] ${allocationId} ${app_instance_id} + Unregister Bandwidth Management Service ${allocationId} + Delete APP Instance ${app_instance_id} + +Create new App Instance + [Arguments] ${content} + Log Creating a new app package + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + POST http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['id']} + + +Delete APP Instance + [Arguments] ${app_instance_id} + Log Get single App Instance + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + DELETE http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances${app_instance_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + Retrieve the list of configured bandwidth allocations Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -270,7 +391,7 @@ Registration for bandwidth services Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${app_instance_id} ${body} + Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${body} ${output}= Output response Set Suite Variable ${response} ${output} @@ -288,11 +409,14 @@ Get a bandwidth allocation Update a bandwidth allocation - [Arguments] ${allocation_id} ${body} + [Arguments] ${allocation_id} ${content} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} + ${path} Catenate SEPARATOR= jsons/ ${content}.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json Set Headers {"Authorization":"${TOKEN}"} Put ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} ${output}= Output response @@ -300,85 +424,27 @@ Update a bandwidth allocation Request a deltas changes - [Arguments] ${allocation_id} ${body} + [Arguments] ${allocation_id} ${content} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Patch ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Register Bandwidth Management Service with incorrect parameters - [Arguments] ${content} - Should Be True ${PIC_MEC_PLAT} == 1 - Should Be True ${PIC_SERVICES} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${body} - ${output}= Output response - Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 400 - -Register Bandwidth Management Service Session specific - [Arguments] ${content} - Should Be True ${PIC_MEC_PLAT} == 1 - Should Be True ${PIC_SERVICES} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} + ${path} Catenate SEPARATOR= jsons/ ${content}.json + ${body} Get File ${path} ${json_object}= Evaluate json.loads('''${body}''') json - Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${body} - ${output}= Output response - Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is BwInfo - Should Not Be Empty ${response['headers']['Location']} - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['requestType']} ${json_object['requestType']} - Should Be Equal As Strings ${response['body']['sessionFilter']} ${json_object['sessionFilter']} - Should Be Equal As Strings ${response['body']['fixedAllocation']} ${json_object['fixedAllocation']} - Should Be Equal As Strings ${response['body']['allocationDirection']} ${json_object['allocationDirection']} - - -Register Bandwidth Management Service Application specific - [Arguments] ${content} - Should Be True ${PIC_MEC_PLAT} == 1 - Should Be True ${PIC_SERVICES} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${body} + Patch ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} ${output}= Output response Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is BwInfo - ${json_object}= Evaluate json.loads('''${body}''') json - Should Not Be Empty ${response['headers']['Location']} - Should Be Equal As Strings ${response['body']['appInsId']} ${json_object['appInsId']} - Should Be Equal As Strings ${response['body']['requestType']} ${json_object['requestType']} - Should Be Equal As Strings ${response['body']['fixedAllocation']} ${json_object['fixedAllocation']} - Should Be Equal As Strings ${response['body']['allocationDirection']} ${json_object['allocationDirection']} - - Unregister Bandwidth Management Service - [Arguments] ${value} + [Arguments] ${allocationId} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${value} + Delete ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocationId} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC015/SRV/TM/environment/variables.txt b/MEC015/SRV/TM/environment/variables.txt index 4a9a19d..fd3aab1 100644 --- a/MEC015/SRV/TM/environment/variables.txt +++ b/MEC015/SRV/TM/environment/variables.txt @@ -19,6 +19,14 @@ ${BAD_FILTER} appInsId ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_INSTANCE_ID +${APP_NAME_FILTER} app_name +${APP_NAME} appName +${NON_EXISTENT_APP_NAME} NON_EXISTENT_APP_NAME + +${SESSION_ID_FILTER} session_id +${NON_EXISTENT_SESSION_ID} NON_EXISTENT_SESSION_ID + + ${FIXED_ALLOCATION} 32 ${ALLOCATION_DIRECTION} 00 @@ -29,4 +37,12 @@ ${ALLOCATION_ID} 59ab1593-d330-4087-85ec-4e484092f306 ${NON_EXISTENT_ALLOCATION_ID} NON_EXISTENT_ALLOCATION_ID ${INVALID_ETAG} INVALID_ETAG ${ETAG_VALUE} -${ETAG} \ No newline at end of file +${ETAG} + +##Variables for App Instances management +${APP_INST_HOST} 127.0.0.1 +${APP_INST_PORT} 8081 +${apiRoot_APP_INST} +${apiName_APP_INST} app_lcm +${apiVersion_APP_INST} v1 +${elements} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json b/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json index 511b36f..9746f32 100644 --- a/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json +++ b/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json @@ -1,5 +1,5 @@ { -"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "appInsId": "appInstanceId", "requestType": 0, "fixedAllocation": "32", "allocationDirection": "00" diff --git a/MEC015/SRV/TM/jsons/BwInfoDeltas.json b/MEC015/SRV/TM/jsons/BwInfoDeltas.json index 28d4b0a..4bcc10f 100644 --- a/MEC015/SRV/TM/jsons/BwInfoDeltas.json +++ b/MEC015/SRV/TM/jsons/BwInfoDeltas.json @@ -1,5 +1,5 @@ { -"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", +"appInsId": "appInstanceId", "requestType": 0, "fixedAllocation": "32", "allocationDirection": "01" diff --git a/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json index fca0e97..0a8c388 100644 --- a/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json +++ b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json @@ -1,6 +1,7 @@ { "appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", - "requestType": "INVALID_VALUE", + "requestType": "0", + "sessionFilter":"someValues", "fixedAllocation": "32", "allocationDirection": "01" } \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoDeltas_BR2.json b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR2.json new file mode 100644 index 0000000..b123a74 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR2.json @@ -0,0 +1,6 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": "1", + "fixedAllocation": "32", + "allocationDirection": "01" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoUpdate.json b/MEC015/SRV/TM/jsons/BwInfoUpdate.json index 28d4b0a..4bcc10f 100644 --- a/MEC015/SRV/TM/jsons/BwInfoUpdate.json +++ b/MEC015/SRV/TM/jsons/BwInfoUpdate.json @@ -1,5 +1,5 @@ { -"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", +"appInsId": "appInstanceId", "requestType": 0, "fixedAllocation": "32", "allocationDirection": "01" diff --git a/MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json index 2ccb051..9346f14 100644 --- a/MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json +++ b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json @@ -1,6 +1,6 @@ { -"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", +"appInsId": "appInstanceId", "requestType": 0, "fixedAllocation": "64", - "allocationDirection": "INVALID_VALUE" + "sessionFilter":"sessionFilterVlues" } \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json new file mode 100644 index 0000000..a4f6dac --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json @@ -0,0 +1,5 @@ +{ +"appInsId": "appInstanceId", + "requestType": 1, + "fixedAllocation": "64" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfo_BR.json b/MEC015/SRV/TM/jsons/BwInfo_BR.json index b783529..af487d2 100644 --- a/MEC015/SRV/TM/jsons/BwInfo_BR.json +++ b/MEC015/SRV/TM/jsons/BwInfo_BR.json @@ -1,6 +1,7 @@ { "appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", "requestType": 0, + "sessionFlter":"someValues", "fixedAllocation": "INVALID_VALUE", "allocationDirection": "00" } \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfo_BR2.json b/MEC015/SRV/TM/jsons/BwInfo_BR2.json index c08fbf8..8f616f0 100644 --- a/MEC015/SRV/TM/jsons/BwInfo_BR2.json +++ b/MEC015/SRV/TM/jsons/BwInfo_BR2.json @@ -1,19 +1,6 @@ { "appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", - "requestType": 0, + "requestType": 1, "fixedAllocation": "-30", - "allocationDirection": "00", - "sessionFilter": [{ - "protocol": "123", - "sourceIp": "10.10.0.3", - "dstAddress": "1234", - "dstPort": [ - "1234", - "1334" - ], - "sourcePort": [ - "8080", - "8082" - ] - }] + "allocationDirection": "00" } \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json b/MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json new file mode 100644 index 0000000..3691ba6 --- /dev/null +++ b/MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json @@ -0,0 +1,5 @@ +{ + "appDId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", + "appInstanceDescription": "description", + "appInstanceName": "name" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/schemas/BwInfo.schema.json b/MEC015/SRV/TM/schemas/BwInfo.schema.json index 66ca806..ed52c3b 100644 --- a/MEC015/SRV/TM/schemas/BwInfo.schema.json +++ b/MEC015/SRV/TM/schemas/BwInfo.schema.json @@ -1,5 +1,4 @@ { - "items": { "properties": { "allocationDirection": { "description": "The direction of the requested BW allocation: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical", @@ -123,5 +122,4 @@ ], "type": "object", "x-etsi-ref": "7.2.2" -} } \ No newline at end of file diff --git a/MEC015/SRV/TM/schemas/BwInfoList.schema.json b/MEC015/SRV/TM/schemas/BwInfoList.schema.json new file mode 100644 index 0000000..66ca806 --- /dev/null +++ b/MEC015/SRV/TM/schemas/BwInfoList.schema.json @@ -0,0 +1,127 @@ +{ + "items": { + "properties": { + "allocationDirection": { + "description": "The direction of the requested BW allocation: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appInsId": { + "description": "Application instance identifier", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "fixedAllocation": { + "description": "Size of requested fixed BW allocation in [bps]", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "fixedBWPriority": { + "description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document", + "enum": [ + "SEE_DESCRIPTION" + ], + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Enum" + }, + "requestType": { + "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_BW_ALLOCATION 1 = SESSION_SPECIFIC_BW_ALLOCATION", + "type": "integer", + "enum": [ + 0, + 1 + ], + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "sessionFilter": { + "description": "Session filtering criteria, applicable when requestType is set as SESSION_SPECIFIC_BW_ALLOCATION. Any filtering criteria shall define a single session only. In case multiple sessions match sessionFilter the request shall be rejected", + "items": { + "type": "object", + "properties": { + "dstAddress": { + "description": "Destination address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "dstPort": { + "description": "Destination port identity of session", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "protocol": { + "description": "Protocol number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "sourceIp": { + "description": "Source address identity of session (including range)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "sourcePort": { + "description": "Source port identity of session", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + } + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "timeStamp": { + "description": "Time stamp to indicate when the corresponding information elements are sent", + "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": { + "format": "uint32", + "type": "integer", + "description": "The seconds part of the Time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "appInsId", + "requestType", + "fixedAllocation", + "allocationDirection" + ], + "type": "object", + "x-etsi-ref": "7.2.2" +} +} \ No newline at end of file -- GitLab From e956a413f64a4a6bf182702f5b35fa58a7349f27 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Wed, 3 Jan 2024 10:36:11 +0100 Subject: [PATCH 32/94] MEC012 v2.2.1 Draft TCs available. Simple notification is included too --- MEC012/SRV/RNIS/RnisAllSubscriptions.robot | 115 +++ MEC012/SRV/RNIS/RnisNotifications.robot | 308 ++++---- .../SRV/RNIS/RnisNotifications_noSetup.robot | 165 ++++ ...{RnisQuery_BI_BO.robot => RnisQuery.robot} | 141 +++- MEC012/SRV/RNIS/RnisQuery_BV.robot | 100 --- .../SRV/RNIS/RnisSpecificSubscription.robot | 167 ++++ MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot | 49 -- MEC012/SRV/RNIS/RnisSubscriptions_BV.robot | 127 --- MEC012/SRV/RNIS/environment/variables.txt | 45 +- .../SRV/RNIS/jsons/CaReconfNotification.json | 15 + .../SRV/RNIS/jsons/CaReconfSubscription.json | 7 + .../RNIS/jsons/CellChangeNotification.json | 29 + .../RNIS/jsons/CellChangeSubscription.json | 14 + .../RNIS/jsons/CellChangeSubscriptionBr.json | 18 + ...angeSubscriptionRequestWithExpiration.json | 18 + MEC012/SRV/RNIS/jsons/ExpiryNotification.json | 12 + .../SRV/RNIS/jsons/MeasRepUeNotification.json | 18 + .../SRV/RNIS/jsons/MeasRepUeSubscription.json | 7 + MEC012/SRV/RNIS/jsons/MeasTaNotification.json | 16 + MEC012/SRV/RNIS/jsons/MeasTaSubscription.json | 7 + .../RNIS/jsons/NrMeasRepUeNotification.json | 9 + .../RNIS/jsons/NrMeasRepUeSubscription.json | 7 + MEC012/SRV/RNIS/jsons/RabEstNotification.json | 16 + .../RNIS/jsons/RabEstSubscriptionRequest.json | 7 + MEC012/SRV/RNIS/jsons/RabModNotification.json | 16 + MEC012/SRV/RNIS/jsons/RabModSubscription.json | 9 + MEC012/SRV/RNIS/jsons/RabRelNotification.json | 18 + MEC012/SRV/RNIS/jsons/RabRelSubscription.json | 9 + .../SRV/RNIS/jsons/S1BearerNotification.json | 33 + .../SRV/RNIS/jsons/S1BearerSubscription.json | 7 + .../UpdateCellChangeSubscriptionRequest.json | 2 +- ...pdateCellChangeSubscriptionRequestBr.json} | 2 +- MEC012/SRV/RNIS/libraries/Server.py | 144 ++++ .../RadioNetworkInformationAPI.robot | 4 +- .../schemas/CaReconfNotification.schema.json | 277 +++++++ .../CellChangeNotification.schema.json | 324 ++++---- .../schemas/ExpiryNotification.schema.json | 107 +++ .../schemas/MeasTaNotification.schema.json | 151 ++++ .../NrMeasRepUeNotification.schema.json | 723 ++++++++++++++++++ MEC012/SRV/RNIS/schemas/PlmnInfos.schema.json | 107 ++- .../schemas/RabEstNotification.schema.json | 328 ++++---- MEC012/SRV/RNIS/schemas/RabInfo.schema.json | 307 ++++---- .../schemas/RabModNotification.schema.json | 288 ++++--- .../RNIS/schemas/S1BearerInfos.schema.json | 325 ++++---- .../schemas/S1BearerNotification.schema.json | 243 ++++++ 45 files changed, 3618 insertions(+), 1223 deletions(-) create mode 100644 MEC012/SRV/RNIS/RnisAllSubscriptions.robot create mode 100644 MEC012/SRV/RNIS/RnisNotifications_noSetup.robot rename MEC012/SRV/RNIS/{RnisQuery_BI_BO.robot => RnisQuery.robot} (62%) delete mode 100644 MEC012/SRV/RNIS/RnisQuery_BV.robot create mode 100644 MEC012/SRV/RNIS/RnisSpecificSubscription.robot delete mode 100644 MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot delete mode 100644 MEC012/SRV/RNIS/RnisSubscriptions_BV.robot create mode 100644 MEC012/SRV/RNIS/jsons/CaReconfNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/CaReconfSubscription.json create mode 100644 MEC012/SRV/RNIS/jsons/CellChangeNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/CellChangeSubscription.json create mode 100644 MEC012/SRV/RNIS/jsons/CellChangeSubscriptionBr.json create mode 100644 MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequestWithExpiration.json create mode 100644 MEC012/SRV/RNIS/jsons/ExpiryNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/MeasRepUeNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/MeasRepUeSubscription.json create mode 100644 MEC012/SRV/RNIS/jsons/MeasTaNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/MeasTaSubscription.json create mode 100644 MEC012/SRV/RNIS/jsons/NrMeasRepUeNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json create mode 100644 MEC012/SRV/RNIS/jsons/RabEstNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/RabEstSubscriptionRequest.json create mode 100644 MEC012/SRV/RNIS/jsons/RabModNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/RabModSubscription.json create mode 100644 MEC012/SRV/RNIS/jsons/RabRelNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/RabRelSubscription.json create mode 100644 MEC012/SRV/RNIS/jsons/S1BearerNotification.json create mode 100644 MEC012/SRV/RNIS/jsons/S1BearerSubscription.json rename MEC012/SRV/RNIS/jsons/{CellChangeSubscriptionRequest.json => UpdateCellChangeSubscriptionRequestBr.json} (70%) create mode 100644 MEC012/SRV/RNIS/libraries/Server.py create mode 100644 MEC012/SRV/RNIS/schemas/CaReconfNotification.schema.json create mode 100644 MEC012/SRV/RNIS/schemas/ExpiryNotification.schema.json create mode 100644 MEC012/SRV/RNIS/schemas/MeasTaNotification.schema.json create mode 100644 MEC012/SRV/RNIS/schemas/NrMeasRepUeNotification.schema.json create mode 100644 MEC012/SRV/RNIS/schemas/S1BearerNotification.schema.json diff --git a/MEC012/SRV/RNIS/RnisAllSubscriptions.robot b/MEC012/SRV/RNIS/RnisAllSubscriptions.robot new file mode 100644 index 0000000..2bdc4f8 --- /dev/null +++ b/MEC012/SRV/RNIS/RnisAllSubscriptions.robot @@ -0,0 +1,115 @@ +''[Documentation] robot --outputdir ../../outputs ./RnisSpecificSubscription_BI_BO.robot +... Test Suite to validate RNIS/Subscription (RNIS) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +#Resource resources/RadioNetworkInformationAPI.robot +Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false +Library String + + +*** Test Cases *** +TC_MEC_MEC012_SRV_RNIS_011_BR + [Documentation] Request RNIS subscription list using bad parameters + ... Check that the RNIS service responds with an error when it receives a request to + ... get all RNIS subscriptions with a wrong subscription type + ... ETSI GS MEC 012 2.2.1, clause 7.6.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml#/definitions/SubscriptionLinkList + [Setup] Send a request for a subscription and get sub ID CellChangeSubscription + Get RNIS subscription list with wrong parameter + Check HTTP Response Status Code Is 400 + [TearDown] Delete subscription ${SUB_ID} + + +TC_MEC_MEC012_SRV_RNIS_012_BR + [Documentation] Create RNIS subscription using bad parameters + ... Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format + ... ETSI GS MEC 012 2.2.1, clause 7.6.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + Send a request for a subscription CellChangeSubscriptionBr + Check HTTP Response Status Code Is 400 + +TC_MEC_MEC012_SRV_RNIS_011_OK + [Documentation] Request RNIS subscription list + ... Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested + ... ETSI GS MEC 012 2.2.1, clause 7.6.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml#/definitions/SubscriptionLinkList + [Setup] Send a request for a subscription and get sub ID CellChangeSubscription + Get RNIS subscription list with filter CellChangeSubscription + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SubscriptionLinkList + ${not_expected_syb_type} Set Variable ${FALSE} + FOR ${subscription} IN @{response['body']['_links']['subscription']} + IF '''${subscription}[subscriptionType]''' != '''CellChangeSubscription''' + ${not_expected_syb_type} Set Variable ${TRUE} + END + END + Should Be Equal ${not_expected_syb_type} ${FALSE} + [TearDown] Delete subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_012_OK + [Documentation] Create RNIS subscription + ... Check that the RNIS service creates a new RNIS subscription + ... ETSI GS MEC 012 2.2.1, clause 7.6.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Send a request for a subscription and get sub ID CellChangeSubscription + ${sub_type} Get value entry from JSON file CellChangeSubscription subscriptionType + ${callback_ref} Get value entry from JSON file CellChangeSubscription callbackReference + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is CellChangeSubscription + Should Be Equal ${response['body']['subscriptionType']} ${sub_type} + Should Be Equal ${response['body']['callbackReference']} ${callback_ref} + [TearDown] Delete subscription ${SUB_ID} + +*** Keywords *** +Get RNIS subscription list with filter + [Arguments] ${sub_type_filter} + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/subscriptions?subscription_type=${sub_type_filter} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Get RNIS subscription list with wrong parameter + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/subscriptions?subscription_type=wrongSubscriptionType + ${output}= Output response + Set Suite Variable ${response} ${output} + +Send a request for a subscription and get sub ID + [Arguments] ${content} + Send a request for a subscription ${content} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[4]} + + +Send a request for a subscription + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Delete subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + diff --git a/MEC012/SRV/RNIS/RnisNotifications.robot b/MEC012/SRV/RNIS/RnisNotifications.robot index 6e5613d..a80dadf 100644 --- a/MEC012/SRV/RNIS/RnisNotifications.robot +++ b/MEC012/SRV/RNIS/RnisNotifications.robot @@ -2,204 +2,164 @@ ... Test Suite to validate RNIS/Notification (RNIS) operations. *** Settings *** -Resource environment/variables.txt -Resource ../../../pics.txt -Resource ../../../GenericKeywords.robot -Resource resources/RadioNetworkInformationAPI.robot -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false -Library BuiltIn -Library OperatingSystem -Library MockServerLibrary -Suite Setup Create Mock Session ${callback_uri}:${callback_port} -Test Teardown Reset All Requests + +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +Library libraries/Server.py +Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false +Library BuiltIn +Library OperatingSystem +Library Collections +Library String + *** Test Cases *** TC_MEC_MEC012_SRV_RNIS_001_OK - [Documentation] Cell change notification - ... Check that the RNIS service sends an RNIS notification about cell change if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.2 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about cell change if the RNIS + ... service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.2 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/CellChangeNotification.schema.json - Log Creating mock request and response to handle Cell change notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=&{appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - + [Setup] Send a request for a subscription CellChangeSubscriptionRequest + Spawn Notification Server CellChangeNotification + Validate Json CellChangeNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} TC_MEC_MEC012_SRV_RNIS_002_OK - [Documentation] RAB Establishment notification - ... Check that the RNIS service sends an RNIS notification about RAB establishment if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.3 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about RAB establishment + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.3 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/RabEstNotification.schema.json - Log Creating mock request and response to handle RAB establishment notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/rab_est body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=${appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} + [Setup] Send a request for a subscription RabEstSubscriptionRequest + Spawn Notification Server RabEstNotification + Validate Json RabEstNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} + TC_MEC_MEC012_SRV_RNIS_003_OK - [Documentation] RAB modification notification - ... Check that the RNIS service sends an RNIS notification about RAB modification if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.4 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about RAB modification + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.4 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/RabModNotification.schema.json - Log Creating mock request and response to handle RAB modification notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/rab_mod body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=${appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - - + [Setup] Send a request for a subscription RabModSubscription + Spawn Notification Server RabModNotification + Validate Json RabModNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} + + TC_MEC_MEC012_SRV_RNIS_004_OK - [Documentation] RAB release notification - ... Check that the RNIS service sends an RNIS notification about RAB release if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.5 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about RAB release + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.5 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/RabRelNotification.schema.json - Log Creating mock request and response to handle RAB release notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/rab_rel body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=${appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - + [Setup] Send a request for a subscription RabRelSubscription + Spawn Notification Server RabRelNotification + Validate Json RabRelNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} + TC_MEC_MEC012_SRV_RNIS_005_OK - [Documentation] UE measurement notification - ... Check that the RNIS service sends an RNIS notification about UE measurement report if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.6 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about UE measurement report + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.6 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/MeasRepUeNotification.schema.json - Log Creating mock request and response to handle UE measurement notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/MeasRepUeNotification body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=${appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - + [Setup] Send a request for a subscription MeasRepUeSubscription + Spawn Notification Server MeasRepUeNotification + Validate Json MeasRepUeNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} TC_MEC_MEC012_SRV_RNIS_006_OK - [Documentation] UE timing advance notification - ... Check that the RNIS service sends an RNIS notification about UE timing advance if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.7 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about UE timing advance + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.7 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/MeasTaSubscription.schema.json - Log Creating mock request and response to handle UE timing advance notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/MeasTaNotification body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=${appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - + [Setup] Send a request for a subscription MeasTaSubscription + Spawn Notification Server MeasTaNotification + Validate Json MeasTaNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} + TC_MEC_MEC012_SRV_RNIS_007_OK - [Documentation] UE carrier aggregation reconfiguration notification - ... Check that the RNIS service sends an RNIS notification about UE carrier aggregation reconfiguration if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.8 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about UE carrier aggregation reconfiguration + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.8 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/CaReconfSubscription.schema.json - Log Creating mock request and response to handle UE carrier aggregation reconfiguration notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/CaReconfSubscription body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=${appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} + [Setup] Send a request for a subscription CaReconfSubscription + Spawn Notification Server CaReconfNotification + Validate Json CaReconfNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} TC_MEC_MEC012_SRV_RNIS_008_OK - [Documentation] S1-U bearer notification - ... Check that the RNIS service sends an RNIS notification about S1-U bearer if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.9 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/S1BearerSubscription.schema.json - Log Creating mock request and response to handle S1-U bearer notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/S1BearerSubscription body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=${appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - - -TC_MEC_SRV_RNIS_009_OK - [Documentation] TC_MEC_SRV_RNIS_009_OK - ... Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.1.1, clause 6.4.11 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Documentation] + ... Check that the RNIS service sends an RNIS notification about S1-U bearer + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.10 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - ${json}= Get File schemas/NrMeasRepUeSubscription.schema.json - Log Creating mock request and response to handle UE Measurement notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint}/meas_rep_ue body_type="JSON_SCHEMA" body=${json} - &{appjson_hdrs}= Create Dictionary Content-type=application/json - &{rsp}= Create Mock Response headers=&{appjson_hdrs} status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - - -# TC_MEC_SRV_RNIS_010_OK - # [Documentation] TC_MEC_SRV_RNIS_010_OK - # ... Check that the RNIS service sends an RNIS notification on subscription expiration if the RNIS service has an associated subscription and the event is generated - # ... ETSI GS MEC 012 2.0.4, clause 6.4.9 - # ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml - # Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - # ${json}= Get File schemas/RadioNetworkInformationAPI.schema.json - # Log Creating mock request and response to handle UE Measurement notification - # &{req}= Create Mock Request Matcher POST ${callback_uri}${callback_endpoint} body_type="JSON_SCHEMA" body=${json} - #&{appjson_hdrs}= Create Dictionary Content-type=application/json - # &{rsp}= Create Mock Response &{appjson_hdrs} status_code=204 - # Create Mock Expectation ${req} ${rsp} - # Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - # Log Verifying results - # Verify Mock Expectation ${req} - # Log Cleaning the endpoint - # Clear Requests ${callback_endpoint} + [Setup] Send a request for a subscription S1BearerSubscription + Spawn Notification Server S1BearerNotification + Validate Json S1BearerNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_009_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.11 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + [Setup] Send a request for a subscription NrMeasRepUeSubscription + Spawn Notification Server NrMeasRepUeNotification + Validate Json NrMeasRepUeNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_010_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about cell change if the RNIS + ... service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.2 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + [Setup] Send a request for a subscription CellChangeSubscriptionRequestWithExpiration + Spawn Notification Server ExpiryNotification + Validate Json ExpiryNotification.schema.json ${payload_notification} + [TearDown] Delete subscription ${SUB_ID} + + +*** Keywords *** +Send a request for a subscription + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[4]} + + +Delete subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Spawn Notification Server + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + Set Suite Variable ${payload_notification} ${output} diff --git a/MEC012/SRV/RNIS/RnisNotifications_noSetup.robot b/MEC012/SRV/RNIS/RnisNotifications_noSetup.robot new file mode 100644 index 0000000..df5ddd2 --- /dev/null +++ b/MEC012/SRV/RNIS/RnisNotifications_noSetup.robot @@ -0,0 +1,165 @@ +''[Documentation] robot --outputdir ../../outputs ./RnisNotifications_BV.robot +... Test Suite to validate RNIS/Notification (RNIS) operations. + +*** Settings *** + +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +Library libraries/Server.py +Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false +Library BuiltIn +Library OperatingSystem +Library Collections +Library String + + +*** Test Cases *** +TC_MEC_MEC012_SRV_RNIS_001_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about cell change if the RNIS + ... service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.2 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription CellChangeSubscriptionRequest + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url CellChangeNotification + Validate Json CellChangeNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_002_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about RAB establishment + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.3 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription RabEstSubscriptionRequest + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url RabEstNotification + Validate Json RabEstNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + + + +TC_MEC_MEC012_SRV_RNIS_003_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about RAB modification + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.4 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription RabModSubscription + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url RabModNotification + Validate Json RabModNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + + +TC_MEC_MEC012_SRV_RNIS_004_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about RAB release + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.5 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription RabRelSubscription + Spawn Notification Server 10.30.8.189 8888 5 POST /callback_url RabRelNotification + Validate Json RabRelNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + + +TC_MEC_MEC012_SRV_RNIS_005_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about UE measurement report + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.6 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription MeasRepUeSubscription + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url MeasRepUeNotification + Validate Json MeasRepUeNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_006_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about UE timing advance + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.7 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription MeasTaSubscription + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url MeasTaNotification + Validate Json MeasTaNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + + +TC_MEC_MEC012_SRV_RNIS_007_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about UE carrier aggregation reconfiguration + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.8 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription CaReconfSubscription + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url CaReconfNotification + Validate Json CaReconfNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + + +TC_MEC_MEC012_SRV_RNIS_008_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about S1-U bearer + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.10 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription S1BearerSubscription + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url S1BearerNotification + Validate Json S1BearerNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + + +TC_MEC_MEC012_SRV_RNIS_009_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report + ... if the RNIS service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.11 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription NrMeasRepUeSubscription + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url NrMeasRepUeNotification + Validate Json NrMeasRepUeNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_010_OK + [Documentation] + ... Check that the RNIS service sends an RNIS notification about cell change if the RNIS + ... service has an associated subscription and the event is generated + ... ETSI GS MEC 012 2.2.1, clause 6.4.2 + Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 + #[Setup] Send a request for a subscription CellChangeSubscriptionRequestWithExpiration + Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url ExpiryNotification + Validate Json ExpiryNotification.schema.json ${payload_notification} + #[TearDown] Delete subscription ${SUB_ID} + + +*** Keywords *** +Send a request for a subscription + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[4]} + + +Delete subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Spawn Notification Server + [Arguments] ${host} ${port} ${timeout} ${method} ${endpoint} ${payload_notification} + ${output} Spawn Web Server ${host} ${port} ${timeout} ${method} ${endpoint} ${payload_notification} + Set Suite Variable ${payload_notification} ${output} diff --git a/MEC012/SRV/RNIS/RnisQuery_BI_BO.robot b/MEC012/SRV/RNIS/RnisQuery.robot similarity index 62% rename from MEC012/SRV/RNIS/RnisQuery_BI_BO.robot rename to MEC012/SRV/RNIS/RnisQuery.robot index 172fb0d..4bddb1d 100644 --- a/MEC012/SRV/RNIS/RnisQuery_BI_BO.robot +++ b/MEC012/SRV/RNIS/RnisQuery.robot @@ -1,4 +1,4 @@ -''[Documentation] robot --outputdir ../../outputs ./RnisQuery_BI_BO.robot +''[Documentation] robot --outputdir ../../outputs ./RnisQuery_BV.robot ... Test Suite to validate RNIS/Subscription (RNIS) operations. *** Settings *** @@ -14,27 +14,24 @@ Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_v TC_MEC_MEC012_SRV_RNIS_016_BR [Documentation] Request RabInfo info using wrong parameters ... Check that the RNIS service returns an error when the RAB information is requested with a malformatted message - ... ETSI GS MEC 012 2.1.1, clause 7.3.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.3.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/RabInfo Get RabInfo info using wrong parameters Check HTTP Response Status Code Is 400 - Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 400 TC_MEC_MEC012_SRV_RNIS_016_NF [Documentation] Request RabInfo info using non existing cell id ... Check that the RNIS service returns an error when the RAB information for a not existing element is requested - ... ETSI GS MEC 012 2.1.1, clause 7.3.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.3.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/RabInfo Get RabInfo info using non existing cell id - Check HTTP Response Status Code Is 200 - # TODO Check the returned list is empty - # Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 404 + Check HTTP Response Status Code Is 404 TC_MEC_MEC012_SRV_RNIS_017_BR [Documentation] Request Plmn info using wrong parameters ... Check that the RNIS service returns an error when the PLMN information is requested with a malformatted message - ... ETSI GS MEC 012 2.1.1, clause 7.4.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.4.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/PlmnInfo Get PLMN info using wrong parameters Check HTTP Response Status Code Is 400 @@ -44,39 +41,36 @@ TC_MEC_MEC012_SRV_RNIS_017_BR TC_MEC_MEC012_SRV_RNIS_017_NF [Documentation] Request Plmn info using non existing application id ... Check that the RNIS service returns an error when the PLMN information for a not existing element is requested - ... ETSI GS MEC 012 2.1.1, clause 7.4.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.4.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/PlmnInfo - Get PLMN info using non existing application id - Check HTTP Response Status Code Is 200 - # TODO Check the returned list is empty - # Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 404 + Get PLMN info using non existing app id + Check HTTP Response Status Code Is 404 TC_MEC_MEC012_SRV_RNIS_018_BR [Documentation] Request S1Bearer info using wrong parameters ... Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message - ... ETSI GS MEC 012 2.1.1, clause 7.5.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.5.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo Get S1Bearer info using wrong parameters Check HTTP Response Status Code Is 400 - Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 400 + TC_MEC_MEC012_SRV_RNIS_018_NF [Documentation] Request S1Bearer info using non existing cell id ... Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message - ... ETSI GS MEC 012 2.1.1, clause 7.5.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.5.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo Get S1Bearer info using non existing cell id - Check HTTP Response Status Code Is 200 - # TODO Check the returned list is empty - #Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 404 + Check HTTP Response Status Code Is 404 + TC_MEC_MEC012_SRV_RNIS_019_BR [Documentation] Request L2Meas info using wrong parameters ... Check that the RNIS service returns an error when the L2 measurements information is requested with a malformatted message - ... ETSI GS MEC 012 2.1.1, clause 7.5a.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.5a.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo Get L2Meas info using wrong parameters Check HTTP Response Status Code Is 400 @@ -86,11 +80,56 @@ TC_MEC_MEC012_SRV_RNIS_019_BR TC_MEC_MEC012_SRV_RNIS_019_NF [Documentation] Request L2Meas info using non existing cell id ... Check that the RNIS service returns an error when the L2 measurements information for a not existing element is requested - ... ETSI GS MEC 012 2.1.1, clause 7.5a.3.1 + ... ETSI GS MEC 012 2.2.1, clause 7.5a.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo Get L2Meas info using non existing cell id Check HTTP Response Status Code Is 200 - # TODO Check the returned list is empty + + +TC_MEC_MEC012_SRV_RNIS_016_OK + [Documentation] Request RabInfo info + ... Check that the RNIS service returns the RAB information when requested + ... ETSI GS MEC 012 2.2.1, clause 7.3.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/RabInfo + Get RabInfo info + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is RabInfo + Check RabInfo ${response['body']} + + + +TC_MEC_MEC012_SRV_RNIS_017_OK + [Documentation] Request Plmn info + ... Check that the RNIS service returns the PLMN information when requested + ... ETSI GS MEC 012 2.2.1, clause 7.4.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/PlmnInfo + Get PLMN info + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is PlmnInfos + Check PlmnInfo ${response['body'][0]} + + +TC_MEC_MEC012_SRV_RNIS_018_OK + [Documentation] Request S1Bearer info + ... Check that the RNIS service returns the S1 bearer information + ... ETSI GS MEC 012 2.2.1, clause 7.5.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo + Get S1Bearer info + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is S1BearerInfo + Check S1BearerInfo ${response['body']} + + +TC_MEC_MEC012_SRV_RNIS_019_OK + [Documentation] Request L2Meas info + ... Check that the RNIS service returns the L2 measurements information + ... ETSI GS MEC 012 2.2.1, clause 7.5a.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/L2Meas + Get Layer2Meas Info + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is L2Meas + Check L2MeasInfo ${response['body']} + *** Keywords *** Get RabInfo info using wrong parameters @@ -99,7 +138,7 @@ Get RabInfo info using wrong parameters Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/rab_info?c_id=${C_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/rab_info?cId=${CELL_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -120,18 +159,18 @@ Get Plmn info using wrong parameters Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?app_id=${APP_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?cId=${NOT_EXISTENT_CELL_ID} ${output}= Output response Set Suite Variable ${response} ${output} -Get Plmn info using non existing application id +Get Plmn info using non existing app id Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?app_ins_id=${NOT_EXISTENT_APP_INS_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?appInstanceId=${NOT_EXISTENT_APP_INS_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -142,7 +181,7 @@ Get S1Bearer info using wrong parameters Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/s1_bearer_info?c_id=${C_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/s1_bearer_info?cId=${CELL_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -153,7 +192,7 @@ Get S1Bearer info using non existing cell id Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/s1_bearer_info?cell_id=${NOT_EXISTENT_CELL_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/s1_bearer_info?appInstanceId=${NOT_EXISTENT_APP_INS_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -164,7 +203,7 @@ Get L2Meas info using wrong parameters Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/layer2_meas?c_id=${C_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/layer2_meas?c_id=${CELL_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -178,3 +217,47 @@ Get L2Meas info using non existing cell id Get ${apiRoot}/rni/${apiVersion}/queries/layer2_meas?cell_id=${NOT_EXISTENT_CELL_ID} ${output}= Output response Set Suite Variable ${response} ${output} + + + +Get RabInfo info + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/queries/rab_info?cell_id=${CELL_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Get Plmn info + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?app_ins_id=${APP_INS_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get S1Bearer info + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/queries/s1_bearer_info?cell_id=${CELL_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get Layer2Meas Info + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/queries/layer2_meas?cell_id=${CELL_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/RnisQuery_BV.robot b/MEC012/SRV/RNIS/RnisQuery_BV.robot deleted file mode 100644 index 17722be..0000000 --- a/MEC012/SRV/RNIS/RnisQuery_BV.robot +++ /dev/null @@ -1,100 +0,0 @@ -''[Documentation] robot --outputdir ../../outputs ./RnisQuery_BV.robot -... Test Suite to validate RNIS/Subscription (RNIS) operations. - -*** Settings *** -Resource environment/variables.txt -Resource ../../../pics.txt -Resource ../../../GenericKeywords.robot -Resource resources/RadioNetworkInformationAPI.robot -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false - - - -*** Test Cases *** -TC_MEC_MEC012_SRV_RNIS_016_OK - [Documentation] Request RabInfo info - ... Check that the RNIS service returns the RAB information when requested - ... ETSI GS MEC 012 2.1.1, clause 7.3.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/RabInfo - Get RabInfo info - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is RabInfo - Check RabInfo ${response['body']} - - -TC_MEC_MEC012_SRV_RNIS_017_OK - [Documentation] Request Plmn info - ... Check that the RNIS service returns the PLMN information when requested - ... ETSI GS MEC 012 2.1.1, clause 7.4.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/PlmnInfo - Get PLMN info - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is PlmnInfos - Check PlmnInfo ${response['body'][0]} - - -TC_MEC_MEC012_SRV_RNIS_018_OK - [Documentation] Request S1Bearer info - ... Check that the RNIS service returns the S1 bearer information - ... ETSI GS MEC 012 2.1.1, clause 7.5.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo - Get S1Bearer info - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is S1BearerInfos - #log ${response['body']} - Check S1BearerInfo ${response['body']} - - -TC_MEC_MEC012_SRV_RNIS_019_OK - [Documentation] Request L2Meas info - ... Check that the RNIS service returns the L2 measurements information - ... ETSI GS MEC 012 2.1.1, clause 7.5a.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/L2Meas - Get Layer2Meas Info - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is L2Meas - Check L2MeasInfo ${response['body']} - - -*** Keywords *** -Get RabInfo info - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/rab_info?cell_id=${CELL_ID} - ${output}= Output response - Set Suite Variable ${response} ${output} - -Get Plmn info - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?app_ins_id=${APP_INS_ID} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Get S1Bearer info - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/s1_bearer_info?cell_id=${CELL_ID} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Get Layer2Meas Info - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/queries/layer2_meas?cell_id=${CELL_ID} - ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/RnisSpecificSubscription.robot b/MEC012/SRV/RNIS/RnisSpecificSubscription.robot new file mode 100644 index 0000000..20617a7 --- /dev/null +++ b/MEC012/SRV/RNIS/RnisSpecificSubscription.robot @@ -0,0 +1,167 @@ +''[Documentation] robot --outputdir ../../outputs ./RnisSpecificSubscription_BV.robot +... Test Suite to validate RNIS/Subscription (RNIS) operations. + +*** Settings *** +Library OperatingSystem +Resource environment/variables.txt +Resource ../../../GenericKeywords.robot +Resource resources/RadioNetworkInformationAPI.robot +Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false +Library String + + +*** Test Cases *** +TC_MEC_MEC012_SRV_RNIS_013_NF + [Documentation] Get an Individual RNIS subscription + ... Check that the RNIS service responds with error when a not existing + ... RNIS subscription is requested + ... ETSI GS MEC 012 2.2.1, clause 7.8.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Delete Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Get Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + + + +TC_MEC_MEC012_SRV_RNIS_014_BR + [Documentation] Update an Individual RNIS subscription + ... Check that the RNIS service sends an error when it receives a malformed modify + ... request for a RNIS subscription + ... ETSI GS MEC 012 2.2.1, clause 7.8.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Post RNIS subscription request CellChangeSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[4]} + Update Individual RNIS Subscription ${SUB_ID} UpdateCellChangeSubscriptionRequestBr + Check HTTP Response Status Code Is 400 + [TearDown] Delete Individual RNIS Subscription ${SUB_ID} + + +TC_MEC_MEC012_SRV_RNIS_014_NF + [Documentation] Update an Individual RNIS subscription + ... Check that the RNIS service responds with error when a modification for a not existing RNIS subscription is requested + ... ETSI GS MEC 012 2.2.1, clause 7.8.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Delete Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Update Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} UpdateCellChangeSubscriptionRequest + Check HTTP Response Status Code Is 404 + +TC_MEC_MEC012_SRV_RNIS_015_NF + [Documentation] Update an Individual RNIS subscription + ... Check that the RNIS service responds with error when the deletion of a not existing RNIS subscription is requested + ... ETSI GS MEC 012 2.2.1, clause 7.8.3.5 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Delete Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Delete Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + + +TC_MEC_MEC012_SRV_RNIS_013_OK + [Documentation] Get an Individual RNIS subscription + ... Check that the RNIS service sends a RNIS subscription when requested + ... ETSI GS MEC 012 2.2.1, clause 7.8.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Post RNIS subscription request CellChangeSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[4]} + Get Individual RNIS Subscription ${SUB_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is CellChangeSubscription + ${sub_type} Get value entry from JSON file CellChangeSubscription subscriptionType + ${callbackReference} Get value entry from JSON file CellChangeSubscription callbackReference + Should be Equal ${response['body']['subscriptionType']} ${sub_type} + Should be Equal ${response['body']['callbackReference']} ${callbackReference} + [TearDown] Delete Individual RNIS Subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_014_OK + [Documentation] Update an Individual RNIS subscription + ... Check that the RNIS service modifies a RNIS subscription when requested + ... ETSI GS MEC 012 2.2.1, clause 7.8.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Post RNIS subscription request CellChangeSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[4]} + Update Individual RNIS Subscription ${SUB_ID} UpdateCellChangeSubscriptionRequest + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is CellChangeSubscription + ${sub_type} Get value entry from JSON file UpdateCellChangeSubscriptionRequest subscriptionType + ${callbackReference} Get value entry from JSON file UpdateCellChangeSubscriptionRequest callbackReference + Should be Equal ${response['body']['subscriptionType']} ${sub_type} + Should be Equal ${response['body']['callbackReference']} ${callbackReference} + [TearDown] Delete Individual RNIS Subscription ${SUB_ID} + +TC_MEC_MEC012_SRV_RNIS_015_OK + [Documentation] Remove an Individual RNIS subscription + ... Check that the RNIS service deletes a RNIS subscription when requested + ... ETSI GS MEC 012 2.1.1, clause 7.8.3.5 + ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml + [Setup] Post RNIS subscription request CellChangeSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[4]} + Delete Individual RNIS Subscription ${SUB_ID} + Check HTTP Response Status Code Is 204 + +*** Keywords *** +Get RNIS subscription list + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/subscriptions?subscription_type=${SUBSCRIPTION_HREF_VALUE} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Post RNIS subscription request + [Arguments] ${content} + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${json_file} = Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${json_file} + ${body}= Replace String ${body} \${HREF} ${HREF} + ${body}= Replace String ${body} \${LINKS_SELF} ${LINKS_SELF} + Post ${apiRoot}/rni/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get Individual RNIS Subscription + [Arguments] ${subscription_id} + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/rni/${apiVersion}/subscriptions/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Update Individual RNIS Subscription + [Arguments] ${subscription_id} ${content} + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${json_file} = Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${json_file} + #${body}= Replace String ${body} \${HREF} ${HREF} + #${body}= Replace String ${body} \${LINKS_SELF} ${LINKS_SELF} + Put ${apiRoot}/rni/${apiVersion}/subscriptions/${subscription_id} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Delete Individual RNIS Subscription + [Arguments] ${subscription_id} + Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Delete ${apiRoot}/rni/${apiVersion}/subscriptions/${SUBSCRIPTION_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot b/MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot deleted file mode 100644 index 0a05314..0000000 --- a/MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot +++ /dev/null @@ -1,49 +0,0 @@ -''[Documentation] robot --outputdir ../../outputs ./RnisSpecificSubscription_BI_BO.robot -... Test Suite to validate RNIS/Subscription (RNIS) operations. - -*** Settings *** -Resource environment/variables.txt -Resource ../../../pics.txt -Resource ../../../GenericKeywords.robot -Resource resources/RadioNetworkInformationAPI.robot -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false - -*** Test Cases *** -TC_MEC_MEC012_SRV_RNIS_011_BR - [Documentation] Request RNIS subscription list using bad parameters - ... Check that the RNIS service responds with an error when it receives a request to get all RNIS subscriptions with a wrong subscription type - ... ETSI GS MEC 012 2.1.1, clause 7.6.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml#/definitions/SubscriptionLinkList - Get RNIS subscription list with wrong parameter - Check HTTP Response Status Code Is 400 - - -TC_MEC_MEC012_SRV_RNIS_012_BR - [Documentation] Create RNIS subscription using bad parameters - ... Check that the RNIS service responds with an error when it receives a request to create a new RNIS subscription with a wrong format - ... ETSI GS MEC 012 2.1.1, clause 7.6.3.4 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml - Post RNIS subscription request {"CellChangeSubscription": {"subscriptionType": "CelCangeSubscription", "callbackReference": "${HREF}", "_links": {"self": { "href": "${LINKS_SELF}" } }, "filterCriteria": {"appInsId": "01", "associateId": [{"type": "UE_IPV4_ADDRESS", "value": 1}], "plmn": {"mcc": "01", "mnc": "001"}, "cellId": ["800000"], "hoStatus": "COMPLETED"}, "expiryDeadline": {"seconds": 1577836800, "nanoSeconds": 0}}} - Check HTTP Response Status Code Is 400 - -*** Keywords *** -Get RNIS subscription list with wrong parameter - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/subscriptions?subscription_type=wrongSubscriptionType - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Post RNIS subscription request - [Arguments] ${content} - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Post ${apiRoot}/rni/${apiVersion}/subscriptions ${content} - ${output}= Output response - Set Suite Variable ${response} ${output} diff --git a/MEC012/SRV/RNIS/RnisSubscriptions_BV.robot b/MEC012/SRV/RNIS/RnisSubscriptions_BV.robot deleted file mode 100644 index 44301fe..0000000 --- a/MEC012/SRV/RNIS/RnisSubscriptions_BV.robot +++ /dev/null @@ -1,127 +0,0 @@ -''[Documentation] robot --outputdir ../../outputs ./RnisSpecificSubscription_BV.robot -... Test Suite to validate RNIS/Subscription (RNIS) operations. - -*** Settings *** -Library OperatingSystem -Resource environment/variables.txt -Resource ../../../GenericKeywords.robot -Resource resources/RadioNetworkInformationAPI.robot -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false -Library String - - -*** Test Cases *** -TC_MEC_MEC012_SRV_RNIS_011_OK - [Documentation] Request RNIS subscription list - ... Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested - ... ETSI GS MEC 012 2.1.1, clause 7.6.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml#/definitions/SubscriptionLinkList - Get RNIS subscription list - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is SubscriptionLinkList - # The following step is faulty in the design, thus it is commented. It is kept since - # it is required by the Test Purpose TP_MEC_SRV_RNIS_011_OK - # Check Subscription ${response['body']} ${SUBSCRIPTION_VALUE} - - -TC_MEC_MEC012_SRV_RNIS_012_OK - [Documentation] Create RNIS subscription - ... Check that the RNIS service creates a new RNIS subscription - ... ETSI GS MEC 012 2.1.1, clause 7.6.3.4 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml - Post RNIS subscription request CellChangeSubscriptionRequest - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is CellChangeSubscription - Check CellChangeSubscription ${response['body']} - - -TC_MEC_MEC012_SRV_RNIS_013_OK - [Documentation] Get an Individual RNIS subscription - ... Check that the RNIS service sends a RNIS subscription when requested - ... ETSI GS MEC 012 2.1.1, clause 7.8.3.1 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml - Get Individual RNIS Subscription - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is CellChangeSubscription - - -TC_MEC_MEC012_SRV_RNIS_014_OK - [Documentation] Update an Individual RNIS subscription - ... Check that the RNIS service modifies a RNIS subscription when requested - ... ETSI GS MEC 012 2.1.1, clause 7.8.3.2 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml - Update Individual RNIS Subscription - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is CellChangeSubscription - - -TC_MEC_MEC012_SRV_RNIS_015_OK - [Documentation] Remove an Individual RNIS subscription - ... Check that the RNIS service deletes a RNIS subscription when requested - ... ETSI GS MEC 012 2.1.1, clause 7.8.3.5 - ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml - Delete Individual RNIS Subscription - Check HTTP Response Status Code Is 204 - -*** Keywords *** -Get RNIS subscription list - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/subscriptions?subscription_type=${SUBSCRIPTION_HREF_VALUE} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Post RNIS subscription request - [Arguments] ${content} - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - ${json_file} = Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${json_file} - ${body}= Replace String ${body} \${HREF} ${HREF} - ${body}= Replace String ${body} \${LINKS_SELF} ${LINKS_SELF} - Log ${body} - Post ${apiRoot}/rni/${apiVersion}/subscriptions ${body} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Get Individual RNIS Subscription - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get ${apiRoot}/rni/${apiVersion}/subscriptions/${SUBSCRIPTION_ID} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Update Individual RNIS Subscription - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - ${body} Get File jsons/UpdateCellChangeSubscriptionRequest.json - ${body}= Replace String ${body} \${HREF} ${HREF} - ${body}= Replace String ${body} \${LINKS_SELF} ${LINKS_SELF} - Log ${body} - Put ${apiRoot}/rni/${apiVersion}/subscriptions/${SUBSCRIPTION_ID} ${body} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Delete Individual RNIS Subscription - Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Delete ${apiRoot}/rni/${apiVersion}/subscriptions/${SUBSCRIPTION_ID} - ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/environment/variables.txt b/MEC012/SRV/RNIS/environment/variables.txt index 8853f8d..d073df4 100644 --- a/MEC012/SRV/RNIS/environment/variables.txt +++ b/MEC012/SRV/RNIS/environment/variables.txt @@ -1,35 +1,28 @@ *** Variables *** ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} my-rnis-example.com -${MEC-APP_PORT} 8080 -${SUBSCRIPTION_ID} 7777 -${NON_EXISTENT_SUBSCRIPTION_ID} 6666 -${LINKS_SELF} http://example.com/exampleAPI/rni/v2/subscriptions -${SUBSCRIPTION_HREF_VALUE} cell_changed -${SUBSCRIPTION_TYPE} CELL_CHANGE -${HREF} http://notify-me.com:80/notify -${SUBSCRIPTION_VALUE} {'href': 'http://notify-me.com:80/notify', 'subscriptionType': 'CELL_CHANGE'} -${CELL_ID} 6060606 -${C_ID} 6060606 -${NOT_EXISTENT_CELL_ID} 0x8000099 -${APP_INS_ID} -${APP_ID} 10 -${NOT_EXISTENT_APP_INS_ID} 99 +${MEC-APP_HOST} 127.0.0.1 +${MEC-APP_PORT} 8085 +${apiRoot} +${apiName} rni +${apiVersion} v2 + + ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${SUB_ID} -${apiRoot} /example -${apiVersion} v2 +##Notification Server variables +${NOTIFICATION_SERVER_IP} 10.30.8.189 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 10 -${PIC_PROBLEM_DETAILS_ON_4xx} 0 -# Notifications variables -${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar +${APP_INS_ID} appInsId +${NOT_EXISTENT_APP_INS_ID} NOT_EXISTENT_APP_INS_ID +${NOT_EXISTENT_CELL_ID} 0x8000099 +${CELL_ID} 6060606 -${callback_port} 80 -${callback_uri} http://notify-me.com -${callback_endpoint} /notify -${callback_endpoint_error} /subs_404 -${total_polling_time} 2 min -${polling_interval} 10 sec +${PIC_PROBLEM_DETAILS_ON_4xx} 0 \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/CaReconfNotification.json b/MEC012/SRV/RNIS/jsons/CaReconfNotification.json new file mode 100644 index 0000000..d7182b7 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/CaReconfNotification.json @@ -0,0 +1,15 @@ +{ + "notificationType": "CaReconfNotification", + "ecgi": { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + }, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/CaReconfSubscription.json b/MEC012/SRV/RNIS/jsons/CaReconfSubscription.json new file mode 100644 index 0000000..efc0791 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/CaReconfSubscription.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "CaReconfSubscription", + "callbackReference": "http://10.30.8.189:8080/callback_url", + "filterCriteriaAssoc": { + "appInstanceId": "appInstanceId" + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/CellChangeNotification.json b/MEC012/SRV/RNIS/jsons/CellChangeNotification.json new file mode 100644 index 0000000..ebd520a --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/CellChangeNotification.json @@ -0,0 +1,29 @@ +{ + "associateId": [{ + "type": 1, + "value": "somevalue" + }], + "hoStatus": 1, + "notificationType": "CellChangeNotification", + "srcEcgi": { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + }, + "trgEcgi": [ + { + "cellId": "AnotherCellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + } + ], + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/CellChangeSubscription.json b/MEC012/SRV/RNIS/jsons/CellChangeSubscription.json new file mode 100644 index 0000000..2e8a4cf --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/CellChangeSubscription.json @@ -0,0 +1,14 @@ +{ + "subscriptionType": "CellChangeSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "_links": { + "self": { + "href": "someLinks" + } + }, + "filterCriteriaAssocHo": { + "associateId": [ + "associatedId" + ] + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionBr.json b/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionBr.json new file mode 100644 index 0000000..aa371ca --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionBr.json @@ -0,0 +1,18 @@ +{ + "subscriptionType": "CelChangeSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "_links": { + "self": { + "href": "someLinks" + } + }, + "filterCriteriaAssocHo": { + "associateId": [ + "associatedId" + ] + }, + "expiryDeadline":{ + "seconds":199999, + "nanoSeconds":0 + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequestWithExpiration.json b/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequestWithExpiration.json new file mode 100644 index 0000000..6a01966 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequestWithExpiration.json @@ -0,0 +1,18 @@ +{ + "subscriptionType": "CellChangeSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "_links": { + "self": { + "href": "someLinks" + } + }, + "filterCriteriaAssocHo": { + "associateId": [ + "associatedId" + ] + }, + "expiryDeadline":{ + "seconds":199999, + "nanoSeconds":0 + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/ExpiryNotification.json b/MEC012/SRV/RNIS/jsons/ExpiryNotification.json new file mode 100644 index 0000000..5c5a731 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/ExpiryNotification.json @@ -0,0 +1,12 @@ +{ + "notificationType": "ExpiryNotification", + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + }, + "expiryDeadline": { + "nanoSeconds": 34684608, + "seconds": 21329786 + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/MeasRepUeNotification.json b/MEC012/SRV/RNIS/jsons/MeasRepUeNotification.json new file mode 100644 index 0000000..b1140b9 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/MeasRepUeNotification.json @@ -0,0 +1,18 @@ +{ + "notificationType": "MeasRepUeNotification", + "ecgi": { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + }, + "rsrp": -50, + "rsrq": -20, + "trigger": 10, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/MeasRepUeSubscription.json b/MEC012/SRV/RNIS/jsons/MeasRepUeSubscription.json new file mode 100644 index 0000000..82c9c35 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/MeasRepUeSubscription.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "MeasRepUeSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "filterCriteriaAssocTri": { + "appInstanceId": "appInstanceId" + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/MeasTaNotification.json b/MEC012/SRV/RNIS/jsons/MeasTaNotification.json new file mode 100644 index 0000000..fad8697 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/MeasTaNotification.json @@ -0,0 +1,16 @@ +{ + "notificationType": "MeasTaNotification", + "ecgi": { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + }, + "timingAdvance": 1234567, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } + } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/MeasTaSubscription.json b/MEC012/SRV/RNIS/jsons/MeasTaSubscription.json new file mode 100644 index 0000000..e50b5f1 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/MeasTaSubscription.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "MeasTaSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "filterCriteriaAssoc": { + "appInstanceId": "appInstanceId" + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/NrMeasRepUeNotification.json b/MEC012/SRV/RNIS/jsons/NrMeasRepUeNotification.json new file mode 100644 index 0000000..be2c853 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/NrMeasRepUeNotification.json @@ -0,0 +1,9 @@ +{ + "notificationType": "NrMeasRepUeNotification", + "triggerNr": 1, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json b/MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json new file mode 100644 index 0000000..9680519 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "NrMeasRepUeSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "filterCriteriaNrMrs": { + "appInstanceId": "appInstanceId" + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/RabEstNotification.json b/MEC012/SRV/RNIS/jsons/RabEstNotification.json new file mode 100644 index 0000000..cff7c1d --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/RabEstNotification.json @@ -0,0 +1,16 @@ +{ + "notificationType": "RabEstNotification", + "ecgi": { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + }, + "erabId": 1234, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/RabEstSubscriptionRequest.json b/MEC012/SRV/RNIS/jsons/RabEstSubscriptionRequest.json new file mode 100644 index 0000000..6473252 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/RabEstSubscriptionRequest.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "RabEstSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "filterCriteriaQci": { + "qci": 9 + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/RabModNotification.json b/MEC012/SRV/RNIS/jsons/RabModNotification.json new file mode 100644 index 0000000..ba943c3 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/RabModNotification.json @@ -0,0 +1,16 @@ +{ + "notificationType": "RabModNotification", + "ecgi": { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + }, + "erabId": 1234, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/RabModSubscription.json b/MEC012/SRV/RNIS/jsons/RabModSubscription.json new file mode 100644 index 0000000..f809264 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/RabModSubscription.json @@ -0,0 +1,9 @@ +{ + "subscriptionType": "RabModSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + + "filterCriteriaQci": { + "erabId": 123, + "qci": 9 + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/RabRelNotification.json b/MEC012/SRV/RNIS/jsons/RabRelNotification.json new file mode 100644 index 0000000..25ee08f --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/RabRelNotification.json @@ -0,0 +1,18 @@ +{ + "notificationType": "RabRelNotification", + "ecgi": { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + }, + "erabReleaseInfo": { + "erabId": 1234 + }, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/RabRelSubscription.json b/MEC012/SRV/RNIS/jsons/RabRelSubscription.json new file mode 100644 index 0000000..c1c4bac --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/RabRelSubscription.json @@ -0,0 +1,9 @@ +{ + "subscriptionType": "RabRelSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + + "filterCriteriaQci": { + "erabId": 123, + "qci": 9 + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/S1BearerNotification.json b/MEC012/SRV/RNIS/jsons/S1BearerNotification.json new file mode 100644 index 0000000..6590a88 --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/S1BearerNotification.json @@ -0,0 +1,33 @@ +{ + "notificationType": "S1BearerNotification", + "s1Event": 0, + "s1UeInfo": { + "ecgi": [ + { + "cellId": "cellId", + "plmn": { + "mcc": "999", + "mnc": "99" + } + } + ], + "s1BearerInfo": [ + { + "enbInfo": { + "ipAddress": "127.0.0.1", + "tunnelIdaa": "tunnelId" + }, + "erabId": 1234, + "sGwInfo": { + "ipAddress": "127.0.0.1", + "tunnelId": "tunnelId" + } + } + ] + }, + "_links": { + "subscription": { + "href": "somesuburl/subscriptions/subscriptionId" + } + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/S1BearerSubscription.json b/MEC012/SRV/RNIS/jsons/S1BearerSubscription.json new file mode 100644 index 0000000..bd9032b --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/S1BearerSubscription.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "S1BearerSubscription", + "callbackReference": "http://10.30.8.189:8888/callback_url", + "eventType":1, + "S1BearerSubscriptionCriteria": { + } +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json b/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json index 321f1d2..8910d5b 100644 --- a/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json +++ b/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json @@ -1,6 +1,6 @@ { "subscriptionType": "CellChangeSubscription", - "callbackReference": "${HREF}", + "callbackReference": "http://10.30.8.189:8888/new_callback_url", "_links": { "self": { "href": "${LINKS_SELF}" diff --git a/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequest.json b/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequestBr.json similarity index 70% rename from MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequest.json rename to MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequestBr.json index 321f1d2..d4771e5 100644 --- a/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequest.json +++ b/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequestBr.json @@ -1,6 +1,6 @@ { "subscriptionType": "CellChangeSubscription", - "callbackReference": "${HREF}", + "callbackRefer": "http://10.30.8.189:8888/new_callback_url", "_links": { "self": { "href": "${LINKS_SELF}" diff --git a/MEC012/SRV/RNIS/libraries/Server.py b/MEC012/SRV/RNIS/libraries/Server.py new file mode 100644 index 0000000..c983c3b --- /dev/null +++ b/MEC012/SRV/RNIS/libraries/Server.py @@ -0,0 +1,144 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + notification_json= import_notification_json(self.handler.get_resp_body()) + return notification_json + diff --git a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot index 51323d4..0bf3639 100644 --- a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot +++ b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot @@ -39,9 +39,9 @@ Check PlmnInfo Check S1BearerInfo [Arguments] ${received_value} log ${received_value} - Should Be Equal As Strings ${received_value['s1UeIffo']['ecgi']['cellId']} ${CELL_ID} + Should Be Equal As Strings ${received_value['s1UeInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} Check L2MeasInfo [Arguments] ${received_value} log ${received_value} - Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi']['cellId']} ${CELL_ID} + Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} diff --git a/MEC012/SRV/RNIS/schemas/CaReconfNotification.schema.json b/MEC012/SRV/RNIS/schemas/CaReconfNotification.schema.json new file mode 100644 index 0000000..51c09b0 --- /dev/null +++ b/MEC012/SRV/RNIS/schemas/CaReconfNotification.schema.json @@ -0,0 +1,277 @@ +{ + "title": "CaReconfNotification", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } + }, + { + "required": [ + "ecgi", + "_links" + ], + "type": "object", + "properties": { + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: 0 = reserved. 1 = UE_IPv4_ADDRESS. 2 = UE_IPV6_ADDRESS. 3 = NATED_IP_ADDRESS. 4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to associate the event for a specific UE or flow." + }, + "carrierAggregationMeasInfo": { + "type": "array", + "items": { + "title": "CarrierAggregationMeasInfo", + "type": "object", + "required": [ + "cellIdSrv", + "cellIdNei" + ], + "properties": { + "cellIdNei": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "cellIdSrv": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "rsrpNei": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS 136 214 [i.5].", + "contentEncoding": "int32" + }, + "rsrpSrv": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS 136 214 [i.5].", + "contentEncoding": "int32" + }, + "rsrqNei": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5].", + "contentEncoding": "int32" + }, + "rsrqSrv": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 136 214 [i.5].", + "contentEncoding": "int32" + } + } + }, + "description": "This parameter can be repeated to contain information of all the carriers assign for Carrier Aggregation up to N." + }, + "ecgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "secondaryCellAdd": { + "type": "array", + "items": { + "title": "SecondaryCellAdd", + "type": "object", + "required": [ + "ecgi" + ], + "properties": { + "ecgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + } + } + }, + "description": "" + }, + "secondaryCellRemove": { + "type": "array", + "items": { + "title": "SecondaryCellRemove", + "type": "object", + "required": [ + "ecgi" + ], + "properties": { + "ecgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + } + } + }, + "description": "" + }, + "timeStamp": { + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + }, + "_links": { + "description": "Links to resources related to this notification.", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "description": "A link to the related subscription.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } + } + } + } + } + ] + } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/CellChangeNotification.schema.json b/MEC012/SRV/RNIS/schemas/CellChangeNotification.schema.json index 4266f1a..ae3f9da 100644 --- a/MEC012/SRV/RNIS/schemas/CellChangeNotification.schema.json +++ b/MEC012/SRV/RNIS/schemas/CellChangeNotification.schema.json @@ -1,158 +1,218 @@ { - "properties": { - "associateId": { - "description": "0 to N identifiers to associate the event for a specific UE or flow.", - "items": { + "title": "CellChangeNotification", + "description": "This type represents a notification from RNIS with regards to cell change procedure\nNOTE:\tCardinality N is valid only in case of statuses IN_PREPARATION, REJECTED and CANCELLED.\n", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } + }, + { + "required": [ + "hoStatus", + "srcEcgi", + "trgEcgi", + "_links" + ], + "type": "object", + "properties": { + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to associate the event for a specific UE or flow." + }, + "hoStatus": { + "title": "HoStatus", + "enum": [ + 1, + 2, + 3, + 4, + 5 + ], + "type": "integer", + "description": "Indicate the status of the UE handover procedure. Values are defined as following: <p>1 = IN_PREPARATION. <p>2 = IN_EXECUTION. <p>3 = COMPLETED. <p>4 = REJECTED. <p>5 = CANCELLED.", + "examples": [ + 1 + ] + }, + "srcEcgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", "properties": { - "type": { - "description": "Numeric value (0-255) corresponding to specified type of identifier as following:\n0 = reserved.\n1= UE_IPv4_ADDRESS.\n2 = UE_IPV6_ADDRESS.\n3 = NATED_IP_ADDRESS.\n4 = GTP_TEID.", - "enum": [ - "SEE_DESCRIPTION" - ], + "mcc": { "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." }, - "value": { - "description": "Value for the identifier.", + "mnc": { "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." } - }, - "required": [ - "type", - "value" - ], - "type": "object", - "x-etsi-ref": "6.5.4" + } + } + } + }, + "tempUeId": { + "title": "TempUeId", + "required": [ + "mmec", + "mtmsi" + ], + "type": "object", + "properties": { + "mmec": { + "type": "string", + "description": "MMEC as defined in ETSI TS 136 413 [i.3]." }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "AssociateId" + "mtmsi": { + "type": "string", + "description": "M-TMSI as defined in ETSI TS 136 413 [i.3]." + } }, - "hoStatus": { - "description": "Indicate the status of the UE handover procedure. Values are defined as following:\n1 = IN_PREPARATION.\n2 = IN_EXECUTION.\n3 = COMPLETED.\n4 = REJECTED.\n5 = CANCELLED.", - "enum": [ - "SEE_DESCRIPTION" + "description": "The temporary identifier allocated for the specific UE as defined below." + }, + "timeStamp": { + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + }, + "trgEcgi": { + "type": "array", + "items": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" ], - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" - }, - "notificationType": { - "description": "Shall be set to \"CellChangeNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "srcEcgi": { + "type": "object", "properties": { "cellId": { - "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3].", - "type": "string" + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." }, "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", "properties": { "mcc": { - "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." }, "mnc": { - "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - } - }, - "required": [ - "plmn", - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.5.6" - }, - "tempUeId": { - "description": "The temporary identifier allocated for the specific UE as defined below.", - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "timeStamp": { - "properties": { - "nanoSeconds": { - "type": "number" - }, - "seconds": { - "type": "number" + } } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.3" + } }, - "trgEcgi": { - "description": "E-UTRAN CelI Global Identifier of the target cell.\nNOTE: Cardinality N is valid only in case of statuses IN_PREPARATION, REJECTED and CANCELLED.", - "items": { - "properties": { - "cellId": { - "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3].", - "type": "string" - }, - "plmn": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - } - }, + "description": "E-UTRAN Cell Global Identifier of the target cell. See note.\n" + }, + "_links": { + "description": "Links to resources related to this notification.", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "description": "A link to the related subscription.", + "title": "LinkType", "required": [ - "plmn", - "cellId" + "href" ], "type": "object", - "x-etsi-ref": "6.5.6" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Ecgi" + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } } - }, - "required": [ - "notificationType", - "srcEcgi", - "trgEcgi", - "hoStatus" - ], - "type": "object", - "x-etsi-ref": "6.4.2" - } \ No newline at end of file + } + } + } + ] +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/ExpiryNotification.schema.json b/MEC012/SRV/RNIS/schemas/ExpiryNotification.schema.json new file mode 100644 index 0000000..df78249 --- /dev/null +++ b/MEC012/SRV/RNIS/schemas/ExpiryNotification.schema.json @@ -0,0 +1,107 @@ +{ + "title": "ExpiryNotification", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } + }, + { + "required": [ + "_links", + "expiryDeadline" + ], + "type": "object", + "properties": { + "_links": { + "title": "Links2", + "required": [ + "subscription" + ], + "type": "object", + "properties": { + "subscription": { + "description": "URI identifying the subscription which has expired.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } + }, + "description": "List of hyperlinks related to the resource." + }, + "expiryDeadline": { + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + }, + "timeStamp": { + "description": "Time stamp of the notification.", + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + } + } + } + ] + } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/MeasTaNotification.schema.json b/MEC012/SRV/RNIS/schemas/MeasTaNotification.schema.json new file mode 100644 index 0000000..88bed1e --- /dev/null +++ b/MEC012/SRV/RNIS/schemas/MeasTaNotification.schema.json @@ -0,0 +1,151 @@ +{ + "title": "MeasTaNotification", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } + }, + { + "required": [ + "ecgi", + "timingAdvance", + "_links" + ], + "type": "object", + "properties": { + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to associate the event for a specific UE or flow." + }, + "ecgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "timeStamp": { + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + }, + "timingAdvance": { + "type": "integer", + "description": "The timing advance as defined in ETSI TS 136 214 [i.5].", + "contentEncoding": "int32" + }, + "_links": { + "description": "Links to resources related to this notification.", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "description": "A link to the related subscription.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } + } + } + } + } + ] + } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/NrMeasRepUeNotification.schema.json b/MEC012/SRV/RNIS/schemas/NrMeasRepUeNotification.schema.json new file mode 100644 index 0000000..d39064a --- /dev/null +++ b/MEC012/SRV/RNIS/schemas/NrMeasRepUeNotification.schema.json @@ -0,0 +1,723 @@ +{ + "title": "NrMeasRepUeNotification", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } + }, + { + "required": [ + "triggerNr", + "_links" + ], + "type": "object", + "properties": { + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to associate the event for a specific UE or flow." + }, + "eutraNeighCellMeasInfo": { + "type": "array", + "items": { + "title": "EutraNeighCellMeasInfo", + "type": "object", + "required": [ + "ecgi" + ], + "properties": { + "ecgi": { + "description": "E-UTRAN Cell Global Identifier.", + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal plus Interference Noise Ratio as defined in ETSI TS138331[i.13].", + "contentEncoding": "int32" + } + } + }, + "description": "This parameter can be repeated to contain measurement information of all the neighbouring cells up to N. It shall not be included if nrNeighCellMeasInfo is included." + }, + "nrNeighCellMeasInfo": { + "type": "array", + "items": { + "title": "NrNeighCellMeasInfo", + "type": "object", + "required": [ + "nrcgi" + ], + "properties": { + "measQuantityResultsCsiRsCell": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + }, + "measQuantityResultsSsbCell": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + }, + "nrcgi": { + "description": "NR Cell Global Identifier.", + "title": "Nrcgi", + "required": [ + "nrCellId", + "plmn" + ], + "type": "object", + "properties": { + "nrcellId": { + "type": "string", + "description": "String representing the NR Cell Identity. Encoded as a bit string (size (36)) as defined in ETSI TS 138 423 [i.17]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "rsIndexResults": { + "title": "RsIndexResults", + "required": [ + "resultsCsiRsIndexes", + "resultsSsbIndexes" + ], + "type": "object", + "properties": { + "resultsCsiRsIndexes": { + "title": "ResultsPerCsiRsIndexList", + "type": "object", + "properties": { + "resultsPerCsiRsIndex": { + "type": "array", + "items": { + "title": "ResultsPerCsiRsIndex", + "required": [ + "csiRsIndex" + ], + "type": "object", + "properties": { + "csiRsIndex": { + "type": "integer", + "contentEncoding": "int32" + }, + "csiRsResults": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + } + } + }, + "description": "" + } + } + }, + "resultsSsbIndexes": { + "title": "ResultsPerSsbIndexList", + "type": "object", + "properties": { + "resultsPerSsbIndex": { + "type": "array", + "items": { + "title": "ResultsPerSsbIndex", + "required": [ + "ssbIndex" + ], + "type": "object", + "properties": { + "ssbIndex": { + "type": "integer", + "contentEncoding": "int32" + }, + "ssbResults": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + } + } + }, + "description": "" + } + } + } + } + } + } + }, + "description": "This parameter can be repeated to contain measurement information of all the neighbouring cells up to N. It shall not be included if eutraNeighCellMeasInfo is included." + }, + "servCellMeasInfo": { + "type": "array", + "items": { + "title": "ServCellMeasInfo", + "type": "object", + "required": [ + "nrcgi", + "sCell" + ], + "properties": { + "nCell": { + "title": "NCell", + "type": "object", + "properties": { + "measQuantityResultsCsiRsCell": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + }, + "measQuantityResultsSsbCell": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + }, + "rsIndexResults": { + "title": "RsIndexResults", + "required": [ + "resultsCsiRsIndexes", + "resultsSsbIndexes" + ], + "type": "object", + "properties": { + "resultsCsiRsIndexes": { + "title": "ResultsPerCsiRsIndexList", + "type": "object", + "properties": { + "resultsPerCsiRsIndex": { + "type": "array", + "items": { + "title": "ResultsPerCsiRsIndex", + "required": [ + "csiRsIndex" + ], + "type": "object", + "properties": { + "csiRsIndex": { + "type": "integer", + "contentEncoding": "int32" + }, + "csiRsResults": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + } + } + }, + "description": "" + } + } + }, + "resultsSsbIndexes": { + "title": "ResultsPerSsbIndexList", + "type": "object", + "properties": { + "resultsPerSsbIndex": { + "type": "array", + "items": { + "title": "ResultsPerSsbIndex", + "required": [ + "ssbIndex" + ], + "type": "object", + "properties": { + "ssbIndex": { + "type": "integer", + "contentEncoding": "int32" + }, + "ssbResults": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + } + } + }, + "description": "" + } + } + } + } + } + }, + "description": "Measurement information relating to the best neighbour of this serving cell." + }, + "nrcgi": { + "title": "Nrcgi", + "required": [ + "nrCellId", + "plmn" + ], + "type": "object", + "properties": { + "nrcellId": { + "type": "string", + "description": "String representing the NR Cell Identity. Encoded as a bit string (size (36)) as defined in ETSI TS 138 423 [i.17]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "sCell": { + "title": "SCell", + "type": "object", + "properties": { + "measQuantityResultsCsiRsCell": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + }, + "measQuantityResultsSsbCell": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + }, + "rsIndexResults": { + "title": "RsIndexResults", + "required": [ + "resultsCsiRsIndexes", + "resultsSsbIndexes" + ], + "type": "object", + "properties": { + "resultsCsiRsIndexes": { + "title": "ResultsPerCsiRsIndexList", + "type": "object", + "properties": { + "resultsPerCsiRsIndex": { + "type": "array", + "items": { + "title": "ResultsPerCsiRsIndex", + "required": [ + "csiRsIndex" + ], + "type": "object", + "properties": { + "csiRsIndex": { + "type": "integer", + "contentEncoding": "int32" + }, + "csiRsResults": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + } + } + }, + "description": "" + } + } + }, + "resultsSsbIndexes": { + "title": "ResultsPerSsbIndexList", + "type": "object", + "properties": { + "resultsPerSsbIndex": { + "type": "array", + "items": { + "title": "ResultsPerSsbIndex", + "required": [ + "ssbIndex" + ], + "type": "object", + "properties": { + "ssbIndex": { + "type": "integer", + "contentEncoding": "int32" + }, + "ssbResults": { + "title": "MeasQuantityResultsNr", + "type": "object", + "properties": { + "rsrp": { + "type": "integer", + "description": "Reference Signal Received Power as defined in ETSI TS138 331 [i.13].", + "contentEncoding": "int32" + }, + "rsrq": { + "type": "integer", + "description": "Reference Signal Received Quality as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + }, + "sinr": { + "type": "integer", + "description": "Reference Signal to Interference & Noise Ratio as defined in ETSI TS 138 331 [i.13].", + "contentEncoding": "int32" + } + } + } + } + }, + "description": "" + } + } + } + } + } + }, + "description": "Measurement information relating to this serving cell." + } + } + }, + "description": "This parameter can be repeated to contain information of all the serving cells up to N." + }, + "timeStamp": { + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + }, + "triggerNr": { + "title": "TriggerNr", + "enum": [ + 0, + 1, + 2, + 10, + 11, + 12, + 13, + 14, + 15, + 20, + 21, + 30, + 31 + ], + "type": "integer", + "description": "The enumeration Trigger represents specified triggers for a 5G UE Measurement Report. Full details can be found in ETSI TS 138 331 [i.13]). <p>0 = NOT_AVAILABLE <p>1 = NR_PERIODICAL <p>2 = NR_CGI <p>10 = EVENT_A1 <p>11 = EVENT_A2 <p>12 = EVENT_A3 <p>13 = EVENT_A4 <p>14 = EVENT_A5 <p>15 = EVENT_A6 <p>20 = INTER_RAT_PERIODICAL <p>21 = INTER_RAT_CGI <p>30 = EVENT_B1 <p>31 = EVENT_B2", + "examples": [ + 0 + ] + }, + "_links": { + "description": "Links to resources related to this notification.", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "description": "A link to the related subscription.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } + } + } + } + } + ] + } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/PlmnInfos.schema.json b/MEC012/SRV/RNIS/schemas/PlmnInfos.schema.json index 72f2ac1..91c9164 100644 --- a/MEC012/SRV/RNIS/schemas/PlmnInfos.schema.json +++ b/MEC012/SRV/RNIS/schemas/PlmnInfos.schema.json @@ -1,64 +1,59 @@ { "type": "array", "items": { - "type": "object", - "properties": { - "appInstanceId": { - "description": "Unique identifier for the MEC application instance.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "plmn": { - "description": "Public Land Mobile Network Identity.", - "items": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Plmn" - }, - "timeStamp": { - "properties": { - "nanoSeconds": { - "type": "number" - }, - "seconds": { - "type": "number" - } - }, + "title": "PlmnInfo", "required": [ - "seconds", - "nanoSeconds" + "appInstanceId", + "plmn" ], "type": "object", - "x-etsi-ref": "6.5.3" + "properties": { + "appInstanceId": { + "type": "string", + "description": "Unique identifier for the MEC application instance." + }, + "plmn": { + "type": "array", + "items": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + }, + "description": "Public Land Mobile Network Identity." + }, + "timeStamp": { + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + } + } } - }, - "required": [ - "appInstanceId", - "plmn" - ], - "x-etsi-ref": "6.2.2" - } } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/RabEstNotification.schema.json b/MEC012/SRV/RNIS/schemas/RabEstNotification.schema.json index 095fb26..dd77919 100644 --- a/MEC012/SRV/RNIS/schemas/RabEstNotification.schema.json +++ b/MEC012/SRV/RNIS/schemas/RabEstNotification.schema.json @@ -1,129 +1,201 @@ { - "properties": { - "associateId": { - "description": "0 to N identifiers to bind the event for a specific UE or flow. ", - "items": { - "properties": { - "type": { - "description": "Numeric value (0-255) corresponding to specified type of identifier as following:\n0 = reserved.\n1= UE_IPv4_ADDRESS.\n2 = UE_IPV6_ADDRESS.\n3 = NATED_IP_ADDRESS.\n4 = GTP_TEID.", - "enum": [ - "SEE_DESCRIPTION" - ], - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" - }, - "value": { - "description": "Value for the identifier.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "type", - "value" - ], - "type": "object", - "x-etsi-ref": "6.5.4" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "AssociateId" - }, - "ecgi": { - "properties": { - "cellId": { - "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3].", - "type": "string" - }, - "plmn": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - } - }, - "required": [ - "plmn", - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.5.6" - }, - "erabId": { - "description": "The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "erabQosParameters": { - "description": "QoS parameters for the E-RAB as defined below.", - "properties": { - "qci": { - "description": "QoS Class Identifier as defined in ETSI TS 123 401 [i.4].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - } - }, - "required": [ - "qci" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "notificationType": { - "description": "Shall be set to \"RabEstNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "tempUeId": { - "description": "The temporary identifier allocated for the specific UE as defined below. ", - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "timeStamp": { - "properties": { - "nanoSeconds": { - "type": "number" - }, - "seconds": { - "type": "number" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.3" - } - }, - "required": [ - "notificationType", - "ecgi", - "erabId" - ], - "type": "object", - "x-etsi-ref": "6.4.3" -} \ No newline at end of file + "title": "RabEstNotification", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } + }, + { + "required": [ + "ecgi", + "erabId", + "_links" + ], + "type": "object", + "properties": { + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to bind the event for a specific UE or flow." + }, + "ecgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "erabId": { + "type": "integer", + "description": "The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3].", + "contentEncoding": "int32" + }, + "erabQosParameters": { + "title": "ErabQosParameters", + "required": [ + "qci" + ], + "type": "object", + "properties": { + "qci": { + "type": "integer", + "description": "QoS Class Identifier as defined in ETSI TS 123 401 [i.4].", + "contentEncoding": "int32" + }, + "qosInformation": { + "title": "QosInformation", + "required": [ + "erabGbrDl", + "erabGbrUl", + "erabMbrDl", + "erabMbrUl" + ], + "type": "object", + "properties": { + "erabGbrDl": { + "type": "integer", + "description": "This attribute indicates the guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabGbrUl": { + "type": "integer", + "description": "This attribute indicates the guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabMbrDl": { + "type": "integer", + "description": "This attribute indicates the maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabMbrUl": { + "type": "integer", + "description": "This attribute indicates the maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + } + }, + "description": "The QoS information for the E-RAB." + } + }, + "description": "QoS parameters for the E-RAB as defined below." + }, + "tempUeId": { + "title": "TempUeId", + "required": [ + "mmec", + "mtmsi" + ], + "type": "object", + "properties": { + "mmec": { + "type": "string", + "description": "MMEC as defined in ETSI TS 136 413 [i.3]." + }, + "mtmsi": { + "type": "string", + "description": "M-TMSI as defined in ETSI TS 136 413 [i.3]." + } + }, + "description": "The temporary identifier allocated for the specific UE as defined below." + }, + "timeStamp": { + "_links": null, + "description": "Links to resources related to this notification.", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "description": "A link to the related subscription.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } + }, + "title": "TimeStamp", + "type": "object" + } + } + } + ] + } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/RabInfo.schema.json b/MEC012/SRV/RNIS/schemas/RabInfo.schema.json index bb3c808..8d60b57 100644 --- a/MEC012/SRV/RNIS/schemas/RabInfo.schema.json +++ b/MEC012/SRV/RNIS/schemas/RabInfo.schema.json @@ -1,152 +1,189 @@ { - "type": "object", - "properties": { - "appInstanceId": { - "description": "Unique identifier for the MEC application instance.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "cellUserInfo": { - "description": "The information on users per cell as defined below.", - "items": { + "title": "RabInfo", + "required": [ + "appInstanceId", + "requestId" + ], + "type": "object", "properties": { - "ecgi": { - "properties": { - "cellId": { - "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3].", - "type": "string" - }, - "plmn": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - } - }, - "required": [ - "plmn", - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.5.6" + "appInstanceId": { + "type": "string", + "description": "Unique identifier for the MEC application instance." }, - "ueInfo": { - "description": "Information on UEs in the specific cell as defined below.", + "cellUserInfo": { + "type": "array", "items": { + "title": "CellUserInfo", + "type": "object", + "required": [ + "ecgi", + "ueInfo" + ], "properties": { - "associateId": { - "description": "0 to N identifiers to associate the event for a specific UE or flow.", + "ecgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "ueInfo": { + "type": "array", "items": { + "title": "UeInfo", + "type": "object", + "required": [ + "erabInfo" + ], "properties": { - "type": { - "description": "Numeric value (0-255) corresponding to specified type of identifier as following:\n0 = reserved.\n1= UE_IPv4_ADDRESS.\n2 = UE_IPV6_ADDRESS.\n3 = NATED_IP_ADDRESS.\n4 = GTP_TEID.", - "type": "number", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to associate the event for a specific UE or flow." }, - "value": { - "description": "Value for the identifier.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "erabInfo": { + "type": "array", + "items": { + "title": "ErabInfo", + "type": "object", + "properties": { + "erabId": { + "type": "integer", + "description": "The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3].", + "contentEncoding": "int32" + }, + "erabQosParameters": { + "title": "ErabQosParameters", + "required": [ + "qci" + ], + "type": "object", + "properties": { + "qci": { + "type": "integer", + "description": "QoS Class Identifier as defined in ETSI TS 123 401 [i.4].", + "contentEncoding": "int32" + }, + "qosInformation": { + "title": "QosInformation", + "required": [ + "erabGbrDl", + "erabGbrUl", + "erabMbrDl", + "erabMbrUl" + ], + "type": "object", + "properties": { + "erabGbrDl": { + "type": "integer", + "description": "This attribute indicates the guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabGbrUl": { + "type": "integer", + "description": "This attribute indicates the guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabMbrDl": { + "type": "integer", + "description": "This attribute indicates the maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabMbrUl": { + "type": "integer", + "description": "This attribute indicates the maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + } + }, + "description": "The QoS information for the E-RAB." + } + }, + "description": "QoS parameters for the E-RAB as defined below." + } + } + }, + "description": "Information on E-RAB as defined below." } - }, - "required": [ - "type", - "value" - ], - "type": "object", - "x-etsi-ref": "6.5.4" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "AssociateId" - }, - "erabInfo": { - "description": "Information on E-RAB as defined below.", - "items": { - "type": "object" - }, - "properties": { - "erabId": { - "description": "The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "erabQosParameters": { - "description": "QoS parameters for the E-RAB as defined below.", - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" } }, - "required": [ - "erabId" - ], - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Structure (inlined)" + "description": "Information on UEs in the specific cell as defined below." } - }, - "type": "object" + } }, + "description": "The information on users per cell as defined below." + }, + "requestId": { + "type": "string", + "description": "Unique identifier allocated by the service consumer for the RAB Information request." + }, + "timeStamp": { + "title": "TimeStamp", "required": [ - "erabInfo" + "nanoSeconds", + "seconds" ], - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Structure (inlined)" + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } } - }, - "type": "object", - "required": [ - "ecgi", - "ueInfo" - ] - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "requestId": { - "description": "Unique identifier allocated by the service consumer for the RAB Information request.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "timeStamp": { - "properties": { - "nanoSeconds": { - "type": "number" - }, - "seconds": { - "type": "number" } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.3" - } - } -} + } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/RabModNotification.schema.json b/MEC012/SRV/RNIS/schemas/RabModNotification.schema.json index c0cd6ec..679ac23 100644 --- a/MEC012/SRV/RNIS/schemas/RabModNotification.schema.json +++ b/MEC012/SRV/RNIS/schemas/RabModNotification.schema.json @@ -1,123 +1,199 @@ { - "properties": { - "associateId": { - "description": "0 to N identifiers to bind the event for a specific UE or flow. ", - "items": { - "properties": { - "type": { - "description": "Numeric value (0-255) corresponding to specified type of identifier as following:\n0 = reserved.\n1= UE_IPv4_ADDRESS.\n2 = UE_IPV6_ADDRESS.\n3 = NATED_IP_ADDRESS.\n4 = GTP_TEID.", - "enum": [ - "SEE_DESCRIPTION" - ], - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" - }, - "value": { - "description": "Value for the identifier.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "type", - "value" - ], - "type": "object", - "x-etsi-ref": "6.5.4" + "title": "RabModNotification", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "AssociateId" + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } }, - "ecgi": { + { + "required": [ + "ecgi", + "erabId", + "_links" + ], + "type": "object", "properties": { - "cellId": { - "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3].", - "type": "string" + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to bind the event for a specific UE or flow." }, - "plmn": { + "ecgi": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", + "cellId": { "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "erabId": { + "type": "integer", + "description": "The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3].", + "contentEncoding": "int32" + }, + "erabQosParameters": { + "title": "ErabQosParameters2", + "required": [ + "qci" + ], + "type": "object", + "properties": { + "qci": { + "type": "integer", + "description": "QoS Class Identifier as defined in ETSI TS 123 401 [i.4].", + "contentEncoding": "int32" + }, + "qosInformation": { + "title": "QosInformation2", + "required": [ + "erabGbrDl", + "erabGbrUl", + "erabMbrDl", + "erabMbrUl" + ], + "type": "object", + "properties": { + "erabGbrDl": { + "type": "integer", + "description": "This attribute indicates the guaranteed downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabGbrUl": { + "type": "integer", + "description": "This attribute indicates the guaranteed uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabMbrDl": { + "type": "integer", + "description": "This attribute indicates the maximum downlink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + }, + "erabMbrUl": { + "type": "integer", + "description": "This attribute indicates the maximum uplink E-RAB Bit Rate as defined in ETSI TS 123 401 [i.4] for this bearer.", + "contentEncoding": "int32" + } + }, + "description": "The QoS Information for the E-RAB as defined below." } }, + "description": "The QoS parameters for the E-RAB as defined below." + }, + "timeStamp": { + "title": "TimeStamp", "required": [ - "mcc", - "mnc" + "nanoSeconds", + "seconds" ], "type": "object", - "x-etsi-ref": "6.5.5" - } - }, - "required": [ - "plmn", - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.5.6" - }, - "erabId": { - "description": "The attribute that uniquely identifies a Radio Access bearer for specific UE as defined in ETSI TS 136 413 [i.3].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "erabQosParameters": { - "description": "The QoS parameters for the E-RAB as defined below.", - "properties": { - "qci": { - "description": "QoS Class Identifier as defined in ETSI TS 123 401 [i.4].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - } - }, - "required": [ - "qci" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "notificationType": { - "description": "Shall be set to \"RabModNotification\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "timeStamp": { - "properties": { - "nanoSeconds": { - "type": "number" + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } }, - "seconds": { - "type": "number" + "_links": { + "description": "Links to resources related to this notification.", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "description": "A link to the related subscription.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } + } } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.3" + } } - }, - "required": [ - "notificationType", - "ecgi", - "erabId" - ], - "type": "object", - "x-etsi-ref": "6.4.4" + ] } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/S1BearerInfos.schema.json b/MEC012/SRV/RNIS/schemas/S1BearerInfos.schema.json index 35efd72..3bd04e8 100644 --- a/MEC012/SRV/RNIS/schemas/S1BearerInfos.schema.json +++ b/MEC012/SRV/RNIS/schemas/S1BearerInfos.schema.json @@ -1,178 +1,189 @@ { "type": "array", "items": { - "type": "object", - "properties": { - "s1UeIffo": { - "description": "1..N", + "title": "S1BearerInfo", + "required": [ + "s1UeInfo" + ], + "type": "object", "properties": { - "associateId": { - "properties": { - "type": { - "description": "Numeric value (0-255) corresponding to specified type of identifier as following:\n0 = reserved.\n1= UE_IPv4_ADDRESS.\n2 = UE_IPV6_ADDRESS.\n3 = NATED_IP_ADDRESS.\n4 = GTP_TEID.", - "enum": [ - "SEE_DESCRIPTION" - ], - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" - }, - "value": { - "description": "Value for the identifier.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "type", - "value" - ], - "type": "object", - "x-etsi-ref": "6.5.4" - }, - "ecgi": { - "properties": { - "cellId": { - "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3].", - "type": "string" - }, - "plmn": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "s1UeInfo": { + "type": "array", + "items": { + "title": "S1UeInfo", + "type": "object", + "required": [ + "associateId", + "ecgi", + "s1BearerInfoDetailed" + ], + "properties": { + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } + "description": "1 to N identifiers to associate the information for a specific UE or flow." }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - } - }, - "required": [ - "plmn", - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.5.6" - }, - "s1BearerInfoDetailed": { - "description": "1..N", - "properties": { - "erabId": { - "description": "The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 [i.3].", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "Integer" - }, - "enbInfo": { - "description": "S1 bearer information on eNB", - "properties": { - "ipAddress": { - "type": "string", - "description": "eNB transport layer address of this S1 bearer." + "ecgi": { + "type": "array", + "items": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } }, - "tunnelId": { - "type": "string", - "description": "eNB GTP-U TEID of this S1 bearer." - } + "description": "E-UTRAN Cell Global Identifier." }, - "required": [ - "ipAddress", - "tunnelId" - ] - }, - "sGwInfo": { - "properties": { - "ipAddress": { - "type": "string", - "description": "SGW transport layer address of this S1 bearer." + "s1BearerInfoDetailed": { + "type": "array", + "items": { + "title": "S1BearerInfoDetailed", + "type": "object", + "required": [ + "erabId", + "erabInfo", + "sGwInfo" + ], + "properties": { + "enbInfo": { + "title": "EnbInfo", + "required": [ + "ipAddress", + "tunnelId" + ], + "type": "object", + "properties": { + "ipAddress": { + "type": "string", + "description": "eNB transport layer address of this S1 bearer." + }, + "tunnelId": { + "type": "string", + "description": "eNB GTP-U TEID of this S1 bearer." + } + }, + "description": "S1 bearer information on eNB side as defined below." + }, + "erabId": { + "type": "integer", + "description": "The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 [i.3].", + "contentEncoding": "int32" + }, + "sGwInfo": { + "title": "SGwInfo", + "required": [ + "ipAddress", + "tunnelId" + ], + "type": "object", + "properties": { + "ipAddress": { + "type": "string", + "description": "SGW transport layer address of this S1 bearer." + }, + "tunnelId": { + "type": "string", + "description": "SGW GTP-U TEID of this S1 bearer." + } + }, + "description": "S1 bearer information on GW side as defined below." + } + } }, - "tunnelId": { - "type": "string", - "description": "SGW GTP-U TEID of this S1 bearer." - } + "description": "S1 bearer information as defined below." }, - "required": [ - "ipAddress", - "tunnelId" - ] + "tempUeId": { + "title": "TempUeId", + "required": [ + "mmec", + "mtmsi" + ], + "type": "object", + "properties": { + "mmec": { + "type": "string", + "description": "MMEC as defined in ETSI TS 136 413 [i.3]." + }, + "mtmsi": { + "type": "string", + "description": "M-TMSI as defined in ETSI TS 136 413 [i.3]." + } + }, + "description": "The temporary identifier allocated for the specific UE as defined below." + } } }, + "description": "Information on a specific UE as defined below." + }, + "timeStamp": { + "title": "TimeStamp", "required": [ - "erabId", - "enbInfo" + "nanoSeconds", + "seconds" ], "type": "object", - "x-etsi-mec-cardinality": "Structure (inlined)", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "tempUeId": { - "description": "0..1", "properties": { - "mmec": { - "description": "1", - "type": "string", - "x-etsi-mec-cardinality": "String", - "x-etsi-mec-origin-type": "String" + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" }, - "mtmsi": { - "description": "1", - "type": "string", - "x-etsi-mec-cardinality": "String", - "x-etsi-mec-origin-type": "String" + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" } - }, - "required": [ - "mmec", - "mtmsi" - ], - "type": "object", - "x-etsi-mec-cardinality": "Structure (inlined)", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - }, - "required": [ - "tempUeId", - "associateId", - "ecgi", - "s1BearerInfoDetailed" - ], - "type": "object", - "x-etsi-mec-cardinality": "Structure (inlined)", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "timeStamp": { - "properties": { - "nanoSeconds": { - "type": "number" - }, - "seconds": { - "type": "number" + } } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.3" + } } - }, - "required": [ - "s1UeInfo" - ], - "x-etsi-ref": "6.2.4" - } } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/schemas/S1BearerNotification.schema.json b/MEC012/SRV/RNIS/schemas/S1BearerNotification.schema.json new file mode 100644 index 0000000..91009d3 --- /dev/null +++ b/MEC012/SRV/RNIS/schemas/S1BearerNotification.schema.json @@ -0,0 +1,243 @@ +{ + "title": "S1BearerNotification", + "allOf": [ + { + "title": "InlineNotification", + "required": [ + "notificationType" + ], + "type": "object", + "properties": { + "notificationType": { + "type": "string" + } + }, + "discriminator": { + "propertyName": "notificationType", + "mapping": { + "CaReconfNotification": "#/components/schemas/CaReconfNotification", + "CellChangeNotification": "#/components/schemas/CellChangeNotification", + "MeasRepUeNotification": "#/components/schemas/MeasRepUeNotification", + "MeasTaNotification": "#/components/schemas/MeasTaNotification", + "NrMeasRepUeNotification": "#/components/schemas/NrMeasRepUeNotification", + "RabEstNotification": "#/components/schemas/RabEstNotification", + "RabModNotification": "#/components/schemas/RabModNotification", + "RabRelNotification": "#/components/schemas/RabRelNotification", + "S1BearerNotification": "#/components/schemas/S1BearerNotification", + "ExpiryNotification": "#/components/schemas/ExpiryNotification", + "TestNotification": "#/components/schemas/TestNotification" + } + } + }, + { + "required": [ + "s1Event", + "s1UeInfo", + "_links" + ], + "type": "object", + "properties": { + "s1Event": { + "type": "integer", + "description": "The subscribed event that triggered this notification in S1BearerSubscription.", + "contentEncoding": "int32" + }, + "s1UeInfo": { + "title": "S1UeInfo1", + "required": [ + "ecgi", + "s1BearerInfo" + ], + "type": "object", + "properties": { + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer", + "description": "Numeric value (0-255) corresponding to specified type of identifier as following: <p>0 = reserved. <p>1 = UE_IPv4_ADDRESS. <p>2 = UE_IPV6_ADDRESS. <p>3 = NATED_IP_ADDRESS. <p>4 = GTP_TEID.", + "examples": [ + 0 + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to associate the information for a specific UE or flow." + }, + "ecgi": { + "type": "array", + "items": { + "title": "Ecgi", + "required": [ + "cellId", + "plmn" + ], + "type": "object", + "properties": { + "cellId": { + "type": "string", + "description": "String representing the E-UTRAN Cell Identity. Encoded as a bit string (size (28)) as defined in ETSI TS 136 413 [i.3]." + }, + "plmn": { + "title": "Plmn", + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "properties": { + "mcc": { + "type": "string", + "description": "The Mobile Country Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + }, + "mnc": { + "type": "string", + "description": "The Mobile Network Code part of PLMN Identity as defined in ETSI TS 136 413 [i.3]." + } + } + } + } + }, + "description": "E-UTRAN Cell Global Identifier." + }, + "s1BearerInfo": { + "type": "array", + "items": { + "title": "S1BearerInfo1", + "type": "object", + "required": [ + "enbInfo", + "erabId", + "sGwInfo" + ], + "properties": { + "enbInfo": { + "title": "EnbInfo", + "required": [ + "ipAddress", + "tunnelId" + ], + "type": "object", + "properties": { + "ipAddress": { + "type": "string", + "description": "eNB transport layer address of this S1 bearer." + }, + "tunnelId": { + "type": "string", + "description": "eNB GTP-U TEID of this S1 bearer." + } + }, + "description": "S1 bearer information on eNB side as defined below." + }, + "erabId": { + "type": "integer", + "description": "The attribute that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413 [i.3].", + "contentEncoding": "int32" + }, + "sGwInfo": { + "title": "SGwInfo", + "required": [ + "ipAddress", + "tunnelId" + ], + "type": "object", + "properties": { + "ipAddress": { + "type": "string", + "description": "SGW transport layer address of this S1 bearer." + }, + "tunnelId": { + "type": "string", + "description": "SGW GTP-U TEID of this S1 bearer." + } + }, + "description": "S1 bearer information on GW side as defined below." + } + } + }, + "description": "S1 bearer information as defined below." + }, + "tempUeId": { + "title": "TempUeId", + "required": [ + "mmec", + "mtmsi" + ], + "type": "object", + "properties": { + "mmec": { + "type": "string", + "description": "MMEC as defined in ETSI TS 136 413 [i.3]." + }, + "mtmsi": { + "type": "string", + "description": "M-TMSI as defined in ETSI TS 136 413 [i.3]." + } + }, + "description": "The temporary identifier allocated for the specific UE as defined below." + } + }, + "description": "Information on specific UE that matches the criteria in S1BearerSubscription as defined below." + }, + "timeStamp": { + "title": "TimeStamp", + "required": [ + "nanoSeconds", + "seconds" + ], + "type": "object", + "properties": { + "nanoSeconds": { + "type": "integer", + "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + }, + "seconds": { + "type": "integer", + "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", + "contentEncoding": "int32" + } + } + }, + "_links": { + "description": "Links to resources related to this notification.", + "required": [ + "subscription" + ], + "properties": { + "subscription": { + "description": "A link to the related subscription.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource" + } + } + } + } + } + } + } + ] + } \ No newline at end of file -- GitLab From 8081c1c9d07268c64b2ca8593b31cbca49d9ac83 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Wed, 3 Jan 2024 18:08:11 +0100 Subject: [PATCH 33/94] MEC028 v2.3.1 completed --- MEC028/WAI/EXT_SUB/ExistingSubscription.robot | 3 +- .../jsons/CreateAssocStaSubscription.json | 2 +- MEC028/WAI/MEAS/WaiMeasurement.robot | 154 +- MEC028/WAI/MEAS/environment/variables.txt | 6 +- MEC028/WAI/MEAS/jsons/MeasurementConfig.json | 3 + .../MEAS/jsons/MeasurementConfigError.json | 4 +- .../MEAS/jsons/MeasurementConfigUpdate.json | 3 + MEC028/WAI/STA_INFO/WaiStaInfo.robot | 12 +- MEC028/WAI/STA_INFO/environment/variables.txt | 4 +- .../schemas/ProblemDetails.schema.json | 74 +- .../WAI/STA_INFO/schemas/StaInfo.schema.json | 1540 ++++++++--------- MEC028/WAI/SUB/WaiSubscription.robot | 77 +- MEC028/WAI/SUB/environment/variables.txt | 5 +- .../WAI/SUB/jsons/AssocStaSubscription.json | 18 +- .../SUB/jsons/CreateAssocStaSubscription.json | 23 + 15 files changed, 1027 insertions(+), 901 deletions(-) create mode 100644 MEC028/WAI/SUB/jsons/CreateAssocStaSubscription.json diff --git a/MEC028/WAI/EXT_SUB/ExistingSubscription.robot b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot index 2015b8b..87a5420 100644 --- a/MEC028/WAI/EXT_SUB/ExistingSubscription.robot +++ b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot @@ -90,7 +90,7 @@ TC_MEC_MEC028_SRV_WAI_010_OK TC_MEC_MEC028_SRV_WAI_010_NF [Documentation] ... Check that the IUT responds with an error when an not existing subscription cannot be deleted" - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.6.3.5 + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.6.3.5 [Setup] Remove Subscription Info Using SubId ${NOT_EXISTING_SUB_ID} @@ -146,7 +146,6 @@ Create New Subscription Info ${file}= Catenate SEPARATOR= jsons/ CreateAssocStaSubscription .json ${body}= Get File ${file} ${json_data}= Evaluate json.loads('''${body}''') json - Log Original JSON: ${json_data} ${new_href}= Set Variable ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT}/${apiRoot}/${apiName}/${apiVersion}/subscriptions/${SUB_ID} Set To Dictionary ${json_data["_links"]["self"]} href=${new_href} ${modified_json_string}= Evaluate json.dumps(${json_data}) diff --git a/MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json b/MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json index 3e04ff8..7fed698 100644 --- a/MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json +++ b/MEC028/WAI/EXT_SUB/jsons/CreateAssocStaSubscription.json @@ -3,7 +3,7 @@ "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", "_links": { "self": { - "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" + "href": "/wai/v2/subscriptions/sub123" } }, "expiryDeadline": { diff --git a/MEC028/WAI/MEAS/WaiMeasurement.robot b/MEC028/WAI/MEAS/WaiMeasurement.robot index 0aa1a6d..3fe3b74 100644 --- a/MEC028/WAI/MEAS/WaiMeasurement.robot +++ b/MEC028/WAI/MEAS/WaiMeasurement.robot @@ -5,84 +5,95 @@ Resource environment/variables.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot +Library Collections Library String Library OperatingSystem Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false *** Test Cases *** -TP_MEC_MEC028_SRV_WAI_012_OK +TC_MEC_MEC028_SRV_WAI_012_OK [Documentation] ... Check that the IUT responds with a list of measurement ... configurations available from the WLAN Access Information Service - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.7.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.7.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList + [Setup] Create a new measurement configuration ${MEAS_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a list of list of measurement configurations Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MeasurementConfigLinkList + + [TearDown] Delete a specified measurement configuration ${MEAS_ID} -TP_MEC_MEC028_SRV_WAI_013_OK +TC_MEC_MEC028_SRV_WAI_013_OK [Documentation] ... Check that the IUT responds with a new measurement configuration - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.7.3.4 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfig + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.7.3.4 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfig Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - ${path} Catenate SEPARATOR= jsons/ MeasurementConfig.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Create a new measurement configuration ${body} - Check HTTP Response Status Code Is 200 + + Create a new measurement configuration ${MEAS_ID} + Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is MeasurementConfigLinkList Should Be Equal As Strings ${response['body']['staIdentity']['staId']} ${STA_ID} - Should Be Equal As Strings ${response['body']['measurementId'] ${MEAS_ID} - Should Be Equal As Strings ${json_object['measurementInfo']} ${response['body']['measurementInfo']} + Should Be Equal As Strings ${response['body']['measurementId']} ${MEAS_ID} + Should Be Equal As Strings ${response['body']['measurementInfo']} ${response['body']['measurementInfo']} -TP_MEC_MEC028_SRV_WAI_013_BR +TC_MEC_MEC028_SRV_WAI_013_BR [Documentation] ... Check that the IUT responds with an error when an invalid request is sent - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.7.3.4 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfig + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.7.3.4 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfig Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - ${path} Catenate SEPARATOR= jsons/ MeasurementConfigError.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Create a new measurement configuration ${body} + + Create a new measurement configuration from file MeasurementConfigError Check HTTP Response Status Code Is 400 -TP_MEC_MEC028_SRV_WAI_014_OK +TC_MEC_MEC028_SRV_WAI_014_OK [Documentation] ... Check that the IUT responds with the specified measurement configuration - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.1 - ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.8.3.1 + ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + + [Setup] Create a new measurement configuration ${MEAS_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - Check HTTP Response Body Json Schema Is MeasurementConfig + Retrieve a specified measurement configuration ${MEAS_ID} + Check HTTP Response Body Json Schema Is MeasurementConfig Check HTTP Response Status Code Is 200 - Should Be Equal As Strings ${response['body']['measurementId'] ${MEAS_ID} - - + Should Be Equal As Strings ${response['body']['measurementId']} ${MEAS_ID} -TP_MEC_MEC028_SRV_WAI_014_NF + [TearDown] Delete a specified measurement configuration ${MEAS_ID} + +TC_MEC_MEC028_SRV_WAI_014_NF [Documentation] ... Check that the IUT responds with an error when an invalid request is sent - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.1 - ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.8.3.1 + ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + + [Setup] Delete a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID} Check HTTP Response Status Code Is 404 - + -TP_MEC_MEC028_SRV_WAI_015_OK +TC_MEC_MEC028_SRV_WAI_015_OK [Documentation] ... Check that the IUT responds with the modified measurement configuration - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.2 - ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.8.3.2 + ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + + [Setup] Create a new measurement configuration ${MEAS_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ MeasurementConfigUpdate.json @@ -91,42 +102,55 @@ TP_MEC_MEC028_SRV_WAI_015_OK Update a specified measurement configuration ${MEAS_ID} ${body} Check HTTP Response Status Code Is 200 Should Be Equal As Strings ${response['body']['staIdentity']['staId']} ${json_object['staIdentity']['staId']} - Should Be Equal As Strings ${response['body']['measurementId'] ${MEAS_ID} + Should Be Equal As Strings ${response['body']['measurementId']} ${MEAS_ID} Should Be Equal As Strings ${response['body']['measurementInfo']} ${json_object['measurementInfo']} + [TearDown] Delete a specified measurement configuration ${MEAS_ID} + -TP_MEC_MEC028_SRV_WAI_015_NF +TC_MEC_MEC028_SRV_WAI_015_NF [Documentation] ... Check that the IUT responds with an error when an invalid request is sent - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.2 - ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.8.3.2 + ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + + [Setup] Create a new measurement configuration ${MEAS_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Update a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID} MeasurementConfigUpdate.json Check HTTP Response Status Code Is 404 + + [TearDown] Delete a specified measurement configuration ${MEAS_ID} -TP_MEC_MEC028_SRV_WAI_016_OK +TC_MEC_MEC028_SRV_WAI_016_OK [Documentation] ... Check that the IUT responds with with 204 when requested to delete the specified measurement configuration - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.5 - ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.8.3.5 + ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + + [Setup] Create a new measurement configuration ${MEAS_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Delete a specified measurement configuration ${MEAS_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC028_SRV_WAI_016_NF +TC_MEC_MEC028_SRV_WAI_016_NF [Documentation] ... Check that the IUT responds with an error when an invalid request is sent - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.5 - ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.8.3.5 + ... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList" + + [Setup] Delete a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Delete a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID} - Check HTTP Response Status Code Is 204 + Check HTTP Response Status Code Is 404 *** Keywords *** @@ -136,18 +160,39 @@ Retrieve a list of list of measurement configurations Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement + GET ${apiRoot}/${apiName}/${apiVersion}/measurements ${output}= Output response Set Suite Variable ${response} ${output} Create a new measurement configuration - [Arguments] ${body} + [Arguments] ${measurementId} + Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ MeasurementConfig.json + ${body} Get File ${path} + ${json_data}= Evaluate json.loads('''${body}''') json + Set To Dictionary ${json_data} measurementId=${measurementId} + ${modified_json_string}= Evaluate json.dumps(${json_data}) + POST ${apiRoot}/${apiName}/${apiVersion}/measurements ${modified_json_string} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Create a new measurement configuration from file + [Arguments] ${filename} + + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - POST ${apiRoot}/${apiName}/${apiVersion}/queries/measurements ${body} + ${path} Catenate SEPARATOR= jsons/ ${filename} .json + ${body} Get File ${path} + ${json_data}= Evaluate json.loads('''${body}''') json + POST ${apiRoot}/${apiName}/${apiVersion}/measurements ${json_data} ${output}= Output response Set Suite Variable ${response} ${output} @@ -157,9 +202,9 @@ Retrieve a specified measurement configuration Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID} + GET ${apiRoot}/${apiName}/${apiVersion}/measurements/${MEAS_CONF_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -168,14 +213,13 @@ Update a specified measurement configuration Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID} ${body} + PUT ${apiRoot}/${apiName}/${apiVersion}/measurements/${MEAS_CONF_ID} ${content} ${output}= Output response Set Suite Variable ${response} ${output} - Delete a specified measurement configuration [Arguments] ${MEAS_CONF_ID} Should Be True ${PIC_MEC_SYSTEM} == 1 @@ -183,7 +227,7 @@ Delete a specified measurement configuration Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID} + DELETE ${apiRoot}/${apiName}/${apiVersion}/measurements/${MEAS_CONF_ID} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC028/WAI/MEAS/environment/variables.txt b/MEC028/WAI/MEAS/environment/variables.txt index bb9bd9d..becba21 100644 --- a/MEC028/WAI/MEAS/environment/variables.txt +++ b/MEC028/WAI/MEAS/environment/variables.txt @@ -4,11 +4,11 @@ ${apiName} wai ${apiVersion} v2 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 127.0.0.1 -${MEC-APP_PORT} 8082 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3001 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${STA_ID} 123 -${MEAS_ID} 456 +${MEAS_ID} 123 ${INVALID_MEASUREMENT_CONFIG_ID} 999 \ No newline at end of file diff --git a/MEC028/WAI/MEAS/jsons/MeasurementConfig.json b/MEC028/WAI/MEAS/jsons/MeasurementConfig.json index deb6857..97d78c9 100644 --- a/MEC028/WAI/MEAS/jsons/MeasurementConfig.json +++ b/MEC028/WAI/MEAS/jsons/MeasurementConfig.json @@ -4,6 +4,9 @@ "macId": "123" } ], + "staIdentity": { + "staId": "123" + }, "measurementId": "123", "measurementInfo": { "measurementDuration": 10 diff --git a/MEC028/WAI/MEAS/jsons/MeasurementConfigError.json b/MEC028/WAI/MEAS/jsons/MeasurementConfigError.json index a2e38f2..b1cc702 100644 --- a/MEC028/WAI/MEAS/jsons/MeasurementConfigError.json +++ b/MEC028/WAI/MEAS/jsons/MeasurementConfigError.json @@ -1,10 +1,10 @@ { - "StaIdentities": [ + "statId": [ { "macId": "123" } ], - "measurementId": "123", + "measurementId": "321", "measurementInfo": { "measurementDuration": 10 }, diff --git a/MEC028/WAI/MEAS/jsons/MeasurementConfigUpdate.json b/MEC028/WAI/MEAS/jsons/MeasurementConfigUpdate.json index b758cf4..1764041 100644 --- a/MEC028/WAI/MEAS/jsons/MeasurementConfigUpdate.json +++ b/MEC028/WAI/MEAS/jsons/MeasurementConfigUpdate.json @@ -4,6 +4,9 @@ "macId": "123" } ], + "staIdentity": { + "staId": "123" + }, "measurementId": "123", "measurementInfo": { "measurementDuration": 50 diff --git a/MEC028/WAI/STA_INFO/WaiStaInfo.robot b/MEC028/WAI/STA_INFO/WaiStaInfo.robot index 7cc7b4e..9fa2c31 100644 --- a/MEC028/WAI/STA_INFO/WaiStaInfo.robot +++ b/MEC028/WAI/STA_INFO/WaiStaInfo.robot @@ -14,8 +14,8 @@ Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_v TP_MEC_MEC028_SRV_WAI_003_OK [Documentation] ... Check that the IUT responds with the list of Station Point - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.4.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schema/StaInfo #Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.4.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schema/StaInfo Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the station information @@ -31,8 +31,8 @@ TP_MEC_MEC028_SRV_WAI_003_OK TP_MEC_MEC028_SRV_WAI_004_OK [Documentation] ... Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.4.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schema/StaInfo #Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.4.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schema/StaInfo Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the station information using filters ${filter} @@ -49,8 +49,8 @@ TP_MEC_MEC028_SRV_WAI_004_OK TP_MEC_MEC028_SRV_WAI_004_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 028 2.2.1, clause 7.4.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schema/StaInfo #Outdated + ... ETSI GS MEC 028 2.3.1, clause 7.4.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schema/StaInfo Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the station information using filters ${bad_filter} diff --git a/MEC028/WAI/STA_INFO/environment/variables.txt b/MEC028/WAI/STA_INFO/environment/variables.txt index 79e2b50..042ce8f 100644 --- a/MEC028/WAI/STA_INFO/environment/variables.txt +++ b/MEC028/WAI/STA_INFO/environment/variables.txt @@ -4,8 +4,8 @@ ${apiName} wai ${apiVersion} v2 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 127.0.0.1 -${MEC-APP_PORT} 8082 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3001 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/MEC028/WAI/STA_INFO/schemas/ProblemDetails.schema.json b/MEC028/WAI/STA_INFO/schemas/ProblemDetails.schema.json index e14c086..5581cbf 100644 --- a/MEC028/WAI/STA_INFO/schemas/ProblemDetails.schema.json +++ b/MEC028/WAI/STA_INFO/schemas/ProblemDetails.schema.json @@ -1,38 +1,38 @@ -{ - "properties": { - "detail": { - "description": "A human-readable explanation specific to this occurrence of the problem", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" + { + "properties": { + "detail": { + "description": "A human-readable explanation specific to this occurrence of the problem", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "instance": { + "description": "A URI reference that identifies the specific occurrence of the problem", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "status": { + "description": "The HTTP status code for this occurrence of the problem", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "title": { + "description": "A short, human-readable summary of the problem type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "type": { + "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } }, - "instance": { - "description": "A URI reference that identifies the specific occurrence of the problem", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - }, - "status": { - "description": "The HTTP status code for this occurrence of the problem", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "title": { - "description": "A short, human-readable summary of the problem type", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "type": { - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "URI" - } - }, - "type": "object" -} \ No newline at end of file + "type": "object" + } \ No newline at end of file diff --git a/MEC028/WAI/STA_INFO/schemas/StaInfo.schema.json b/MEC028/WAI/STA_INFO/schemas/StaInfo.schema.json index cc1136c..52449df 100644 --- a/MEC028/WAI/STA_INFO/schemas/StaInfo.schema.json +++ b/MEC028/WAI/STA_INFO/schemas/StaInfo.schema.json @@ -1,789 +1,789 @@ { -"items":{ - "properties": { - "apAssociated": { - "properties": { - "assocId": { - "description": "Unique number which identifies a particular association between the station and Access Point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the Access Point.", - "items": { - "type": "string" + "items": { + "properties": { + "apAssociated": { + "properties": { + "assocId": { + "description": "Unique number which identifies a particular association between the station and Access Point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - }, - "macId": { - "description": "Unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "string" - }, - "ssid": { - "description": "Service Set Identifier to identify logical networks.", - "items": { - "type": "string" + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the Access Point.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "string" }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.12" - }, - "beaconReport": { - "properties": { - "bssId": { - "description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report has been received.", - "items": { - "type": "string" + "macId": { + "description": "Unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "string" }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "String" - }, - "channelId": { - "description": "Channel number where the beacon was received.", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "measurementId": { - "description": "Measurement ID of the Measurement configuration applied to this Beacon Report.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "ssid": { + "description": "Service Set Identifier to identify logical networks.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } }, - "reportingCondition": { - "description": "As in table T9-89 of IEEE 802.11-2012 [8].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "ssId": { - "description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is received.", - "items": { - "type": "string" + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.12" + }, + "beaconReport": { + "properties": { + "bssId": { + "description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report has been received.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "String" - }, - "staId": { - "properties": { - "aid": { - "description": "Number which identifies a particular association between a station and an Access Point ", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the station.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - }, - "macId": { - "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "ssid": { - "description": "Service Set Identifier to identify logical networks.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } + "channelId": { + "description": "Channel number where the beacon was received.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.11" - } - }, - "required": [ - "staId", - "measurementId", - "channelId", - "bssId", - "ssId", - "reportingCondition" - ], - "type": "object", - "x-etsi-ref": "6.5.27" - }, - "channel": { - "description": "Channel currently used by the station.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "rssi": { - "properties": { - "rssi": { - "description": "The Received Signal Strength Indicator from a station", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint8" - } - }, - "required": [ - "rssi" - ], - "type": "object", - "x-etsi-ref": "6.5.21" - }, - "staDataRate": { - "properties": { - "staId": { - "properties": { - "aid": { - "description": "Number which identifies a particular association between a station and an Access Point ", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the station.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - }, - "macId": { - "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "ssid": { - "description": "Service Set Identifier to identify logical networks.", - "items": { - "type": "string" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } + "measurementId": { + "description": "Measurement ID of the Measurement configuration applied to this Beacon Report.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.11" - }, - "staLastDataDownlinkRate": { - "description": "The data transmit rate in kbps that was most recently used for transmission of data PPDUs from the access point to the station.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" + "reportingCondition": { + "description": "As in table T9-89 of IEEE 802.11-2012 [8].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "ssId": { + "description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is received.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "staId": { + "properties": { + "aid": { + "description": "Number which identifies a particular association between a station and an Access Point ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the station.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "macId": { + "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ssid": { + "description": "Service Set Identifier to identify logical networks.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.11" + } }, - "staLastDataUplinkRate": { - "description": "The data transmit rate in Kbps that was most recently used for transmission of data PPDUs from the associated station to the access point.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - } + "required": [ + "staId", + "measurementId", + "channelId", + "bssId", + "ssId", + "reportingCondition" + ], + "type": "object", + "x-etsi-ref": "6.5.27" }, - "type": "object", - "x-etsi-ref": "6.5.22" - }, - "staId": { - "properties": { - "aid": { - "description": "Number which identifies a particular association between a station and an Access Point ", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" + "channel": { + "description": "Channel currently used by the station.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "rssi": { + "properties": { + "rssi": { + "description": "The Received Signal Strength Indicator from a station", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } }, - "ipAddress": { - "description": "IPv4 or IPv6 address allocated for the station.", - "items": { - "type": "string" + "required": [ + "rssi" + ], + "type": "object", + "x-etsi-ref": "6.5.21" + }, + "staDataRate": { + "properties": { + "staId": { + "properties": { + "aid": { + "description": "Number which identifies a particular association between a station and an Access Point ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the station.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "macId": { + "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ssid": { + "description": "Service Set Identifier to identify logical networks.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.11" }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - }, - "macId": { - "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "ssid": { - "description": "Service Set Identifier to identify logical networks.", - "items": { - "type": "string" + "staLastDataDownlinkRate": { + "description": "The data transmit rate in kbps that was most recently used for transmission of data PPDUs from the access point to the station.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "macId" - ], - "type": "object", - "x-etsi-ref": "6.5.11" - }, - "staStatistics": { - "properties": { - "groupIdentity": { - "description": "Indicates the requested statistics group describing the Statistics Group Data according to table 9-114 of IEEE 802.11-2016 [8].", - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt8" - }, - "md": { - "description": "Measurement Duration.", - "format": "uint16", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UInt16" + "staLastDataUplinkRate": { + "description": "The data transmit rate in Kbps that was most recently used for transmission of data PPDUs from the associated station to the access point.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + } }, - "statisticsGroupData": { - "description": "Statistics Group Data as defined in Annex C of IEEE 802.112016 [8].", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "not specified", - "properties": { - "dot11AMPDUDelimiterCRCErrorCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11AMPDUReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11AMSDUAckFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11AckFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11BeamformingFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ChannelWidthSwitchCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11DualCTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11DualCTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ExplicitBARFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FCSErrorCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FailedAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FailedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FortyMHzFrameReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FortyMHzFrameTransmittedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11FrameDuplicateCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GrantedRDGUnusedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GrantedRDGUsedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GroupReceivedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11GroupTransmittedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ImplicitBARFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11MPDUInReceivedAMPDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11MultipleRetryAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11MultipleRetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11PSMPUTTGrantDuration": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11PSMPUTTUsedDuration": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosAckFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosDiscardedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosFailedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosFrameDuplicateCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosMPDUsReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosMultipleRetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosReceivedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRetriesReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosRetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosTransmittedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11QosTransmittedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsBIPMICErrors": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsCCMPDecryptErrors": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsCCMPReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsCMACReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsRobustMgmtCCMPReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsTKIPICVErrors": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RSNAStatsTKIPReplays": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSLSIGFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSLSIGSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ReceivedAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ReceivedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11ReceivedOctetsInAMPDUCount": { - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint64" - }, - "dot11ReceivedOctetsInAMSDUCount": { - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint64" - }, - "dot11RetryAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11RetryCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11STAStatisticsAPAverageAccessDelay": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayBackGround": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayBestEffort": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayVideo": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsAverageAccessDelayVoice": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsChannelUtilization": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STAStatisticsStationCount": { - "format": "uint8", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint8" - }, - "dot11STBCCTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11STBCCTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedAMPDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedFragmentCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedFrameCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedFramesInGrantedRDGCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedMPDUsInAMPDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedOctetsInAMPDUCount": { - "format": "int64", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint64" - }, - "dot11TransmittedOctetsInAMSDUCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TransmittedOctetsInGrantedRDGCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TwentyMHzFrameReceivedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11TwentyMHzFrameTransmittedCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11nonSTBCCTSFailureCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - }, - "dot11nonSTBCCTSSuccessCount": { - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Uint32" - } + "type": "object", + "x-etsi-ref": "6.5.22" + }, + "staId": { + "properties": { + "aid": { + "description": "Number which identifies a particular association between a station and an Access Point ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ipAddress": { + "description": "IPv4 or IPv6 address allocated for the station.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" }, - "type": "object" - } + "macId": { + "description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ssid": { + "description": "Service Set Identifier to identify logical networks.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "macId" + ], + "type": "object", + "x-etsi-ref": "6.5.11" }, - "required": [ - "md", - "groupIdentity", - "statisticsGroupData" - ], - "type": "object", - "x-etsi-ref": "6.5.13" - }, - "timeStamp": { - "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" + "staStatistics": { + "properties": { + "groupIdentity": { + "description": "Indicates the requested statistics group describing the Statistics Group Data according to table 9-114 of IEEE 802.11-2016 [8].", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "md": { + "description": "Measurement Duration.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "statisticsGroupData": { + "description": "Statistics Group Data as defined in Annex C of IEEE 802.112016�[8].", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "not specified", + "properties": { + "dot11AMPDUDelimiterCRCErrorCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11AMPDUReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11AMSDUAckFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11AckFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11BeamformingFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ChannelWidthSwitchCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11DualCTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11DualCTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ExplicitBARFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FCSErrorCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FailedAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FailedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FortyMHzFrameReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FortyMHzFrameTransmittedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11FrameDuplicateCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GrantedRDGUnusedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GrantedRDGUsedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GroupReceivedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11GroupTransmittedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ImplicitBARFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11MPDUInReceivedAMPDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11MultipleRetryAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11MultipleRetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11PSMPUTTGrantDuration": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11PSMPUTTUsedDuration": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosAckFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosDiscardedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosFailedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosFrameDuplicateCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosMPDUsReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosMultipleRetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosReceivedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRetriesReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosRetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosTransmittedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11QosTransmittedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsBIPMICErrors": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsCCMPDecryptErrors": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsCCMPReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsCMACReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsRobustMgmtCCMPReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsTKIPICVErrors": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RSNAStatsTKIPReplays": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSLSIGFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSLSIGSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ReceivedAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ReceivedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11ReceivedOctetsInAMPDUCount": { + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint64" + }, + "dot11ReceivedOctetsInAMSDUCount": { + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint64" + }, + "dot11RetryAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11RetryCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11STAStatisticsAPAverageAccessDelay": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayBackGround": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayBestEffort": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayVideo": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsAverageAccessDelayVoice": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsChannelUtilization": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STAStatisticsStationCount": { + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dot11STBCCTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11STBCCTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedAMPDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedFragmentCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedFrameCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedFramesInGrantedRDGCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedMPDUsInAMPDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedOctetsInAMPDUCount": { + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint64" + }, + "dot11TransmittedOctetsInAMSDUCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TransmittedOctetsInGrantedRDGCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TwentyMHzFrameReceivedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11TwentyMHzFrameTransmittedCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11nonSTBCCTSFailureCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dot11nonSTBCCTSSuccessCount": { + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "type": "object" + } }, - "seconds": { - "description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } + "required": [ + "md", + "groupIdentity", + "statisticsGroupData" + ], + "type": "object", + "x-etsi-ref": "6.5.13" }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.2" - } - }, - "required": [ - "staId" - ], - "type": "object", - "x-etsi-ref": "6.2.3" - } + "timeStamp": { + "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 Unixtime 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" + } + }, + "required": [ + "staId" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + } } \ No newline at end of file diff --git a/MEC028/WAI/SUB/WaiSubscription.robot b/MEC028/WAI/SUB/WaiSubscription.robot index 1db1a1d..294d297 100644 --- a/MEC028/WAI/SUB/WaiSubscription.robot +++ b/MEC028/WAI/SUB/WaiSubscription.robot @@ -5,6 +5,7 @@ Resource environment/variables.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot +Library Collections Library String Library OperatingSystem Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false @@ -13,24 +14,32 @@ Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_v TP_MEC_MEC028_SRV_WAI_005_OK [Documentation] ... Check that the IUT responds with the requested list of subscription - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.5.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription + + [Setup] Create New Subscription Info ${SUB_ID} + Set Suite Variable ${Location} ${response['headers']['Location']} Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the subscription information ${SUB_FILTER} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SubscriptionLinkList - FOR ${assocStaSub} IN @{response['body']['assocStaSubscription']} + FOR ${assocStaSub} IN @{response['body']} ${passed} Run Keyword And Return Status Should Be Equal As Strings ${assocStaSub['_links']['self']['href']} ${HREF} Exit For Loop If ${passed} END + [TearDown] Remove Subscription Info ${Location} + TP_MEC_MEC028_SRV_WAI_006_OK [Documentation] ... Check that the IUT responds with the requested list of subscription - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.5.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription + + [Setup] Create New Subscription Info ${SUB_ID} + Set Suite Variable ${Location} ${response['headers']['Location']} Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -38,31 +47,38 @@ TP_MEC_MEC028_SRV_WAI_006_OK Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SubscriptionLinkList Should Be Equal As Strings ${response['body']['_links']['self']['href']} ${HREF} + + [TearDown] Remove Subscription Info ${Location} TP_MEC_MEC028_SRV_WAI_006_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.5.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription + + [Setup] Create New Subscription Info ${SUB_ID} + Set Suite Variable ${Location} ${response['headers']['Location']} Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve the subscription information ${INVALID_SUB_FILTER} Check HTTP Response Status Code Is 400 + + [TearDown] Remove Subscription Info ${Location} TP_MEC_MEC028_SRV_WAI_006_NF [Documentation] ... Check that the IUT responds with an error when a request with not existing parameters is sent - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.5.3.1 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription Retrieve the subscription information using wrong endpoint Check HTTP Response Status Code Is 404 TP_MEC_MEC028_SRV_WAI_007_OK [Documentation] ... Check that the IUT responds with a Notification Subscription - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.4 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.5.3.4 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Send a request for creating a subscription AssocStaSubscription.json @@ -75,8 +91,8 @@ TP_MEC_MEC028_SRV_WAI_007_OK TP_MEC_MEC028_SRV_WAI_007_BR [Documentation] ... Check that the IUT responds with an error when an invalid Subscription request is sent - ... ETSI GS MEC 028 2.2.1, clause 7.5.3.4 - ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated + ... ETSI GS MEC 028 2.3.1, clause 7.5.3.4 + ... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.3.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Send a request for creating a subscription AssocStaSubscription_BR.json @@ -85,7 +101,7 @@ TP_MEC_MEC028_SRV_WAI_007_BR TP_MEC_MEC028_SRV_WAI_007_NF [Documentation] ... Check that the IUT responds with an error when a request with not existing parameters is sent - ... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1 + ... Reference "ETSI GS MEC 028 2.3.1, clause 7.5.3.1 Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Send a request for creating a subscription using wrong endpoint AssocStaSubscription.json @@ -96,7 +112,7 @@ TP_MEC_MEC028_SRV_WAI_007_NF Send a request for creating a subscription [Arguments] ${content} Log Creating a new subscription - #Set Headers {"Accept":"application/json"} + Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} ${path} Catenate SEPARATOR= jsons/ ${content} @@ -109,7 +125,7 @@ Send a request for creating a subscription Send a request for creating a subscription using wrong endpoint [Arguments] ${content} Log Creating a new subscription - #Set Headers {"Accept":"application/json"} + Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} ${path} Catenate SEPARATOR= jsons/ ${content} @@ -122,7 +138,7 @@ Retrieve the subscription information [Arguments] ${subscription_type} Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - #Set Headers {"Accept":"application/json"} + Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?subscription_type=${subscription_type} @@ -137,4 +153,29 @@ Retrieve the subscription information using wrong endpoint Set Headers {"Authorization":"${TOKEN}"} GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions_INVALID_URI ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file + Set Suite Variable ${response} ${output} + +Create New Subscription Info + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + ${file}= Catenate SEPARATOR= jsons/ CreateAssocStaSubscription .json + ${body}= Get File ${file} + ${json_data}= Evaluate json.loads('''${body}''') json + ${new_href}= Set Variable ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT}/${apiRoot}/${apiName}/${apiVersion}/subscriptions/${SUB_ID} + Set To Dictionary ${json_data["_links"]["self"]} href=${new_href} + ${modified_json_string}= Evaluate json.dumps(${json_data}) + + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${modified_json_string} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove Subscription Info + [Arguments] ${delete_url} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + + DELETE ${delete_url} \ No newline at end of file diff --git a/MEC028/WAI/SUB/environment/variables.txt b/MEC028/WAI/SUB/environment/variables.txt index 0a66f36..963ae9f 100644 --- a/MEC028/WAI/SUB/environment/variables.txt +++ b/MEC028/WAI/SUB/environment/variables.txt @@ -4,8 +4,8 @@ ${apiName} wai ${apiVersion} v2 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 127.0.0.1 -${MEC-APP_PORT} 8082 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3001 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l @@ -14,5 +14,6 @@ ${SUB_TYPE} AssocStaSubscription ${SUB_FILTER} assoc_sta ${INVALID_SUB_FILTER} assocStaSub +${SUB_ID} 123 ${HREF} /wai/v2/subscriptions/1 ${CALLBACK_URI} http://callback.uri/1 \ No newline at end of file diff --git a/MEC028/WAI/SUB/jsons/AssocStaSubscription.json b/MEC028/WAI/SUB/jsons/AssocStaSubscription.json index 152ca49..db4d571 100644 --- a/MEC028/WAI/SUB/jsons/AssocStaSubscription.json +++ b/MEC028/WAI/SUB/jsons/AssocStaSubscription.json @@ -1,7 +1,19 @@ { + "_links": { + "self": { + "href": "/wai/v2/subscriptions/1" + } + }, "apId": { - "macId": "macId01" + "ipAddress": ["192.168.1.1", "2001:db8::1"], + "macId": "00:1A:2B:3C:4D:5E", + "ssid": ["Network1", "Network2"] + }, + "callbackReference": "http://example.com/callback", + "expiryDeadline": { + "nanoSeconds": 500000000, + "seconds": 1641234567 }, - "callbackReference": "http://callback.uri/1", "subscriptionType": "AssocStaSubscription" -} \ No newline at end of file + } + \ No newline at end of file diff --git a/MEC028/WAI/SUB/jsons/CreateAssocStaSubscription.json b/MEC028/WAI/SUB/jsons/CreateAssocStaSubscription.json new file mode 100644 index 0000000..3e04ff8 --- /dev/null +++ b/MEC028/WAI/SUB/jsons/CreateAssocStaSubscription.json @@ -0,0 +1,23 @@ +{ + "subscriptionType": "AssocStaSubscription", + "callbackReference": "http://meAppClient.example.com/wai/v2/notifications/1", + "_links": { + "self": { + "href": "http://meAppServer.example.com/wai/v2/subscriptions/sub123" + } + }, + "expiryDeadline": { + "seconds": 1977836800, + "nanoSeconds": 0 + }, + "apId": { + "bssid": "005C0A0A0A0A", + "ssid": [ + "myNetworkSsid" + ], + "macId": "macId01", + "ipAddress": [ + "10.10.100.1" + ] + } +} \ No newline at end of file -- GitLab From 1795252bc7fc7a06617cbb5371e98a6a755374ef Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 5 Jan 2024 10:04:25 +0100 Subject: [PATCH 34/94] MEC013 v3.1.1 RLOCKLOOK Draft TCs avaialable. --- .../SRV/RLOCLOOK/PlatRadioNodeLocation.robot | 68 ++- MEC013/SRV/RLOCLOOK/environment/variables.txt | 6 +- .../schemas/AccessPointList.schema.json | 523 +++++++++--------- 3 files changed, 317 insertions(+), 280 deletions(-) diff --git a/MEC013/SRV/RLOCLOOK/PlatRadioNodeLocation.robot b/MEC013/SRV/RLOCLOOK/PlatRadioNodeLocation.robot index 11e4ced..4ad2c8b 100644 --- a/MEC013/SRV/RLOCLOOK/PlatRadioNodeLocation.robot +++ b/MEC013/SRV/RLOCLOOK/PlatRadioNodeLocation.robot @@ -14,35 +14,77 @@ Default Tags TC_MEC_SRV_RLOCLOOK *** Test Cases *** + TC_MEC_MEC013_SRV_RLOCLOOK_001_OK [Documentation] ... Check that the IUT responds with the list of radio nodes currently associated with the MEC host and the location of each radio node ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.7 - ... OpenAPI https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/AccessPointList + ... Reference + ... ETSI GS MEC 013 3.1.1 Clause 5.3.7 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.1 + ... ETSI GS MEC 013 3.1.1 Clause 7.9.3.1 - [Tags] PIC_MEC_PLAT PIC_SERVICES INCLUDE_UNDEFINED_SCHEMAS - Get the access points list ${ZONE_ID} + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get the access points list by zone identifier ${ZONE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AccessPointList - Should Be Equal As Strings ${response['body']['accessPointList']['zoneId']} ${ZONE_ID} + Should Be Equal As Strings ${response['body']['zoneId']} ${ZONE_ID} + TC_MEC_MEC013_SRV_RLOCLOOK_001_NF [Documentation] ... Check that the IUT responds with an error when - ... a request for an unknown URI is sent by a MEC Application + ... a request for an URI that cannot be mapped to a valid resource URI + ... is sent by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.7 + ... Reference + ... ETSI GS MEC 013 3.1.1 Clause 5.3.7 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.1 + ... ETSI GS MEC 013 3.1.1 Clause 7.9.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get the access points list ${NON_EXISTENT_ZONE_ID} + Get the access points list by zone identifier ${NON_EXISTENT_ZONE_ID} Check HTTP Response Status Code Is 404 + +TC_MEC_MEC013_SRV_RLOCLOOK_002_OK + [Documentation] + ... Check that the IUT responds with the radio nodes when queried + ... by a MEC Application + ... + ... Reference + ... ETSI GS MEC 013 3.1.1 Clause 5.3.7 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.1 + ... ETSI GS MEC 013 3.1.1 Clause 7.10.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get the access points list by zone identifier and access point ${ZONE_ID} ${AP_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AccessPointList + Should Be Equal As Strings ${response['body']['zoneId']} ${ZONE_ID} + Should Be Equal As Strings ${response['body']['accessPoint'][0]['accessPointId']} ${AP_ID} + + +TC_MEC_MEC013_SRV_RLOCLOOK_002_NF + [Documentation] + ... Check that the IUT responds with an error when the + ... radio nodes does not exist + ... + ... Reference + ... ETSI GS MEC 013 3.1.1 Clause 5.3.7 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.1 + ... ETSI GS MEC 013 3.1.1 Clause 7.10.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get the access points list by zone identifier and access point ${ZONE_ID} ${NON_EXISTENT_AP_ID} + Check HTTP Response Status Code Is 404 + + *** Keywords *** -Get the access points list +Get the access points list by zone identifier [Arguments] ${zoneId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} @@ -51,5 +93,13 @@ Get the access points list Set Suite Variable ${response} ${output} +Get the access points list by zone identifier and access point + [Arguments] ${zoneId} ${accessPointId} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/queries/zones/${zoneId}/accessPoints/${accessPointId} + ${output}= Output response + Set Suite Variable ${response} ${output} + diff --git a/MEC013/SRV/RLOCLOOK/environment/variables.txt b/MEC013/SRV/RLOCLOOK/environment/variables.txt index a9bf262..58b7040 100644 --- a/MEC013/SRV/RLOCLOOK/environment/variables.txt +++ b/MEC013/SRV/RLOCLOOK/environment/variables.txt @@ -1,14 +1,16 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} location -${apiVersion} v2 +${apiVersion} v3 # Specific variables ${ZONE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${NON_EXISTENT_ZONE_ID} NON_EXISTENT_ZONE_ID +${AP_ID} ap01 +${NON_EXISTENT_AP_ID} NON_EXISTENT_AP_ID \ No newline at end of file diff --git a/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.json b/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.json index 2a37408..f321b15 100644 --- a/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.json +++ b/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.json @@ -1,270 +1,255 @@ { - "accessPointList": { - "description": "A type containing list of access points.", - "properties": { - "accessPoint": { - "description": "Collection of the access point information list.", - "items": { - "description": "A type containing access point information.", - "properties": { - "accessPointId": { - "description": "Identifier of access point.", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - }, - "connectionType": { - "description": "The connection type for the access point", - "enum": [ - "Femto", - "LTE-femto", - "Smallcell", - "LTE-smallcell", - "Wifi", - "Pico", - "Micro", - "Macro", - "Wimax", - "Unknown" - ], - "type": "string" - }, - "interestRealm": { - "description": "Interest realm of access point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "locationInfo": { - "properties": { - "accuracy": { - "description": "Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "accuracyAltitude": { - "description": "Altitude accuracy / uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "accuracySemiMinor": { - "description": "Horizontal accuracy / (semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "altitude": { - "description": "Location altitude relative to the WGS84 ellipsoid surface.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Float" - }, - "confidence": { - "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "includedAngle": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "innerRadius": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "latitude": { - "description": "Location latitude, expressed in the range -90� to +90�. Cardinality greater than one only if \"shape\" equals 7.", - "items": { - "format": "float", - "type": "number" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Float" - }, - "longitude": { - "description": "Location longitude, expressed in the range -180� to +180�. Cardinality greater than one only if \"shape\" equals 7.", - "items": { - "format": "float", - "type": "number" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Float" - }, - "offsetAngle": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "orientationMajorAxis": { - "description": "Angle of orientation of the major axis, expressed in the range 0� to 180�, as defined in [14]. Present only if \"shape\" equals 4 or 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "shape": { - "description": "Shape information, as detailed in [14], associated with the reported location coordinate: <p>1 = ELLIPSOID_ARC <p>2 = ELLIPSOID_POINT <p>3 = ELLIPSOID_POINT_ALTITUDE <p>4 = ELLIPSOID_POINT_ALTITUDE_UNCERT_ELLIPSOID <p>5 = ELLIPSOID_POINT_UNCERT_CIRCLE <p>6 = ELLIPSOID_POINT_UNCERT_ELLIPSE <p>7 = POLYGON", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "timestamp": { - "properties": { - "nanoSeconds": { - "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", - "format": "int32", - "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": "int32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.2" - }, - "uncertaintyRadius": { - "description": "Present only if \"shape\" equals 6", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "velocity": { - "description": "Structure with attributes relating to the target entity's velocity, as defined in [14].", - "properties": { - "bearing": { - "description": "Bearing, expressed in the range 0 deg to 360 deg, as defined in [14].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "horizontalSpeed": { - "description": "Horizontal speed, expressed in km/h and defined in [14].", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "uncertainty": { - "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - }, - "velocityType": { - "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: <p>1 = HORIZONTAL <p>2 = HORIZONTAL_VERTICAL <p>3 = HORIZONTAL_UNCERT <p>4 = HORIZONTAL_VERTICAL_UNCERT", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum_inlined" - }, - "verticalSpeed": { - "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Int" - }, - "verticalUncertainty": { - "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "UnsignedInt" - } - }, - "required": [ - "velocityType", - "bearing", - "horizontalSpeed" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - }, - "required": [ - "latitude", - "longitude", - "shape" - ], - "type": "object", - "x-etsi-ref": "6.5.3" - }, - "numberOfUsers": { - "description": "Number of users currently on the access point.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "integer" - }, - "operationStatus": { - "enum": [ - "Serviceable", - "Unserviceable", - "Unknown" - ], - "type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "timezone": { - "description": "Time zone of access point.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "dateTimeStamp" - } - }, - "required": [ - "accessPointId", - "connectionType", - "operationStatus", - "numberOfUsers", - "resourceURL" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "AccessPointInfo" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "zoneId", - "resourceURL" - ], - "type": "object" - } -} \ No newline at end of file + "description": "A type containing list of access points.", + "properties": { + "accessPoint": { + "description": "Collection of the access point information list.", + "items": { + "description": "A type containing access point information.", + "properties": { + "accessPointId": { + "description": "Identifier of access point.", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + }, + "connectionType": { + "description": "This enumeration represents the connection type of an access point", + "enum": [ + "LTE", + "Wifi", + "Wimax", + "5G NR", + "UNKNOWN" + ], + "type": "string" + }, + "interestRealm": { + "description": "Interest realm of access point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "string" + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "numberOfUsers": { + "description": "Number of users currently on the access point.", + "type": "integer", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "integer" + }, + "operationStatus": { + "description": "An enumeration defining the operations status of an access point.", + "enum": [ + "Serviceable", + "Unserviceable", + "Unknown" + ], + "type": "string" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "timezone": { + "description": "Time zone of access point.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "dateTimeStamp" + } + }, + "required": [ + "accessPointId", + "connectionType", + "operationStatus", + "numberOfUsers", + "resourceURL" + ], + "type": "object" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "AccessPointInfo" + }, + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "zoneId": { + "description": "Identifier of zone", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "string" + } + }, + "required": [ + "zoneId", + "resourceURL" + ], + "type": "object" + } \ No newline at end of file -- GitLab From 66494ad43f824af4c39ebd6323b471e246469a8f Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 5 Jan 2024 11:41:44 +0100 Subject: [PATCH 35/94] MEC013 v3.1.1 UEAREALOOK Draft TCs avaialable. --- MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot | 140 +++++ MEC013/SRV/UEAREALOOK/README.md | 0 .../SRV/UEAREALOOK/environment/variables.txt | 14 + .../jsons/UserAreaSubscription.json | 17 + .../NotificationSubscriptionList.schema.json | 55 ++ .../schemas/UserAreaNotification.schema.json | 539 ++++++++++++++++++ 6 files changed, 765 insertions(+) create mode 100644 MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot create mode 100644 MEC013/SRV/UEAREALOOK/README.md create mode 100644 MEC013/SRV/UEAREALOOK/environment/variables.txt create mode 100644 MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json create mode 100644 MEC013/SRV/UEAREALOOK/schemas/NotificationSubscriptionList.schema.json create mode 100644 MEC013/SRV/UEAREALOOK/schemas/UserAreaNotification.schema.json diff --git a/MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot b/MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot new file mode 100644 index 0000000..6d51d58 --- /dev/null +++ b/MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot @@ -0,0 +1,140 @@ +*** Settings *** + +Documentation +... A test suite for validating UE Area Lookup (UEAREALOOK) 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_UEAREASUB + + + +*** Test Cases *** +TP_MEC_MEC013_SRV_UEAREALOOK_001_OK_01 + [Documentation] + ... Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - No filter + ... + ... Reference 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.16.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id UserAreaSubscription + Get all Subscriptions + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + Check HTTP Response Status Code Is 200 + Should Be Equal As Strings ${response['body']['subscription'][0]['subscriptionType']} UserAreaSubscription + [TearDown] Remove subscription ${SUB_ID} + + +TP_MEC_MEC013_SRV_UEAREALOOK_001_OK_02 + [Documentation] + ... Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - No filter + ... + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.16.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id UserAreaSubscription + Get all Subscriptions with filter ${SUB_TYPE_FILTER} + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + Check HTTP Response Status Code Is 200 + Should Be Equal As Strings ${response['body']['subscription'][0]['subscriptionType']} UserAreaSubscription + [TearDown] Remove subscription ${SUB_ID} + + +TP_MEC_MEC013_SRV_UEAREALOOK_002_OK + [Documentation] + ... Check that the IUT acknowledges the change of UE area subscription request + ... when commanded by a MEC Application + ... + ... Reference ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.17.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id UserAreaSubscription + Get specific Subscription ${SUB_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserAreaNotification + Should be Equal ${response['body']['notificationType']} UserAreaNotification + [TearDown] Remove subscription ${SUB_ID} + + +TP_MEC_MEC013_SRV_UEAREALOOK_002_NF + [Documentation] + ... Check that the IUT responds with an error + ... when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + ... + ... Reference ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.17.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove subscription ${NON_EXISTING_SUBSCRIPTION_ID} + Get specific Subscription ${NON_EXISTING_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + + + +*** Keywords *** +Create new subscription and get sub id + [Arguments] ${content} + Create new subscription ${content} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + + +Get all Subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area + ${output}= Output response + Set Suite Variable ${response} ${output} + +Get specific Subscription + [Arguments] ${subscriptionId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get all Subscriptions with filter + [Arguments] ${filter} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area?subscription_type=${filter} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Create new subscription + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove subscription + [Arguments] ${subscriptionId} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} diff --git a/MEC013/SRV/UEAREALOOK/README.md b/MEC013/SRV/UEAREALOOK/README.md new file mode 100644 index 0000000..e69de29 diff --git a/MEC013/SRV/UEAREALOOK/environment/variables.txt b/MEC013/SRV/UEAREALOOK/environment/variables.txt new file mode 100644 index 0000000..1956375 --- /dev/null +++ b/MEC013/SRV/UEAREALOOK/environment/variables.txt @@ -0,0 +1,14 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} location +${apiVersion} v3 + +${SUB_TYPE_FILTER} event +${SUB_TYPE_FILTER_ERROR} dummy +${NON_EXISTING_SUBSCRIPTION_ID} NON_EXISTING_SUBSCRIPTION_ID \ No newline at end of file diff --git a/MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json b/MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json new file mode 100644 index 0000000..aafb876 --- /dev/null +++ b/MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json @@ -0,0 +1,17 @@ +{ + "subscriptionType": "UserAreaSubscription", + "areaDefine": { + "shape": 1, + "points": [ + { + "latitide": 50, + "longitude": 52 + } + ], + "radius": 100 + }, + "addressList": [ + "http://someuri.com/123" + ], + "trackingAccuracy": 99 +} \ No newline at end of file diff --git a/MEC013/SRV/UEAREALOOK/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEAREALOOK/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000..4b24531 --- /dev/null +++ b/MEC013/SRV/UEAREALOOK/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/UEAREALOOK/schemas/UserAreaNotification.schema.json b/MEC013/SRV/UEAREALOOK/schemas/UserAreaNotification.schema.json new file mode 100644 index 0000000..42d19de --- /dev/null +++ b/MEC013/SRV/UEAREALOOK/schemas/UserAreaNotification.schema.json @@ -0,0 +1,539 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "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-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI).", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + }, + "civicInfo": { + "description": "Indicates a Civic address", + "type": "object", + "required": [ + "country" + ], + "properties": { + "country": { + "description": "The two-letter ISO 3166 country code in capital ASCII letters, e.g., DE or US", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "String" + }, + "A1": { + "description": "National subdivisions (state, canton, region, province, prefecture)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A5": { + "description": "Neighbourhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A6": { + "description": "Group of streets below the neighbourhood level", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRD": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POD": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "STS": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNO": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNS": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LMK": { + "description": "Landmark or vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LOC": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "NAM": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PC": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "BLD": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "UNIT": { + "description": "Unit (apartment, suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "FLR": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ROOM": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PLC": { + "description": "Place-type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PCN": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POBOX": { + "description": "Post office box (P.O. box)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ADDCODE": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "SEAT": { + "description": "Seat (desk, cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RD": { + "description": "Primary road or street", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSEC": { + "description": "Road clause", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDBR": { + "description": "Road branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSUBBR": { + "description": "Road sub-branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRM": { + "description": "Road pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POM": { + "description": "Road post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "usageRules": { + "description": "When present, this IE shall carry the value of \"usagerules\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "method": { + "description": "When present, this IE shall contain the method token, carried by the \"method\" Element of the PIDLLO XML document.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "providedBy": { + "description": "When present, this IE shall carry the value of \"provided-by\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "notificationType": { + "description": "Shall be set to \"UserAreaNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "relativeLocationInfo": { + "properties": { + "X": { + "description": "Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system. Positive value represents easting from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Y": { + "description": "Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system. Positive value represents northing from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Z": { + "description": "Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3DPoint. Positive value represents height above origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "mapInfo": { + "properties": { + "ancillaryMapInfo": { + "description": "Ancillary map information may be used to convert coordinates between different coordinate systems.", + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Not_specified" + }, + "mapId": { + "description": "Indicates the ID of the map. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "origin": { + "description": "Indicates the location of the map origin in the local Cartesian coordinate system.", + "properties": { + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure(inlined)" + } + }, + "required": [ + "mapId" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } + }, + "required": [ + "mapInfo", + "X", + "Y" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + }, + "timeStamp": { + "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" + }, + "userLocationEvent": { + "description": "This type represents specified event types for UE location report.", + "enum": [ + "ENTERING_AREA_EVENT", + "LEAVING_AREA_EVENT" + ], + "type": "string" + } + }, + "required": [ + "notificationType", + "address", + "userLocationEvent", + "_links" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [17], clause 6.1.6.2.14.\nNOTE 2:\tAt least one of these attributes shall be present only when reportingLocationReq is set to TRUE in the UserAreaSubscription.", + "x-etsi-ref": "6.4.8" +} \ No newline at end of file -- GitLab From c84c6078a7f10c9191d1ef8dcbb8c63657641de1 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 5 Jan 2024 12:45:58 +0100 Subject: [PATCH 36/94] MEC013 v3.1.1 UEAREASUB Draft TCs avaialable. --- .../UEAREASUB/PlatUeAreaSubscription.robot | 104 ++-- .../SRV/UEAREASUB/environment/variables.txt | 20 +- .../jsons/CircleNotificationSubscription.json | 17 - .../CircleNotificationSubscriptionError.json | 17 - .../UEAREASUB/jsons/UserAreaNotification.json | 12 + .../jsons/UserAreaNotificationError.json | 11 + .../jsons/UserAreaNotificationUpdate.json | 22 + MEC013/SRV/UEAREASUB/libraries/Server.py | 144 +++++ ...CircleNotificationSubscription.schema.json | 177 ------ ...otificationSubscription.schema.v1.1.1.json | 142 ----- .../schemas/UserAreaNotification.schema.json | 539 ++++++++++++++++++ 11 files changed, 808 insertions(+), 397 deletions(-) delete mode 100644 MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json delete mode 100644 MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json create mode 100644 MEC013/SRV/UEAREASUB/jsons/UserAreaNotification.json create mode 100644 MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationError.json create mode 100644 MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationUpdate.json create mode 100644 MEC013/SRV/UEAREASUB/libraries/Server.py delete mode 100644 MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json delete mode 100644 MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json create mode 100644 MEC013/SRV/UEAREASUB/schemas/UserAreaNotification.schema.json diff --git a/MEC013/SRV/UEAREASUB/PlatUeAreaSubscription.robot b/MEC013/SRV/UEAREASUB/PlatUeAreaSubscription.robot index 35eb117..78baa86 100644 --- a/MEC013/SRV/UEAREASUB/PlatUeAreaSubscription.robot +++ b/MEC013/SRV/UEAREASUB/PlatUeAreaSubscription.robot @@ -6,9 +6,10 @@ Documentation Resource ../../../GenericKeywords.robot Resource ../../../pics.txt Resource environment/variables.txt +Library libraries/Server.py Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem - +Library String Default Tags TC_MEC_SRV_UEAREASUB @@ -16,58 +17,73 @@ Default Tags TC_MEC_SRV_UEAREASUB *** Test Cases *** TC_MEC_MEC013_SRV_UEAREASUB_001_OK [Documentation] - ... Check that the IUT acknowledges the UE area change subscription request when - ... commanded by a MEC Application and notifies it when the UE enters the specified circle - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.11 - ... OpenAPI # TODO check this - - [Tags] PIC_MEC_PLAT PIC_SERVICES INCLUDE_UNDEFINED_SCHEMAS - Create new subscription CircleNotificationSubscription + ... Check that the IUT acknowledges the creation of UE area subscription request when commanded by a MEC Application + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.11 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.16.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create new subscription UserAreaNotification Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is CircleNotificationSubscription - Should Be Equal As Strings ${response['body']['circleNotificationSubscription']['callbackReference']} ${APP_UEAREASUB_CALLBACK_URI} - Should Be Equal As Strings ${response['body']['circleNotificationSubscription']['address']} ${IP_ADDRESS} - + Check HTTP Response Body Json Schema Is UserAreaNotification + Should Be Equal As Strings ${response['body']['notificationType']} UserAreaNotification + Spawn Notification Server UserAreaNotification + Validate Json UserAreaNotification.schema.json ${payload_notification} + TC_MEC_MEC013_SRV_UEAREASUB_001_BR [Documentation] - ... Check that the IUT responds with an error when - ... a request with incorrect parameters is sent by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.11 + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - + ... Neither callbackReference nor websockNotifConfig provided + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.11 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.16.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES - Create new subscription CircleNotificationSubscriptionError + Create new subscription UserAreaNotificationError Check HTTP Response Status Code Is 400 TC_MEC_MEC013_SRV_UEAREASUB_002_OK [Documentation] - ... Check that the IUT acknowledges the cancellation of UE area change notifications - ... when commanded by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 204 + ... Check that the IUT acknowledges the change of UE area subscription request when commanded by a MEC Application + ... Reference ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.17.3.2 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id UserAreaNotification + Update subscription ${SUB_ID} UserAreaNotificationUpdate + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserAreaNotification + Should Be Equal As Strings ${response['body']['notificationType']} UserAreaNotification + [TearDown] Remove subscription ${SUB_ID} + TC_MEC_MEC013_SRV_UEAREASUB_002_NF [Documentation] - ... Check that the IUT responds with an error when - ... a request sent by a MEC Application doesn't comply with a required condition - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + ... Check that the IUT acknowledges the change of UE area subscription request when commanded by a MEC Application + ... Reference ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.17.3.2 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove subscription ${NON_EXISTING_SUBSCRIPTION_ID} + Update subscription ${NON_EXISTING_SUBSCRIPTION_ID} UserAreaNotificationUpdate Check HTTP Response Status Code Is 404 *** Keywords *** +Create new subscription and get sub id + [Arguments] ${content} + Create new subscription ${content} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Create new subscription [Arguments] ${content} Set Headers {"Accept":"application/json"} @@ -75,14 +91,30 @@ Create new subscription Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area/circle ${body} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area ${body} ${output}= Output response Set Suite Variable ${response} ${output} - + +Update subscription + [Arguments] ${subscription_id} ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area/${subscription_id} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + Remove subscription [Arguments] ${subscriptionId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area/circle/${subscriptionId} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area/${subscriptionId} ${output}= Output response Set Suite Variable ${response} ${output} + +Spawn Notification Server + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + Set Suite Variable ${payload_notification} ${output} diff --git a/MEC013/SRV/UEAREASUB/environment/variables.txt b/MEC013/SRV/UEAREASUB/environment/variables.txt index ffb1ccf..f9812b8 100644 --- a/MEC013/SRV/UEAREASUB/environment/variables.txt +++ b/MEC013/SRV/UEAREASUB/environment/variables.txt @@ -1,18 +1,22 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} location -${apiVersion} v2 +${apiVersion} v3 + +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 +${SUB_ID} +${NON_EXISTING_SUBSCRIPTION_ID} NON_EXISTING_SUBSCRIPTION_ID + -# Specific variables -${UEAREASUB_CLIENT_ID} 0123 -${APP_UEAREASUB_CALLBACK_URI} {"callbackData": "1234", "notifyURL": "http://application.example.com/notifications/distance_notifications/123456"} -${IP_ADDRESS} acr:10.0.0.1 -${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json b/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json deleted file mode 100644 index 17b185b..0000000 --- a/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10 - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json b/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json deleted file mode 100644 index 3378803..0000000 --- a/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json +++ /dev/null @@ -1,17 +0,0 @@ -{ - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callback": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10 - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/jsons/UserAreaNotification.json b/MEC013/SRV/UEAREASUB/jsons/UserAreaNotification.json new file mode 100644 index 0000000..21d73f3 --- /dev/null +++ b/MEC013/SRV/UEAREASUB/jsons/UserAreaNotification.json @@ -0,0 +1,12 @@ +{ + "notificationType": "UserAreaNotification", + "callbackReference":"127.0.0.1:8888/callback_uri", + "address": "http://someuri.com/123", + "civicInfo": { + "country": "A1" + }, + "userLocationEvent": "ENTERING_AREA_EVENT", + "_links": { + "subscription": "someuri" + } +} \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationError.json b/MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationError.json new file mode 100644 index 0000000..0100ced --- /dev/null +++ b/MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationError.json @@ -0,0 +1,11 @@ +{ + "notificationType": "UserAreaNotification", + "address": "http://someuri.com/123", + "civicInfo": { + "country": "A1" + }, + "userLocationEvent": "ENTERING_AREA_EVENT", + "_links": { + "subscription": "someuri" + } +} \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationUpdate.json b/MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationUpdate.json new file mode 100644 index 0000000..039608d --- /dev/null +++ b/MEC013/SRV/UEAREASUB/jsons/UserAreaNotificationUpdate.json @@ -0,0 +1,22 @@ +{ + "notificationType": "UserAreaNotification", + "callbackReference": "127.0.0.1:8888/callback_uri", + "addressList": ["acr:10.0.0.1"], + "civicInfo": { + "country": "A1" + }, + "userLocationEvent": "ENTERING_AREA_EVENT", + "_links": { + "subscription": "someuri" + }, + "areaDefine": { + "shape": 1, + "points": [ + { + "latitude": -80.86302, + "longitude": 41.277306 + } + ], + "radius": 500 + } +} \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/libraries/Server.py b/MEC013/SRV/UEAREASUB/libraries/Server.py new file mode 100644 index 0000000..c983c3b --- /dev/null +++ b/MEC013/SRV/UEAREASUB/libraries/Server.py @@ -0,0 +1,144 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + notification_json= import_notification_json(self.handler.get_resp_body()) + return notification_json + diff --git a/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json b/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json deleted file mode 100644 index 84f4a28..0000000 --- a/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json +++ /dev/null @@ -1,177 +0,0 @@ -{ - "type": "object", - "properties": { - "circleNotificationSubscription": { - "description": "A type containing data for notifications, when the area is defined as a circle.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "enteringLeavingCriteria": { - "enum": [ - "Entering", - "Leaving" - ], - "type": "string" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "latitude": { - "description": "Latitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "longitude": { - "description": "Longitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "radius": { - "description": "Radius circle around center point in meters.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "address", - "latitude", - "longitude", - "radius", - "trackingAccuracy", - "enteringLeavingCriteria", - "checkImmediate", - "frequency" - ], - "type": "object" - } - }, - "example": { - "circleNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "checkImmediate": true, - "enteringLeavingCriteria": "Entering", - "frequency": 10, - "latitude": -80.88, - "longitude": 41.277, - "radius": 500, - "trackingAccuracy": 10 - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json b/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json deleted file mode 100644 index 6b745ec..0000000 --- a/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json +++ /dev/null @@ -1,142 +0,0 @@ -{ - "definitions": {}, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://example.com/root.json", - "type": "object", - "title": "The Root Schema", - "required": [ - "address", - "callbackReference", - "checkImmediate", - "clientCorrelator", - "enteringLeavingCriteria", - "frequency", - "latitude", - "longitude", - "radius", - "trackingAccuracy" - ], - "properties": { - "address": { - "$id": "#/properties/address", - "type": "string", - "title": "The Address Schema", - "default": "", - "examples": [ - "acr:10.0.0.1" - ], - "pattern": "^(.*)$" - }, - "callbackReference": { - "$id": "#/properties/callbackReference", - "type": "object", - "title": "The Callbackreference Schema", - "required": [ - "callbackData", - "notifyURL" - ], - "properties": { - "callbackData": { - "$id": "#/properties/callbackReference/properties/callbackData", - "type": "string", - "title": "The Callbackdata Schema", - "default": "", - "examples": [ - "1234" - ], - "pattern": "^(.*)$" - }, - "notifyURL": { - "$id": "#/properties/callbackReference/properties/notifyURL", - "type": "string", - "title": "The Notifyurl Schema", - "default": "", - "examples": [ - "http://application.example.com/notifications/distance_notifications/123456" - ], - "pattern": "^(.*)$" - } - } - }, - "checkImmediate": { - "$id": "#/properties/checkImmediate", - "type": "string", - "title": "The Checkimmediate Schema", - "default": "", - "examples": [ - "true" - ], - "pattern": "^(.*)$" - }, - "clientCorrelator": { - "$id": "#/properties/clientCorrelator", - "type": "string", - "title": "The Clientcorrelator Schema", - "default": "", - "examples": [ - "0123" - ], - "pattern": "^(.*)$" - }, - "enteringLeavingCriteria": { - "$id": "#/properties/enteringLeavingCriteria", - "type": "string", - "title": "The Enteringleavingcriteria Schema", - "default": "", - "examples": [ - "Entering" - ], - "pattern": "^(.*)$" - }, - "frequency": { - "$id": "#/properties/frequency", - "type": "string", - "title": "The Frequency Schema", - "default": "", - "examples": [ - "10" - ], - "pattern": "^(.*)$" - }, - "latitude": { - "$id": "#/properties/latitude", - "type": "string", - "title": "The Latitude Schema", - "default": "", - "examples": [ - "-80.86302" - ], - "pattern": "^(.*)$" - }, - "longitude": { - "$id": "#/properties/longitude", - "type": "string", - "title": "The Longitude Schema", - "default": "", - "examples": [ - "41.277306" - ], - "pattern": "^(.*)$" - }, - "radius": { - "$id": "#/properties/radius", - "type": "string", - "title": "The Radius Schema", - "default": "", - "examples": [ - "500" - ], - "pattern": "^(.*)$" - }, - "trackingAccuracy": { - "$id": "#/properties/trackingAccuracy", - "type": "string", - "title": "The Trackingaccuracy Schema", - "default": "", - "examples": [ - "10" - ], - "pattern": "^(.*)$" - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEAREASUB/schemas/UserAreaNotification.schema.json b/MEC013/SRV/UEAREASUB/schemas/UserAreaNotification.schema.json new file mode 100644 index 0000000..ea82b65 --- /dev/null +++ b/MEC013/SRV/UEAREASUB/schemas/UserAreaNotification.schema.json @@ -0,0 +1,539 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "subscription": { + "description": "URI referring to a resource.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + } + }, + "required": [ + "subscription" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI).", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + }, + "civicInfo": { + "description": "Indicates a Civic address", + "type": "object", + "required": [ + "country" + ], + "properties": { + "country": { + "description": "The two-letter ISO 3166 country code in capital ASCII letters, e.g., DE or US", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "String" + }, + "A1": { + "description": "National subdivisions (state, canton, region, province, prefecture)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A5": { + "description": "Neighbourhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A6": { + "description": "Group of streets below the neighbourhood level", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRD": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POD": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "STS": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNO": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNS": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LMK": { + "description": "Landmark or vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LOC": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "NAM": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PC": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "BLD": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "UNIT": { + "description": "Unit (apartment, suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "FLR": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ROOM": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PLC": { + "description": "Place-type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PCN": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POBOX": { + "description": "Post office box (P.O. box)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ADDCODE": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "SEAT": { + "description": "Seat (desk, cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RD": { + "description": "Primary road or street", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSEC": { + "description": "Road clause", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDBR": { + "description": "Road branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSUBBR": { + "description": "Road sub-branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRM": { + "description": "Road pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POM": { + "description": "Road post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "usageRules": { + "description": "When present, this IE shall carry the value of \"usagerules\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "method": { + "description": "When present, this IE shall contain the method token, carried by the \"method\" Element of the PIDLLO XML document.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "providedBy": { + "description": "When present, this IE shall carry the value of \"provided-by\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "notificationType": { + "description": "Shall be set to \"UserAreaNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "relativeLocationInfo": { + "properties": { + "X": { + "description": "Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system. Positive value represents easting from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Y": { + "description": "Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system. Positive value represents northing from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Z": { + "description": "Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3DPoint. Positive value represents height above origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "mapInfo": { + "properties": { + "ancillaryMapInfo": { + "description": "Ancillary map information may be used to convert coordinates between different coordinate systems.", + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Not_specified" + }, + "mapId": { + "description": "Indicates the ID of the map. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "origin": { + "description": "Indicates the location of the map origin in the local Cartesian coordinate system.", + "properties": { + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure(inlined)" + } + }, + "required": [ + "mapId" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } + }, + "required": [ + "mapInfo", + "X", + "Y" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + }, + "timeStamp": { + "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" + }, + "userLocationEvent": { + "description": "This type represents specified event types for UE location report.", + "enum": [ + "ENTERING_AREA_EVENT", + "LEAVING_AREA_EVENT" + ], + "type": "string" + } + }, + "required": [ + "notificationType", + "address", + "userLocationEvent", + "_links" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [17], clause 6.1.6.2.14.\nNOTE 2:\tAt least one of these attributes shall be present only when reportingLocationReq is set to TRUE in the UserAreaSubscription.", + "x-etsi-ref": "6.4.8" +} \ No newline at end of file -- GitLab From 4844af41be5da60b5a594203de0bd7f7f5da436f Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 5 Jan 2024 13:17:26 +0100 Subject: [PATCH 37/94] MEC013 v3.1.1 UEDISTLOOK Draft TCs avaialable. --- .../SRV/UEDISTLOOK/PlatUeDistanceLookup.robot | 119 +++++++++++-- .../SRV/UEDISTLOOK/environment/variables.txt | 8 +- .../jsons/UserDistanceSubscription.json | 18 ++ .../NotificationSubscriptionList.schema.json | 55 ++++++ .../schemas/TerminalDistance.schema.json | 50 ------ .../TerminalDistance.schema.v1.1.1.json | 32 ---- .../UserDistanceSubscription.schema.json | 168 ++++++++++++++++++ 7 files changed, 349 insertions(+), 101 deletions(-) create mode 100644 MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json create mode 100644 MEC013/SRV/UEDISTLOOK/schemas/NotificationSubscriptionList.schema.json delete mode 100644 MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json delete mode 100644 MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json create mode 100644 MEC013/SRV/UEDISTLOOK/schemas/UserDistanceSubscription.schema.json diff --git a/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot b/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot index 74dc0b1..1db676a 100644 --- a/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot +++ b/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot @@ -8,7 +8,7 @@ Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem - +Library String Default Tags TC_MEC_SRV_UEDISTLOOK @@ -20,33 +20,118 @@ ${response} TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK [Documentation] - ... Check that the IUT responds with the distance to a UE + ... Check that the IUT responds with the list of UE distance subscriptions to a UE ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.9 - ... OpenAPI # TODO check this + ... Reference 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.14.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES INCLUDE_UNDEFINED_SCHEMAS - Set Headers {"Accept":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/queries/distance?address=${LOC_QRY_UE_ADDRESS}&latitude=${LOC_QRY_UE_LAT}&longitude=${LOC_QRY_UE_LONG} - ${output}= Output response - Set Suite Variable ${response} ${output} + [Setup] Create new subscription and get sub id UserDistanceSubscription + Get all Subscriptions + Check HTTP Response Body Json Schema Is NotificationSubscriptionList Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is TerminalDistance - + Should Be Equal As Strings ${response['body']['subscription'][0]['subscriptionType']} UserDistanceSubscription + [TearDown] Remove subscription ${SUB_ID} TC_MEC_MEC013_SRV_UEDISTLOOK_001_BR [Documentation] - ... Check that the IUT responds with an error when - ... a request with incorrect parameters is sent by a MEC Application + ... Check that the IUT responds with an error when a request with + ... incorrect parameters is sent by a MEC Application - Invalid filter + ... + ... Reference 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.14.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES INCLUDE_UNDEFINED_SCHEMAS + Get all Subscriptions with error + Check HTTP Response Status Code Is 400 + +TC_MEC_MEC013_SRV_UEDISTLOOK_002_OK + [Documentation] + ... Check that the IUT responds with the distance to a UE + ... when queried by a MEC Application + ... + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.9 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.9 + ... ETSI GS MEC 013 3.1.1 Clause 7.15.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id UserDistanceSubscription + Get specific Subscription ${SUB_ID} + Check HTTP Response Body Json Schema Is UserDistanceSubscription + Check HTTP Response Status Code Is 200 + [TearDown] Remove subscription ${SUB_ID} + + + +TC_MEC_MEC013_SRV_UEDISTLOOK_002_NF + [Documentation] + ... Check that the IUT responds with the distance to a UE + ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.9 + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.9 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.9 + ... ETSI GS MEC 013 3.1.1 Clause 7.15.3.1 - [Tags] PIC_MEC_PLAT PIC_SERVICES + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove subscription ${NON_EXISTING_SUBSCRIPTION_ID} + Get specific Subscription ${NON_EXISTING_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + + +*** Keywords *** +Create new subscription and get sub id + [Arguments] ${content} + Create new subscription ${content} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + +Create new subscription + [Arguments] ${content} Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/queries/distance?address=${LOC_QRY_UE_ADDRESS}&lat=${LOC_QRY_UE_LAT}&longitude=${LOC_QRY_UE_LONG} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/distance ${body} ${output}= Output response Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 400 + +Get all Subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/distance + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get specific Subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/distance/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get all Subscriptions with error + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/distance?event=123 + ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove subscription + [Arguments] ${subscriptionId} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/distance/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTLOOK/environment/variables.txt b/MEC013/SRV/UEDISTLOOK/environment/variables.txt index 217a0d9..87fa46b 100644 --- a/MEC013/SRV/UEDISTLOOK/environment/variables.txt +++ b/MEC013/SRV/UEDISTLOOK/environment/variables.txt @@ -1,14 +1,18 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 + + ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} location -${apiVersion} v2 +${apiVersion} v3 +${SUB_ID} +${NON_EXISTING_SUBSCRIPTION_ID} NON_EXISTING_SUBSCRIPTION_ID # Specific variables ${LOC_QRY_UE_ADDRESS} acr:10.0.0.1 ${LOC_QRY_UE_LAT} -80.86302 diff --git a/MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json b/MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json new file mode 100644 index 0000000..337a1f1 --- /dev/null +++ b/MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json @@ -0,0 +1,18 @@ +{ + "userDistanceSubscription": { + "subscriptionType": "UserDistanceSubscription", + "clientCorrelator": "0123", + "callbackReference": "http://my.callback.com/user-distance/some-id", + "referenceAddress": [ + "acr:10.0.0.3" + ], + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "distance": 100, + "trackingAccuracy": 10, + "criteria": "AllWithinDistance", + "checkImmediate": true + } + } \ No newline at end of file diff --git a/MEC013/SRV/UEDISTLOOK/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEDISTLOOK/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000..4b24531 --- /dev/null +++ b/MEC013/SRV/UEDISTLOOK/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/UEDISTLOOK/schemas/TerminalDistance.schema.json b/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json deleted file mode 100644 index ccee80a..0000000 --- a/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json +++ /dev/null @@ -1,50 +0,0 @@ -{ - "type": "object", - "properties": { - "terminalDistance": { - "description": "A type containing information about the distance from a terminal to a location or between two terminals, in addition the accuracy and a timestamp of the information are provided.", - "properties": { - "accuracy": { - "description": "Accuracy of the provided distance in meters", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "integer" - }, - "distance": { - "description": "Distance from terminal to a location or between two terminals specified in meters", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "integer" - }, - "timestamp": { - "properties": { - "nanoSeconds": { - "description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.", - "format": "int32", - "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": "int32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.2" - } - }, - "required": [ - "distance" - ], - "type": "object" - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json b/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json deleted file mode 100644 index b23ded1..0000000 --- a/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "definitions": {}, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://example.com/root.json", - "type": "object", - "title": "The Root Schema", - "required": [ - " terminalDistance" - ], - "properties": { - " terminalDistance": { - "$id": "#/properties/ terminalDistance", - "type": "object", - "title": "The terminaldistance Schema", - "required": [ - "distance" - ], - "properties": { - "distance": { - "$id": "#/properties/ terminalDistance/properties/distance", - "type": "string", - "title": "The Distance Schema", - "default": "", - "examples": [ - "123" - ], - "pattern": "^(.*)$" - } - } - } - } -} diff --git a/MEC013/SRV/UEDISTLOOK/schemas/UserDistanceSubscription.schema.json b/MEC013/SRV/UEDISTLOOK/schemas/UserDistanceSubscription.schema.json new file mode 100644 index 0000000..6423a84 --- /dev/null +++ b/MEC013/SRV/UEDISTLOOK/schemas/UserDistanceSubscription.schema.json @@ -0,0 +1,168 @@ +{ + "_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" + }, + "checkImmediate": { + "type": "boolean" + }, + "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" + }, + "criteria": { + "description": "An enumeration, defining the distance criteria between devices.", + "enum": [ + "AllWithinDistance", + "AnyWithinDistance", + "AllBeyondDistance", + "AnyBeyondDistance" + ], + "type": "string" + }, + "distance": { + "description": "Distance between users that shall be monitored. The unit is meter.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "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" + }, + "monitoredAddress": { + "description": "Contains addresses of users to monitor (e.g., ‘sip’ URI, ‘tel’ URI, ‘acr’ URI). Reference to a group could be provided here if supported by implementation.\nIf the ReferenceAddress is specified, then the distance between each monitored user and reference user(s) will be monitored.\nIf the ReferenceAddress is not present, then the distance between each pair of the monitored users will be monitored. Note that in that case there shall be at least two addresses specified here.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Array(Uri)" + }, + "referenceAddress": { + "description": "If specified, indicates address of each user that will be used as reference users from which the distances towards monitored users indicated in the Addresses will be monitored (e.g., ‘sip’ URI, ‘tel’ URI, ‘acr’ URI). Reference to a group could be provided here if supported by implementation.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array(Uri)" + }, + "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 \"UserDistanceSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "trackingAccuracy": { + "description": "Number of meters of acceptable error in tracking distance.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "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" + } + } \ No newline at end of file -- GitLab From 1f5532221c5f6c5b98ecaa420e71a6d0698fc6a6 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Fri, 5 Jan 2024 13:57:27 +0100 Subject: [PATCH 38/94] fixed some bugs in MEC016 draft --- MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot | 28 +- MEC016/MEO/UEAPPCTX/environment/variables.txt | 6 +- MEC016/MEO/UEAPPLOC/environment/variables.txt | 4 +- MEC016/MEO/UEAPPS/environment/variables.txt | 4 +- .../schemas/ApplicationList.schema.json | 388 +++++++++--------- 5 files changed, 215 insertions(+), 215 deletions(-) diff --git a/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot index 146a80b..6d06f01 100644 --- a/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot +++ b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot @@ -11,7 +11,7 @@ Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_v *** Test Cases *** -TP_MEC_MEC016_MEO_UEAPPCTX_001_OK +TC_MEC_MEC016_MEO_UEAPPCTX_001_OK [Documentation] ... Check that the IUT acknowledges the creation of the application context when requested by an UE Application ... Reference ETSI GS MEC 016 v2.2.1, clause 7.4.3.4 @@ -26,18 +26,18 @@ TP_MEC_MEC016_MEO_UEAPPCTX_001_OK Set Suite Variable ${contextId} ${response['body']['contextId']} -TP_MEC_MEC016_MEO_UEAPPCTX_001_BR +TC_MEC_MEC016_MEO_UEAPPCTX_001_BR [Documentation] - ... Check that the IUT responds with an error when a request with incorrect URL is sent by a MEC Application + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... Reference ETSI GS MEC 016 v2.2.1, clause 7.4.3.4 ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - Create application context AppContext_BR.json + Create application context AppContext_BR.json Check HTTP Response Status Code Is 400 -TP_MEC_MEC016_MEO_UEAPPCTX_001_NF +TC_MEC_MEC016_MEO_UEAPPCTX_001_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect URL is sent by a MEC Application ... Reference ETSI GS MEC 016 v2.2.1, clause 7.4.3.4 @@ -48,7 +48,7 @@ TP_MEC_MEC016_MEO_UEAPPCTX_001_NF Check HTTP Response Status Code Is 404 -TP_MEC_MEC016_MEO_UEAPPCTX_002_OK +TC_MEC_MEC016_MEO_UEAPPCTX_002_OK [Documentation] ... Check that the IUT updates the application callback reference when commanded by an UE Application ... Reference ETSI GS MEC 016 v2.2.1, clause 7.5.3.2 @@ -56,21 +56,21 @@ TP_MEC_MEC016_MEO_UEAPPCTX_002_OK Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 # Test Body - Update application context ${contextId} UpdateAppContext.json + Update application context ${context-id} UpdateAppContext.json Check HTTP Response Status Code Is 204 -TP_MEC_MEC016_MEO_UEAPPCTX_002_BR +TC_MEC_MEC016_MEO_UEAPPCTX_002_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... Reference ETSI GS MEC 016 v2.2.1, clause 7.5.3.2 ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - Update application context ${contextId} UpdateAppContext_BR.json + Update application context ${context-id} UpdateAppContext_BR.json Check HTTP Response Status Code Is 400 -TP_MEC_MEC016_MEO_UEAPPCTX_002_NF +TC_MEC_MEC016_MEO_UEAPPCTX_002_NF [Documentation] ... Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application ... Reference ETSI GS MEC 016 2.2.1, clause 7.5.3.2 @@ -78,11 +78,11 @@ TP_MEC_MEC016_MEO_UEAPPCTX_002_NF # Preamble Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - Update application context using wrong endpoint ${contextId} UpdateAppContext.json + Update application context using wrong endpoint ${context-id} UpdateAppContext.json Check HTTP Response Status Code Is 404 -TP_MEC_MEC016_MEO_UEAPPCTX_003_OK +TC_MEC_MEC016_MEO_UEAPPCTX_003_OK [Documentation] ... Check that the IUT deletes the application context when commanded by an UE Application ... Reference ETSI GS MEC 016 2.2.1, clause 7.5.3.5 @@ -90,11 +90,11 @@ TP_MEC_MEC016_MEO_UEAPPCTX_003_OK # Preamble Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - Delete application context ${contextId} + Delete application context ${context-id} Check HTTP Response Status Code Is 204 -TP_MEC_MEC016_MEO_UEAPPCTX_003_NF +TC_MEC_MEC016_MEO_UEAPPCTX_003_NF [Documentation] ... Check that the IUT deletes the application context when commanded by an UE Application ... Reference ETSI GS MEC 016 2.2.1, clause 7.5.3.5 diff --git a/MEC016/MEO/UEAPPCTX/environment/variables.txt b/MEC016/MEO/UEAPPCTX/environment/variables.txt index ef478b9..2d2e456 100644 --- a/MEC016/MEO/UEAPPCTX/environment/variables.txt +++ b/MEC016/MEO/UEAPPCTX/environment/variables.txt @@ -4,10 +4,10 @@ ${apiName} dev_app ${apiVersion} v1 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 192.168.56.1 -${MEC-APP_PORT} 8081 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3003 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${contextId} +${context-id} 1 ${NON_EXISTING_CONTEXT_ID} NON_EXISTING_CONTEXT_ID \ No newline at end of file diff --git a/MEC016/MEO/UEAPPLOC/environment/variables.txt b/MEC016/MEO/UEAPPLOC/environment/variables.txt index fd69adc..e76ccf4 100644 --- a/MEC016/MEO/UEAPPLOC/environment/variables.txt +++ b/MEC016/MEO/UEAPPLOC/environment/variables.txt @@ -4,8 +4,8 @@ ${apiName} dev_app ${apiVersion} v1 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 192.168.56.1 -${MEC-APP_PORT} 8081 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3003 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/MEC016/MEO/UEAPPS/environment/variables.txt b/MEC016/MEO/UEAPPS/environment/variables.txt index 82ee14b..6577a06 100644 --- a/MEC016/MEO/UEAPPS/environment/variables.txt +++ b/MEC016/MEO/UEAPPS/environment/variables.txt @@ -4,8 +4,8 @@ ${apiName} dev_app ${apiVersion} v1 ${MEC-APP_SCHEMA} http -${MEC-APP_HOST} 192.168.56.1 -${MEC-APP_PORT} 8081 +${MEC-APP_HOST} mockoon +${MEC-APP_PORT} 3003 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/MEC016/MEO/UEAPPS/schemas/ApplicationList.schema.json b/MEC016/MEO/UEAPPS/schemas/ApplicationList.schema.json index 453efad..6478132 100644 --- a/MEC016/MEO/UEAPPS/schemas/ApplicationList.schema.json +++ b/MEC016/MEO/UEAPPS/schemas/ApplicationList.schema.json @@ -1,212 +1,212 @@ { + "properties": { + "appList": { + "description": "List of user applications available to the device application. As defined below.", + "items": { + "type": "object", + "properties": { + "appInfo": { + "description": "", + "properties": { + "appCharcs": { + "description": "Characteristics of the application. As defined below. The application characteristics relate to the system resources consumed by the application. A device application can use this information e.g. for estimating the cost of use of the application or for the expected user experience.", + "properties": { + "bandwidth": { + "description": "The required connection bandwidth in kbit/s for the use of the MEC application instance. ", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + }, + "latency": { + "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + }, + "memory": { + "description": "The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + }, + "serviceCont": { + "description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.", + "enum": [ + 0, + 1 + ], + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Enum" + }, + "storage": { + "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "uint32" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "appDId": { + "description": "Identifier of this MEC application descriptor. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. This attribute shall be globally unique.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDVersion": { + "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDescription": { + "description": "Human readable description of the MEC application (see note 2).", + "type": "string", + "maxLength": 128, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appLocation": { + "description": "Identifies the locations of the MEC application.", + "items": { "properties": { - "appList": { - "description": "List of user applications available to the device application. As defined below.", + "area": { + "properties": { + "coordinates": { + "items": { + "items": { + "items": { + "type": "number", + "format": "float" + }, + "type": "array" + }, + "type": "array" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "array" + } + }, + "type": "object" + }, + "civicAddressElement": { + "description": "Zero or more elements comprising the civic address. Shall be absent if the \"area\" attribute is present.", "items": { "type": "object", "properties": { - "appInfo": { - "description": "", - "properties": { - "appCharcs": { - "description": "Characteristics of the application. As defined below. The application characteristics relate to the system resources consumed by the application. A device application can use this information e.g. for estimating the cost of use of the application or for the expected user experience.", - "properties": { - "bandwidth": { - "description": "The required connection bandwidth in kbit/s for the use of the MEC application instance. ", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - }, - "latency": { - "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - }, - "memory": { - "description": "The maximum size in Mbytes of the memory resource expected to be used by the MEC application instance in the MEC system.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - }, - "serviceCont": { - "description": "Required service continuity mode for this application. Permitted values: 0 = SERVICE_CONTINUITY_NOT_REQUIRED. 1 = SERVICE_CONTINUITY_REQUIRED.", - "enum": [ - 0, - 1 - ], - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Enum" - }, - "storage": { - "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system.", - "format": "uint32", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "uint32" - } - }, - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - }, - "appDId": { - "description": "Identifier of this MEC application descriptor. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. This attribute shall be globally unique.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appDVersion": { - "description": "Identifies the version of the application descriptor. It is equivalent to the appDVersion defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appDescription": { - "description": "Human readable description of the MEC application (see note 2).", - "type": "string", - "maxLength": 128, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appLocation": { - "description": "Identifies the locations of the MEC application.", - "items": { - "properties": { - "area": { - "properties": { - "coordinates": { - "items": { - "items": { - "items": { - "type": "number", - "format": "float" - }, - "type": "array" - }, - "type": "array" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "array" - } - }, - "type": "object" - }, - "civicAddressElement": { - "description": "Zero or more elements comprising the civic address. Shall be absent if the \"area\" attribute is present.", - "items": { - "type": "object", - "properties": { - "caType": { - "description": "Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 [6]. ", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - }, - "caValue": { - "description": "Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 [6].", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - } - }, - "minItems": 0, - "required": [ - "caType", - "caValue" - ], - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "array (Structure inlined)" - }, - "countryCode": { - "description": "The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the \"area\" attribute is absent. May be absent if the \"area\" attribute is present (see note).", - "type": "string", - "maxLength": 2, - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - } - }, - "type": "object", - "x-etsi-notes": "NOTE:\tIf both \"countryCode\" and \"area\" are present, no conflicts should exist between the values of these two attributes. In case of conflicts, the API producer (e.g. MEO, MEAO) shall disregard parts of the geographic area signalled by \"area\" that are outside the boundaries of the country signalled by \"countryCode\". If \"countryCode\" is absent, it is solely the \"area\" attribute that defines the location constraint.", - "x-etsi-ref": "6.5.2" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "LocationConstraints" - }, - "appName": { - "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appProvider": { - "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "appSoftVersion": { - "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "appDId", - "appName", - "appProvider", - "appSoftVersion", - "appDVersion", - "appDescription" - ], - "type": "object", + "caType": { + "description": "Describe the content type of caValue. The value of caType shall comply with section 3.4 of IETF RFC 4776 [6]. ", + "type": "integer", "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Structure (inlined)" + "x-etsi-mec-origin-type": "Integer" }, - "vendorSpecificExt": { - "description": "Extension for vendor specific information (see note 1).", - "properties": { - "vendorId": { - "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of vendor specific extension is not defined.", - "type": "string", - "maxLength": 32, - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "vendorId" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" + "caValue": { + "description": "Content of civic address element corresponding to the caType. The format caValue shall comply with section 3.4 of IETF RFC 4776 [6].", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" } } }, "minItems": 0, "required": [ - "appInfo" + "caType", + "caValue" ], "type": "array", "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Array (Structure (inlined))" + "x-etsi-mec-origin-type": "array (Structure inlined)" + }, + "countryCode": { + "description": "The two-letter ISO 3166 [7] country code in capital letters. Shall be present in case the \"area\" attribute is absent. May be absent if the \"area\" attribute is present (see note).", + "type": "string", + "maxLength": 2, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" } }, "type": "object", - "x-etsi-notes": "NOTE 1:\tThe vendor specific extension allows submitting information on the application lists that have been made available to the device application of the corresponding vendor.\nNOTE 2:\tThe language support may be limited. The length of the value shall not exceed 128 characters.", - "x-etsi-ref": "6.2.2" - } \ No newline at end of file + "x-etsi-notes": "NOTE:\tIf both \"countryCode\" and \"area\" are present, no conflicts should exist between the values of these two attributes. In case of conflicts, the API producer (e.g. MEO, MEAO) shall disregard parts of the geographic area signalled by \"area\" that are outside the boundaries of the country signalled by \"countryCode\". If \"countryCode\" is absent, it is solely the \"area\" attribute that defines the location constraint.", + "x-etsi-ref": "6.5.2" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "LocationConstraints" + }, + "appName": { + "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appProvider": { + "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appSoftVersion": { + "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "appDId", + "appName", + "appProvider", + "appSoftVersion", + "appDVersion", + "appDescription" + ], + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "vendorSpecificExt": { + "description": "Extension for vendor specific information (see note 1).", + "properties": { + "vendorId": { + "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of vendor specific extension is not defined.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "vendorId" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + } + }, + "minItems": 0, + "required": [ + "appInfo" + ], + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array (Structure (inlined))" + } + }, + "type": "object", + "x-etsi-notes": "NOTE 1:\tThe vendor specific extension allows submitting information on the application lists that have been made available to the device application of the corresponding vendor.\nNOTE 2:\tThe language support may be limited. The length of the value shall not exceed 128 characters.", + "x-etsi-ref": "6.2.2" +} \ No newline at end of file -- GitLab From 6696d307fef3453d3f55e5715a78698ff327092d Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Fri, 5 Jan 2024 17:49:48 +0100 Subject: [PATCH 39/94] updated MEC029 --- MEC029/SRV/FAIS/PlatFixedAcessInfo.robot | 68 +- MEC029/SRV/FAIS/environment/variables.txt | 4 +- .../SRV/FAIS/jsons/OnuAlarmSubscription.json | 35 + .../FAIS/jsons/OnuAlarmSubscriptionError.json | 35 + .../jsons/OnuAlarmSubscriptionUpdate.json | 35 + .../OnuAlarmSubscriptionUpdateError.json | 35 + .../FAIS/schemas/CableLineInfo.schema.json | 273 +++++++ .../SRV/FAIS/schemas/DeviceInfo.schema.json | 581 +++++++++++++++ MEC029/SRV/FAIS/schemas/FaInfo.schema.json | 133 ++++ .../schemas/OnuAlarmSubscription.schema.json | 672 ++++++++++++++++++ MEC029/SRV/FAIS/schemas/PonInfo.schema.json | 130 ++++ .../schemas/SubscriptionLinkList.schema.json | 63 ++ 12 files changed, 2031 insertions(+), 33 deletions(-) diff --git a/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot b/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot index aa2b87a..b3ca073 100644 --- a/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot +++ b/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot @@ -21,7 +21,7 @@ TC_MEC_MEC029_SRV_FAIS_001_OK ... Check that the IUT responds with the current status of the fixed access information ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.3.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.3.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get fixed access information details @@ -34,7 +34,7 @@ TC_MEC_MEC029_SRV_FAIS_001_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.3.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.3.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get fixed access information details using query prameters interface ${INTERFACE_ID} @@ -46,7 +46,7 @@ TC_MEC_MEC029_SRV_FAIS_001_NF ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.3.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.3.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get fixed access information details using query prameters interfaceType ${NON_EXISTENT_INTERFACE_ID} @@ -58,7 +58,7 @@ TC_MEC_MEC029_SRV_FAIS_002_OK ... Check that the IUT responds with the current status of the device information ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.4.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of device information @@ -71,7 +71,7 @@ TC_MEC_MEC029_SRV_FAIS_002_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.4.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of device information using query prameters device ${DEVICE_ID} @@ -83,7 +83,7 @@ TC_MEC_MEC029_SRV_FAIS_002_NF ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.4.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of device information using query prameters deviceId ${NON_EXISTENT_DEVICE_ID} @@ -95,7 +95,7 @@ TC_MEC_MEC029_SRV_FAIS_003_OK ... Check that the IUT responds with the current status of the cable line information ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.5.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of the cable line information @@ -108,7 +108,7 @@ TC_MEC_MEC029_SRV_FAIS_003_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.5.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of the cable line information using query parameters cm ${CABLE_MODEM_ID} @@ -120,7 +120,7 @@ TC_MEC_MEC029_SRV_FAIS_003_NF ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.5.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of the cable line information using query parameters cmId ${NON_EXISTING_FAI_CM_ID} @@ -132,7 +132,7 @@ TC_MEC_MEC029_SRV_FAIS_004_OK ... Check that the IUT responds with the current status of the optical network information ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.6.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of the opentical network information @@ -145,7 +145,7 @@ TC_MEC_MEC029_SRV_FAIS_004_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.6.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of the opentical network information using query parameters onu ${ONU_ID} @@ -157,7 +157,7 @@ TC_MEC_MEC029_SRV_FAIS_004_NF ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.6.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get status of the opentical network information using query parameters onuId ${NON_EXISTING_FAI_ONU_ID} @@ -169,7 +169,7 @@ TC_MEC_MEC029_SRV_FAIS_005_OK ... Check that the IUT responds with the subscriptions for fixed access information notifications ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.7.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of subscriptions @@ -182,7 +182,7 @@ TC_MEC_MEC029_SRV_FAIS_005_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.7.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of subscriptions using query parameters subscription ${SUBSCRIPTION_TYPE} @@ -194,7 +194,7 @@ TC_MEC_MEC029_SRV_FAIS_005_NF ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.7.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of subscriptions using query parameters subscriptionType ${NON_EXISTENT_SUBSCRIPTION_TYPE} @@ -206,14 +206,13 @@ TC_MEC_MEC029_SRV_FAIS_006_OK ... Check that the IUT acknowledges the subscription by a MEC Application ... to notifications on Optical Network Unit alarm events ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.7.3.4 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new subscription OnuAlarmSubscription Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is OnuAlarmSubscription - Check Result Contains ${response['body']['OnuAlarmSubscription']} subscriptionType OnuAlarmSubscription - + Should Be Equal As Strings ${response['body']['subscriptionType']} OnuAlarmSubscription TC_MEC_MEC029_SRV_FAIS_006_BR @@ -221,7 +220,7 @@ TC_MEC_MEC029_SRV_FAIS_006_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.7.3.4 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new subscription OnuAlarmSubscriptionError @@ -233,13 +232,13 @@ TC_MEC_MEC029_SRV_FAIS_007_OK ... Check that the IUT responds with the information on a given subscription ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.8.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get an individual subscription ${ONU_ALARM_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is OnuAlarmSubscription - Check Result Contains ${response['body']['OnuAlarmSubscription']} subscriptionType OnuAlarmSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} OnuAlarmSubscription TC_MEC_MEC029_SRV_FAIS_007_NF @@ -247,7 +246,7 @@ TC_MEC_MEC029_SRV_FAIS_007_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.8.3.1 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get an individual subscription ${NON_ESISTENT_SUBSCRIPTION_ID} @@ -259,13 +258,13 @@ TC_MEC_MEC029_SRV_FAIS_008_OK ... Check that the IUT updates an existing subscription ... when commanded by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.8.3.2 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES Update subscription ${ONU_ALARM_SUBSCRIPTION_ID} OnuAlarmSubscriptionUpdate Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is OnuAlarmSubscription - Check Result Contains ${response['body']['OnuAlarmSubscription']} subscriptionType OnuAlarmSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} OnuAlarmSubscription TC_MEC_MEC029_SRV_FAIS_008_BR @@ -273,7 +272,7 @@ TC_MEC_MEC029_SRV_FAIS_008_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.8.3.2 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES Update subscription ${ONU_ALARM_SUBSCRIPTION_ID} OnuAlarmSubscriptionUpdateError @@ -285,7 +284,7 @@ TC_MEC_MEC029_SRV_FAIS_008_NF ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.8.3.2 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES Update subscription ${NON_ESISTENT_SUBSCRIPTION_ID} OnuAlarmSubscriptionUpdate @@ -297,7 +296,7 @@ TC_MEC_MEC029_SRV_FAIS_008_PF ... Check that the IUT responds with an error when ... a request sent by a MEC Application doesn't comply with a required condition ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.8.3.2 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES Update subscription using invalid etag ${ONU_ALARM_SUBSCRIPTION_ID} OnuAlarmSubscriptionUpdate @@ -309,7 +308,7 @@ TC_MEC_MEC029_SRV_FAIS_009_OK ... Check that the IUT cancels an existing subscription ... when commanded by a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.8.3.5 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES Remove subscription ${ONU_ALARM_SUBSCRIPTION_ID} @@ -321,7 +320,7 @@ TC_MEC_MEC029_SRV_FAIS_010_OK ... Check that the IUT sends notification on expiry of Fixed Access Information event subscription ... to a MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 7.7.3.4 + ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES ${json}= Get File schemas/DevInfoSubscription.schema.json @@ -341,7 +340,7 @@ TC_MEC_MEC029_SRV_FAIS_011_OK ... Check that the IUT sends notifications on Fixed Access Information events ... to a subscribed MEC Application ... - ... Reference ETSI GS MEC 029 V2.1.1, clause 5.2.7 + ... Reference ETSI GS MEC 029 V2.2.1, clause 5.2.7 [Tags] PIC_MEC_PLAT PIC_SERVICES ${json}= Get File schemas/OnuAlarmSubscription.schema.json @@ -460,7 +459,7 @@ Update subscription Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} ${body} + Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} ${body} ${output}= Output response Set Suite Variable ${response} ${output} @@ -468,6 +467,13 @@ Update subscription Update subscription using invalid etag [Arguments] ${subscriptionId} ${content} Set Headers {"If-Match": "${INVALID_ETAG}"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} Remove subscription [Arguments] ${subscriptionId} diff --git a/MEC029/SRV/FAIS/environment/variables.txt b/MEC029/SRV/FAIS/environment/variables.txt index 698f298..e84f497 100644 --- a/MEC029/SRV/FAIS/environment/variables.txt +++ b/MEC029/SRV/FAIS/environment/variables.txt @@ -1,8 +1,8 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 -${PORT} 8081 +${HOST} mockoon +${PORT} 3004 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} diff --git a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json index e69de29..46db685 100644 --- a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json +++ b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json @@ -0,0 +1,35 @@ +{ + "subscriptionType": "OnuAlarmSubscription", + "filterCriteriaOnuAlarm": { + "alarms": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1], + "customerPremisesInfo": [ + { + "latitude": 37.7749, + "longitude": -122.4194, + "postalCode": "94105" + }, + { + "latitude": 40.7128, + "longitude": -74.0060, + "postalCode": "10001" + } + ], + "onuId": ["ABC123", "DEF456"] + }, + "_links": { + "self": { + "href": "https://example.com/resource/123" + } + }, + "callbackReference": "https://client/callback", + "requestTestNotification": true, + "websockNotifConfig": { + "subscriptionType": "ws://example.com/notification", + "requestWebsocketUri": true + }, + "expiryDeadline": { + "seconds": 1641398400, + "nanoSeconds": 0 + } + } + \ No newline at end of file diff --git a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionError.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionError.json index e69de29..69c9163 100644 --- a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionError.json +++ b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionError.json @@ -0,0 +1,35 @@ +{ + "subscriptionType": "OnuAlarmSubscriptionError", + "filterCriteriaOnuAlarm": { + "alarms": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1], + "customerPremisesInfo": [ + { + "latitude": 37.7749, + "longitude": -122.4194, + "postalCode": "94105" + }, + { + "latitude": 40.7128, + "longitude": -74.0060, + "postalCode": "10001" + } + ], + "onuId": ["ABC123", "DEF456"] + }, + "_links": { + "self": { + "href": "https://example.com/resource/123" + } + }, + "callbackReference": "https://client/callback", + "requestTestNotification": true, + "websockNotifConfig": { + "subscriptionType": "ws://example.com/notification", + "requestWebsocketUri": true + }, + "expiryDeadline": { + "seconds": 1641398400, + "nanoSeconds": 0 + } + } + \ No newline at end of file diff --git a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json index e69de29..46db685 100644 --- a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json +++ b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json @@ -0,0 +1,35 @@ +{ + "subscriptionType": "OnuAlarmSubscription", + "filterCriteriaOnuAlarm": { + "alarms": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1], + "customerPremisesInfo": [ + { + "latitude": 37.7749, + "longitude": -122.4194, + "postalCode": "94105" + }, + { + "latitude": 40.7128, + "longitude": -74.0060, + "postalCode": "10001" + } + ], + "onuId": ["ABC123", "DEF456"] + }, + "_links": { + "self": { + "href": "https://example.com/resource/123" + } + }, + "callbackReference": "https://client/callback", + "requestTestNotification": true, + "websockNotifConfig": { + "subscriptionType": "ws://example.com/notification", + "requestWebsocketUri": true + }, + "expiryDeadline": { + "seconds": 1641398400, + "nanoSeconds": 0 + } + } + \ No newline at end of file diff --git a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json index e69de29..69c9163 100644 --- a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json +++ b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json @@ -0,0 +1,35 @@ +{ + "subscriptionType": "OnuAlarmSubscriptionError", + "filterCriteriaOnuAlarm": { + "alarms": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, -1], + "customerPremisesInfo": [ + { + "latitude": 37.7749, + "longitude": -122.4194, + "postalCode": "94105" + }, + { + "latitude": 40.7128, + "longitude": -74.0060, + "postalCode": "10001" + } + ], + "onuId": ["ABC123", "DEF456"] + }, + "_links": { + "self": { + "href": "https://example.com/resource/123" + } + }, + "callbackReference": "https://client/callback", + "requestTestNotification": true, + "websockNotifConfig": { + "subscriptionType": "ws://example.com/notification", + "requestWebsocketUri": true + }, + "expiryDeadline": { + "seconds": 1641398400, + "nanoSeconds": 0 + } + } + \ No newline at end of file diff --git a/MEC029/SRV/FAIS/schemas/CableLineInfo.schema.json b/MEC029/SRV/FAIS/schemas/CableLineInfo.schema.json index e69de29..18c9bfc 100644 --- a/MEC029/SRV/FAIS/schemas/CableLineInfo.schema.json +++ b/MEC029/SRV/FAIS/schemas/CableLineInfo.schema.json @@ -0,0 +1,273 @@ +{ + "type": "object", + "required": [ + "customerPremisesInfo", + "cmId" + ], + "properties": { + "timeStamp": { + "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 Unixtime 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" + }, + "customerPremisesInfo": { + "properties": { + "latitude": { + "description": "Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "postalCode": { + "description": "Postal code for the location", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "cmId": { + "type": "string", + "description": "Information (typically the serial number) to identify a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system. This value SHALL remain fixed over the lifetime of the device, including across firmware updates." + }, + "cmStatus": { + "description": "It provides CM connectivity status information of the CM.", + "type": "object", + "required": [ + "ifIndex", + "cmRegState", + "resets", + "lostSyncs", + "invalidRegRsps", + "energyMgt1x1OperStatus", + "emDlsOperStatus" + ], + "properties": { + "ifIndex": { + "description": "It denotes the MAC Domain interface index of the CM.", + "type": "string" + }, + "cmRegState": { + "type": "integer", + "description": "It indicates the CM connectivity state. Enumeration of: 1 = notReady. 2 = notSynchronized. 3 = phySynchronized. 4 = dsTopologyResolutionInProgress.5 = usParametersAcquired. 6 = rangingInProgress.7 = rangingComplete. 8 = eaeInProgress.9 = dhcpv4InProgress. 10 = dhcpv6InProgress.11 = dhcpV4Complete.12 = dhcpV6Complete.13 = todEstablished.14 = securityEstablished.15 = configFileDownloadComplete.16 = registrationInProgress.17 = registrationComplete. 18 = accessDenied. 19 =operational. 20 = bpiInit.21 =forwardingDisabled. 22 = rangingInProgress. 23 = rfMuteAll.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21, + 22, + 23 + ] + }, + "resets": { + "description": "It denotes the number of times the CM reset or initialized this interface.", + "type": "integer" + }, + "lostSyncs": { + "description": "It denotes the number of times the CM lost synchronization with the downstream channel.", + "type": "integer" + }, + "invalidRegRsps": { + "description": "It denotes the number of times the CM received invalid registration response messages.", + "type": "integer" + }, + "energyMgt1x1OperStatus": { + "description": "It indicates whether the CM is currently operating in Energy Management 1x1 Mode.", + "type": "boolean" + }, + "emDlsOperStatus": { + "description": "It indicates whether the CM is currently operating in Energy Management DLS Mode.", + "type": "boolean" + } + } + }, + "cmDpvStats": { + "required": [ + "ifIndex", + "lastMeasLatency", + "lastMeasTime", + "minLatency", + "maxLatency", + "avgLatency", + "numMeas" + ], + "properties": { + "ifIndex": { + "description": "It represents the interface Index of the Downstream Interface where the measurements are taken.", + "type": "string" + }, + "lastMeasLatency": { + "description": "The last latency measurement", + "type": "integer" + }, + "lastMeasTime": { + "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 Unixtime 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" + }, + "minLatency": { + "description": "The minimum latency measurement.", + "type": "integer" + }, + "maxLatency": { + "description": "The maximum latency measurement.", + "type": "integer" + }, + "avgLatency": { + "description": "The average latency measurement.", + "type": "integer" + }, + "numMeas": { + "description": "The number of latency measurements made.", + "type": "integer" + } + } + }, + "serviceFlowStats": { + "type": "object", + "required": [ + "ifIndex", + "serviceFlowInfo" + ], + "properties": { + "ifIndex": { + "description": "It represents the interface index of the MAC Domain of the Service Flow.", + "type": "string" + }, + "serviceFlowInfo": { + "description": "It represents the information of a Service Flow.", + "type": "array", + "items": { + "type": "object", + "required": [ + "serviceFlowId", + "description", + "timeCreated", + "timeActive", + "policedDropPkts", + "policedDelayPkts", + "aqmDroppedPkts" + ], + "properties": { + "serviceFlowId": { + "description": "It represents an identifier assigned to a Service Flow by CMTS within a MAC Domain.", + "type": "integer" + }, + "pkts": { + "description": "For outgoing Service Flows, this attribute counts the number of Packet Data PDUs forwarded to this Service Flow. For incoming upstream CMTS service flows, this attribute counts the number of Packet Data PDUs actually received on the Service Flow identified by the SID for which the packet was scheduled.", + "type": "integer" + }, + "timeCreated": { + "description": "For outgoing Service Flows, this attribute counts the number of Packet Data PDUs forwarded to this Service Flow. For incoming upstream CMTS service flows, this attribute counts the number of Packet Data PDUs actually received on the Service Flow identified by the SID for which the packet was scheduled.", + "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 Unixtime 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" + }, + "timeActive": { + "description": "FIt indicates the number of seconds that the service flow has been active", + "type": "integer" + }, + "policedDropPkts": { + "description": "For upstream service flows, this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to 1) exceeding the selected Buffer Size for the service flow; or 2) UGS packets dropped due to exceeding the Unsolicited Grant Size with a Request/Transmission policy that requires such packets to be dropped.", + "type": "integer" + }, + "policedDelayPkts": { + "description": "It counts only outgoing packets delayed in order to maintain the Maximum Sustained Traffic Rate.", + "type": "integer" + }, + "aqmDroppedPkts": { + "description": "For upstream service flows on which AQM is enabled, this attribute counts the number of Packet Data PDUs classified to this service flow dropped due to Active Queue Management drop decisions.", + "type": "integer" + } + } + } + } + } + } + }, + "x-etsi-ref": "6.2.4" + } \ No newline at end of file diff --git a/MEC029/SRV/FAIS/schemas/DeviceInfo.schema.json b/MEC029/SRV/FAIS/schemas/DeviceInfo.schema.json index e69de29..a868cb1 100644 --- a/MEC029/SRV/FAIS/schemas/DeviceInfo.schema.json +++ b/MEC029/SRV/FAIS/schemas/DeviceInfo.schema.json @@ -0,0 +1,581 @@ +{ + "type": "array", + "items": { + "properties": { + "deviceId": { + "description": "Typically, the serial number of the device.This value shall remain fixed over the lifetime of the device, including across firmware updates.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "deviceStatus": { + "description": "Current operational status of the device. Enumeration of: 1 = Up. 2 = Initializing. 3 = Error. 4 = Disabled.", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "downloadDiagnostics": { + "properties": { + "bOMTime": { + "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 Unixtime 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" + }, + "diagnosticsState": { + "description": "The state of the HTTP and FTP download test. Enumeration of:1 = None.2 = Requested.3 = Completed.4 = Error_InitConnectionFailed.5 = Error_NoResponse.6 = Error_TransferFailed. 7 = Error_PasswordRequestFailed.8 = Error_LoginFailed.9 = Error_NoTransferMode.10 = Error_NoPASV.11 = Error_IncorrectSize.12 = Error_Timeout.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "downloadURI": { + "description": "The URI for the device to perform the download on.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "eOMTime": { + "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 Unixtime 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" + }, + "rOMTime": { + "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 Unixtime 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" + }, + "tCPOpenReponseTime": { + "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 Unixtime 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" + }, + "tCPOpenRequestTime": { + "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 Unixtime 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" + }, + "testBytesReceived": { + "description": "The test traffic received in bytes during the FTP/HTTP transaction including FTP/HTTP headers, between bOMTime and eOMTime.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "totalBytesReceived": { + "description": "The total number of bytes received on the Interface between bOMTime and eOMTime.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + } + }, + "required": [ + "diagnosticsState" + ], + "type": "object", + "x-etsi-ref": "6.5.6" + }, + "gwId": { + "description": "Information (typically the serial number) to identify an Internet Gateway Device through which the customer premises device is connected. This value shall remain fixed over the lifetime of the device, including across firmware updates.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "iPConnectionUpTime": { + "description": "The time in seconds that the IP interface has been connected.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "iPPingDiagnostics": { + "properties": { + "averageResponseTime": { + "description": "Result parameter indicating the average response time in milliseconds over all repetitions with successful responses of the most recent ping test.\n\nIf there were no successful responses, this value shall be zero.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "dataBlockSize": { + "description": "Size of the data block in bytes to be sent for each ping.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "diagnosticsState": { + "description": "The state of the IP ping test. Enumeration of: 1 = None. 2 = Requested. 3 = Complete. 4 = Error_CannotResolveHostName. 5 = Error_Internal.6 = Error_Other.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "failureCount": { + "description": "Result parameter indicating the number of failed pings in the most recent ping test.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "host": { + "description": "Host name or address of the host to ping.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "maximumResponseTime": { + "description": "Result parameter indicating the maximum response time in milliseconds over all repetitions with successful responses of the most recent ping test.\n\nIf there were no successful responses, this value shall be zero.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "minimumResponseTime": { + "description": "Result parameter indicating the minimum response time in milliseconds over all repetitions with successful responses of the most recent ping test.\n\nIf there were no successful responses, this value shall be zero.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "numberOfRepetitions": { + "description": "Number of repetitions of the ping test to perform before reporting the results.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "successCount": { + "description": "Result parameter indicating the number of successful\npings (those in which a successful response was received prior to the timeout) in the most recent ping test.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "timeout": { + "description": "Timeout in milliseconds for the ping test.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + } + }, + "required": [ + "diagnosticsState" + ], + "type": "object", + "x-etsi-ref": "6.5.4" + }, + "timeStamp": { + "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 Unixtime 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" + }, + "totalBytesReceived": { + "description": "Total number of IP payload bytes received since the device was last restarted.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "totalBytesSent": { + "description": "Total number of IP payload bytes sent since the device was last restarted.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "totalPacketsReceived": { + "description": "Total number of packets received since the device was last restarted.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "totalPacketsSent": { + "description": "Total number of packets sent since the device was last restarted.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "traceRouteDiagnostics": { + "properties": { + "dataBlockSize": { + "description": "Size of the data block in bytes to be sent for each trace route.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "diagnosticsState": { + "description": "The state of the IP trace-route test. Enumeration of: 1 = None. 2 = Requested. 3 = Complete. 4 = Error_CannotResolveHostName. 5 = Error_MaxHopCountExceeded. 6 = Error_Internal. 7 = Error_Other.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "host": { + "description": "Host name or address of the host to find a route to.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "maxHopCount": { + "description": "The maximum number of hop used in outgoing probe packets. The default is 30 hops.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "numberOfRouteHops": { + "description": "Result parameter indicating the number of hops within the discovered route.\n\nIf a route could not be determined, this value shall be zero.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "responseTime": { + "description": "Result parameter indicating the response time in milliseconds the most recent trace route test.\n\nIf a route could not be determined, this value shall be zero.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "timeout": { + "description": "Timeout in milliseconds for the trace route test.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + } + }, + "required": [ + "diagnosticsState" + ], + "type": "object", + "x-etsi-ref": "6.5.5" + }, + "upTime": { + "description": "Time in seconds since the device was last restarted.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "uploadDiagnostics": { + "properties": { + "bOMTime": { + "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 Unixtime 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" + }, + "diagnosticsState": { + "description": "The state of the HTTP and FTP download test. Enumeration of: 1 = None. 2 = Requested. 3 = Completed. 4 = Error_InitConnectionFailed. 5 = Error_NoResponse. 6 = Error_PasswordRequestFailed. 7 = Error_LoginFailed. 8 = Error_NoTransferMode. 9 = Error_NoPASV. 10 = Error_NoCWD. 11 = Error_NoSTOR.12 = Error_NoTransferComplete.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "eOMTime": { + "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 Unixtime 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" + }, + "rOMTime": { + "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 Unixtime 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" + }, + "tCPOpenReponseTime": { + "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 Unixtime 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" + }, + "tCPOpenRequestTime": { + "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 Unixtime 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" + }, + "testBytesSent": { + "description": "The test traffic sent in bytes during the FTP/HTTP transaction including FTP/HTTP headers, between bOMTime and eOMTime.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "testFileLength": { + "description": "The size of the file (in bytes) to be uploaded to the\nserver.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "uploadURI": { + "description": "The URI for the device to perform the upload to.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + }, + "required": [ + "diagnosticsState" + ], + "type": "object", + "x-etsi-ref": "6.5.7" + } + }, + "required": [ + "gwId", + "deviceId", + "deviceStatus", + "upTime", + "iPConnectionUpTime", + "totalBytesSent", + "totalBytesReceived", + "totalPacketsSent", + "totalPacketsReceived" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + } + } \ No newline at end of file diff --git a/MEC029/SRV/FAIS/schemas/FaInfo.schema.json b/MEC029/SRV/FAIS/schemas/FaInfo.schema.json index e69de29..76fae66 100644 --- a/MEC029/SRV/FAIS/schemas/FaInfo.schema.json +++ b/MEC029/SRV/FAIS/schemas/FaInfo.schema.json @@ -0,0 +1,133 @@ +{ + "type": "array", + "items": { + "properties": { + "connectivityInfo": { + "type": "array", + "items": { + "description": "The per connectivity domain FAI as defined below.", + "properties": { + "dsbw": { + "description": "The bandwidth (in Mbps) from the network towards the customer site.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "interfaceType": { + "description": "The physical interface used for the end customer site:1 = 100BASE-TX.2 = 1000BASE-TX.3 = 1000BASE-LX.4 = 1000BASELX10.5 = 1000BASEBX10. 6 = 1000BASE-LH.7 = 1000Base-ZX. 8 = ADSL-RJ11.9 = VDSL-RJ11.10 = GPON.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "lastMileTech": { + "description": "An informative field identifying the last mile access technology used.The valid values are:1 = ADSL.2 = VDSL.3 = GPON. 4 = XGPON.5 = NGPON2. 6 = XGSPON. 7 = GFAST.8 = P2PEthernet.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "latency": { + "description": "Maximum baseline latency (in ms) between customer site and service edge node.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + }, + "usbw": { + "description": "The bandwidth (in Mbps) from the customer site towards the network.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Integer" + } + }, + "required": [ + "lastMileTech", + "interfaceType" + ] + } + }, + "customerPremisesInfo": { + "description": "The physical location of a customer site.", + "items": { + "properties": { + "latitude": { + "description": "Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "postalCode": { + "description": "Postal code for the location", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "CpInfo" + }, + "timeStamp": { + "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 Unixtime 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" + } + }, + "type": "object", + "required": [ + "customerPremisesInfo" + ], + "x-etsi-ref": "6.2.2" + } +} \ No newline at end of file diff --git a/MEC029/SRV/FAIS/schemas/OnuAlarmSubscription.schema.json b/MEC029/SRV/FAIS/schemas/OnuAlarmSubscription.schema.json index e69de29..88840d2 100644 --- a/MEC029/SRV/FAIS/schemas/OnuAlarmSubscription.schema.json +++ b/MEC029/SRV/FAIS/schemas/OnuAlarmSubscription.schema.json @@ -0,0 +1,672 @@ +{ + "oneOf": [ + { + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "description": "'URI referring to a resource'", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + } + } + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1" + }, + "callbackReference": { + "description": "URI exposed by the client on which to receive notifications via HTTP. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + }, + "requestTestNotification": { + "description": "Shall be set to TRUE by the service consumer to request", + "type": "boolean" + }, + "websockNotifConfig": { + "description": "Provides details to negotiate and signal the use of a Websocket connection between FAIS and the service consumer for notifications. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "type": "object", + "properties": { + "subscriptionType": { + "description": "Set by FAIS to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "type": "string", + "format": "uri" + }, + "requestWebsocketUri": { + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested.", + "type": "boolean" + } + } + }, + "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 Unixtime 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" + }, + "filterCriteriaOnuAlarm": { + "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response.", + "properties": { + "alarms": { + "items": { + "description": "In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response:\n0 =\tEquipmentAlarm.\n\t(Functional failure on an internal interface.)\n1 =\tPoweringAlarm.\n\t(Loss of external power to battery backup unit. This alarm is typically derived through an external interface to a battery backup unit, and indicates that AC is no longer available to maintain battery charge.)\n2 =\tBatteryMissing.\n\t(Battery is provisioned but missing.)\n3 =\tBatteryFailure.\n\t(Battery is provisioned and present but cannot recharge.)\n4 =\tBatteryLow.\n\t(Battery is provisioned and present but its voltage is too low.)\n5 =\tPhysicalIntrusion.\n\t(Applies if the ONU supports detection such as door or box open.)\n6 =\tOnuSelfTestFailure.\n\t(ONU has failed autonomous self-test.)\n7 =\tDyingGasp.\n\t(ONU is powering off imminently due to loss of power to the ONU itself.)\n8 =\tTemperatureYellow.\n\t(No service shutdown at present, but the circuit pack is operating beyond its recommended range.)\n9 =\tTemperatureRed.\n\t(Some services have been shut down to avoid equipment damage.)\n10 =\tVoltageYellow.\n\t(No service shutdown at present, but the line power voltage is below its recommended minimum.)\n11 =\tVoltageRed.\n\t(Some services have been shut down to avoid power collapse.)\n12 =\tOnuManualPowerOff.\n\t(The ONU is shutting down because the subscriber has turned off its power switch.)\n13 =\tInvImage.\n\t(Software image is invalid.)\n14 =\tPseOverloadYellow.\n\t(Indicates that the ONU is nearing its maximum ability to supply the known PoE demand of the attached PDs. The thresholds for declaring and clearing this alarm are vendor-specific.)\n15 =\tPseOverloadRed.\n\t(Indicates that the ONU is unable to supply all of the PoE demand of the attached PDs and has removed or reduced power to at least one PD.)\n-1 =\tAll.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + -1 + ], + "type": "integer" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Enum" + }, + "customerPremisesInfo": { + "description": "0 to N physical locations of the customer sites.", + "items": { + "properties": { + "latitude": { + "description": "Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "postalCode": { + "description": "Postal code for the location", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "CpInfo" + }, + "onuId": { + "description": "1 to N unique identifiers for the optical network units. Typical it is the unique serial number for each ONU, which contains the vendor ID and version number. The first four bytes are an ASCII-encoded four-letter vendor ID. The second four bytes are a binary encoded serial number, under the control of the ONU vendor.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "onuId" + ], + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \\\"OnuAlarmSubscription\\\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "filterCriteriaOnuAlarm" + ], + "type": "object", + "x-etsi-ref": "6.3.2" + }, + { + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "description": "'URI referring to a resource'", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + } + } + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1" + }, + "callbackReference": { + "description": "URI exposed by the client on which to receive notifications via HTTP. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + }, + "requestTestNotification": { + "description": "Shall be set to TRUE by the service consumer to request", + "type": "boolean" + }, + "websockNotifConfig": { + "description": "Provides details to negotiate and signal the use of a Websocket connection between FAIS and the service consumer for notifications. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "type": "object", + "properties": { + "subscriptionType": { + "description": "Set by FAIS to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "type": "string", + "format": "uri" + }, + "requestWebsocketUri": { + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested.", + "type": "boolean" + } + } + }, + "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 Unixtime 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" + }, + "filterCriteriaDevInfo": { + "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response.", + "properties": { + "deviceErrStatus": { + "items": { + "description": "The abnormal operational status of the device. Enumeration of: 1 = Error. 2 = Disabled.", + "enum": [ + 1, + 2 + ], + "type": "integer" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Enum" + }, + "deviceId": { + "description": "The device identifier.", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "gwId": { + "description": "The identifier of an Internet Gateway Device through which the customer premises device is connected.", + "items": { + "type": "string" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \"DevInfoSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "filterCriteriaDevInfo" + ], + "type": "object", + "x-etsi-ref": "6.3.3" + }, + { + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "description": "'URI referring to a resource'", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + } + } + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1" + }, + "callbackReference": { + "description": "URI exposed by the client on which to receive notifications via HTTP. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + }, + "requestTestNotification": { + "description": "Shall be set to TRUE by the service consumer to request", + "type": "boolean" + }, + "websockNotifConfig": { + "description": "Provides details to negotiate and signal the use of a Websocket connection between FAIS and the service consumer for notifications. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "type": "object", + "properties": { + "subscriptionType": { + "description": "Set by FAIS to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "type": "string", + "format": "uri" + }, + "requestWebsocketUri": { + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested.", + "type": "boolean" + } + } + }, + "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 Unixtime 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" + }, + "filterCriteriaCmConn": { + "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response.", + "properties": { + "cmIf": { + "type": "array", + "items": { + "description": "", + "properties": { + "cmId": { + "description": "The identifier of a Cable Modem at subscriber locations intended for use in conveying data communications on a cable data system.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "cmRegState": { + "items": { + "description": "It indicates the CM connectivity state. Enumeration of: 1 = notReady. 2 = notSynchronized. 3 = phySynchronized. 4 = dsTopologyResolutionInProgress.5 = usParametersAcquired. 6 = rangingInProgress.7 = rangingComplete. 8 = eaeInProgress.9 = dhcpv4InProgress. 10 = dhcpv6InProgress.11 = dhcpV4Complete.12 = dhcpV6Complete.13 = todEstablished.14 = securityEstablished.15 = configFileDownloadComplete.16 = registrationInProgress.17 = registrationComplete. 18 = accessDenied. 19 =operational. 20 = bpiInit.21 =forwardingDisabled.", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 20, + 21 + ], + "type": "integer" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Enum" + }, + "ifIndex": { + "description": "The MAC Domain interface index of the CM.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "cmId", + "ifIndex", + "cmRegState" + ] + } + }, + "customerPremisesInfo": { + "properties": { + "latitude": { + "description": "Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "postalCode": { + "description": "Postal code for the location", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-ref": "6.5.3" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \"CmConnSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "filterCriteriaCmConn" + ], + "type": "object", + "x-etsi-notes": "NOTE:\t'notReady' indicates that the CM has not started the registration process yet.\n\t'notSynchronized' indicates that the CM has not initiated or completed the synchronization of the downstream physical layer.\n\t'phySynchronized' indicates that the CM has completed the synchronization of the downstream physical layer.\n\t'dsTopologyResolutionInProgress' indicates that the CM is attempting to determine its MD-DS-SG.\n\t'usParametersAcquired' indicates that the CM has completed the upstream parameters acquisition or have completed the downstream and upstream service groups resolution.\n\t'rangingInProgress' indicates that the CM has initiated the initial ranging process.\n\t'rangingComplete' indicates that the CM has completed initial ranging and received a Ranging Status of success from the CMTS in the RNG-RSP message.\n\t'eaeInProgress' indicates that the CM has sent an Auth Info message for EAE.\n\t'dhcpv4InProgress' indicates that the CM has sent a DHCPv4 DISCOVER to gain IP connectivity.\n\t'dhcpv6InProgress' indicates that the CM has sent a DHCPv6 Solicit message.\n\t'dhcpv4Complete' indicates that the CM has received a DHCPv4 ACK message from the CMTS.\n\t'dhcpv6Complete' indicates that the CM has received a DHCPv6 Reply message from the CMTS.\n\t'todEstablished' indicates that the CM has successfully acquired time of day.\n\t'securityEstablished' indicates that the CM has successfully completed the BPI initialization process.\n\t'configFileDownloadComplete' indicates that the CM has completed the config file download process.\n\t'registrationInProgress' indicates that the CM has sent a Registration Request.\n\t'registrationComplete' indicates that the CM has successfully completed the Registration process with the CMTS.\n\t'accessDenied' indicates that the CM has received a registration aborted notification from the CMTS.\n\t'operational' indicates that the CM has completed all necessary initialization steps and is operational.\n\t'bpiInit' indicates that the CM has started the BPI initialization process as indicated in the CM config file.\n\t'forwardingDisabled' indicates that the registration process was completed, but the network access option in the received configuration file prohibits forwarding.", + "x-etsi-ref": "6.3.4" + }, + { + "properties": { + "subscriptionType": { + "description": "Shall be set to \\\"AniAlarmSubscription\\\"", + "type": "string" + }, + "_links": { + "properties": { + "self": { + "description": "'URI referring to a resource'", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + } + } + } + }, + "required": [ + "self" + ] + }, + "aniIndex": { + "description": "The index of an access network interface supported by the optical network unit.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "callbackReference": { + "description": "URI exposed by the client on which to receive notifications via HTTP. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + }, + "requestTestNotification": { + "description": "Shall be set to TRUE by the service consumer to request", + "type": "boolean" + }, + "websockNotifConfig": { + "description": "Provides details to negotiate and signal the use of a Websocket connection between FAIS and the service consumer for notifications. At least one of callbackReference and websockNotifConfig shall be provided by the service consumer. If both are provided, it is up to FAIS to choose an alternative and return only that alternative in the response, as described in ETSI GS MEC 009, clause 6.12a.", + "type": "object", + "properties": { + "subscriptionType": { + "description": "Set by FAIS to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "type": "string", + "format": "uri" + }, + "requestWebsocketUri": { + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested.", + "type": "boolean" + } + } + }, + "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 Unixtime 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" + }, + "filterCriteriaAniAlarm": { + "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response.", + "required": [ + "onuId", + "aniId" + ], + "properties": { + "customerPremisesInfo": { + "required": [ + "onuId", + "aniId" + ], + "description": "0 to N physical locations of the customer sites.", + "type": "array", + "items": { + "properties": { + "latitude": { + "description": "Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "postalCode": { + "description": "Postal code for the location", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "CpInfo" + }, + "onuId": { + "description": "1 to N unique identifiers for the optical network units. Typical it is the unique serial number for each ONU, which contains the vendor ID and version number. The first four bytes are an ASCII-encoded four-letter vendor ID. The second four bytes are a binary encoded serial number, under the control of the ONU vendor.", + "type": "array", + "items": { + "type": "string", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + } + }, + "aniId": { + "description": "", + "type": "object", + "required": [ + "onuId", + "aniIndex" + ], + "properties": { + "onuId": { + "description": "The unique identifiers for the optical network unit", + "type": "string" + }, + "aniIndex": { + "description": "The index of an access network interface supported by the optical network unit", + "type": "string" + } + } + }, + "alarms": { + "type": "array", + "items": { + "description": "In case alarms is not included in the subscription request, the default value -1 = All shall be used and included in the response:\n0 =\tLowReceivedOpticalPower.\n(Received downstream optical power below threshold.)\n1 =\tHighReceivedOpticalPower.\n\t(Received downstream optical power above threshold.)\n2 =\tSignalFalure.\n(Bit error-based signal fail.)\n3 =\tSignalDegrade.\n(Bit error-based signal degrade.)\n4 =\tLowTransmitOpticalPower.\n(Transmit optical power below lower threshold.)\n5 =\tHighTransmitOpticalPower.\n(Transmit optical power above upper threshold.)\n6 =\tLaserBiasCurrent.\n(Laser bias current above threshold determined by vendor.)\n-1 =\tAll.", + "enum": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6, + -1 + ], + "type": "integer" + } + } + } + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "filterCriteriaAniAlarm", + "onuId", + "aniIndex" + ], + "type": "object", + "x-etsi-ref": "6.3.6" + } + ] + } \ No newline at end of file diff --git a/MEC029/SRV/FAIS/schemas/PonInfo.schema.json b/MEC029/SRV/FAIS/schemas/PonInfo.schema.json index e69de29..8ffbb47 100644 --- a/MEC029/SRV/FAIS/schemas/PonInfo.schema.json +++ b/MEC029/SRV/FAIS/schemas/PonInfo.schema.json @@ -0,0 +1,130 @@ +{ + "type": "array", + "items": { + "properties": { + "timeStamp": { + "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 Unixtime 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" + }, + "customerPremisesInfo": { + "description": "The physical location of a customer site.", + "items": { + "properties": { + "latitude": { + "description": "Latitude (DATUM=WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM=WGS84) -180 to 180 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "postalCode": { + "description": "Postal code for the location", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "CpInfo" + }, + "ponSYS_ID": { + "description": "The 20-bit identity of the optical system within a certain domain.This is a reference value set by the OSS.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "onuId": { + "description": "Information to identify an Optical Network Unit.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ponTech": { + "description": "An informative field identifying the optical technology used. The valid values are: 1 = GPON. 2 = XGPON.3 = NGPON2. 4 = XGSPON.", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "operationalState": { + "description": "It reports whether the ONU is currently capable of performing its function. Valid values are: 0 = enabled 1 = disabled", + "enum": [ + 0, + 1 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "dsRate": { + "description": "Downstream line rate, valid values are:\n1 =\t2,48832 Gbit/s: G-PON [i.9]; or\nNG-PON2 option 2 [i.8].\n2 =\t9,95328 Gbit/s: XG-PON [i.10]; or\n XGS-PON [i.11]; or\nNG-PON2 option 1 [i.8].", + "enum": [ + 1, + 2 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + }, + "usRate": { + "description": "Upstream line rate, valid values are:\n1 =\t1,24416 Gbit/s: G-PON option 1 [i.9].\n2 =\t2,48832 Gbit/s: G-PON option 2 [i.9]; or\nXG-PON [i.10]; or\nNG-PON2 option 2 [i.8].\n3 =\t9,95328 Gbit/s: XGS-PON [i.11]; or\nNG-PON2 option 1 [i.8].", + "enum": [ + 1, + 2, + 3 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + } + }, + "required": [ + "customerPremisesInfo", + "ponSYS_ID", + "onuId", + "ponTech", + "operationalState", + "dsRate", + "usRate" + ], + "type": "object", + "x-etsi-ref": "6.2.5" + } + } \ No newline at end of file diff --git a/MEC029/SRV/FAIS/schemas/SubscriptionLinkList.schema.json b/MEC029/SRV/FAIS/schemas/SubscriptionLinkList.schema.json index e69de29..e83a836 100644 --- a/MEC029/SRV/FAIS/schemas/SubscriptionLinkList.schema.json +++ b/MEC029/SRV/FAIS/schemas/SubscriptionLinkList.schema.json @@ -0,0 +1,63 @@ +{ + "properties": { + "_links": { + "description": "Hyperlinks related to the resource.", + "type": "object", + "required": [ + "self" + ], + "properties": { + "self": { + "description": "'URI referring to a resource'", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + } + } + }, + "subscriptions": { + "description": "The service consumer's subscriptions.", + "type": "array", + "items": { + "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.2, 6.3.3, 6.3.4 and 6.3.6 \"OnuAlarmSubscription\" \"DevInfoSubscription\" \"CmConnSubscription\" \"AniAlarmSubscription\"", + "enum": [ + "OnuAlarmSubscription", + "DevInfoSubscription", + "CmConnSubscription", + "AniAlarmSubscription\"" + ], + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + } + }, + "required": [ + "href", + "subscriptionType" + ] + } + } + } + } + }, + "required": [ + "_links" + ], + "type": "object", + "x-etsi-ref": "6.3.5" + } \ No newline at end of file -- GitLab From 3094843592091f4a14a85cfc88333db1f7ebe091 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Fri, 5 Jan 2024 17:50:11 +0100 Subject: [PATCH 40/94] added preamble and postable to MEC016 MEO UEAPPCTX --- MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot index 6d06f01..dae88ee 100644 --- a/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot +++ b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot @@ -23,7 +23,9 @@ TC_MEC_MEC016_MEO_UEAPPCTX_001_OK Check HTTP Response Body Json Schema Is AppContext Check HTTP Response Header Contains Location Should Be Equal As Strings ${response['body']['appInfo']['appName']} MyNewWornderfulApp - Set Suite Variable ${contextId} ${response['body']['contextId']} + Set Suite Variable ${contextId_tbd} ${response['body']['contextId']} + + [Teardown] Delete application context ${contextId_tbd} TC_MEC_MEC016_MEO_UEAPPCTX_001_BR @@ -55,10 +57,17 @@ TC_MEC_MEC016_MEO_UEAPPCTX_002_OK ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 + + [Setup] Create application context AppContext.json + Set Suite Variable ${contextId_tbu} ${response['body']['contextId']} + # Test Body - Update application context ${context-id} UpdateAppContext.json + Update application context ${contextId_tbu} UpdateAppContext.json Check HTTP Response Status Code Is 204 + [Teardown] Delete application context ${contextId_tbu} + + TC_MEC_MEC016_MEO_UEAPPCTX_002_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application @@ -66,9 +75,15 @@ TC_MEC_MEC016_MEO_UEAPPCTX_002_BR ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 + + [Setup] Create application context AppContext.json + Set Suite Variable ${contextId_tbu} ${response['body']['contextId']} + Update application context ${context-id} UpdateAppContext_BR.json Check HTTP Response Status Code Is 400 + [Teardown] Delete application context ${contextId_tbu} + TC_MEC_MEC016_MEO_UEAPPCTX_002_NF [Documentation] @@ -78,6 +93,7 @@ TC_MEC_MEC016_MEO_UEAPPCTX_002_NF # Preamble Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 + Update application context using wrong endpoint ${context-id} UpdateAppContext.json Check HTTP Response Status Code Is 404 -- GitLab From e307b4c1eb363ab7991cda5f9dae6a509d241b13 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 5 Jan 2024 19:12:33 +0100 Subject: [PATCH 41/94] MEC013 v3.1.1 UEDISUB Draft TCs avaialable. --- .../PlatUeDistanceSubscription.robot | 86 ++- .../SRV/UEDISTSUB/environment/variables.txt | 19 +- .../DistanceNotificationSubscription.json | 16 - ...DistanceNotificationSubscriptionError.json | 16 - .../jsons/UserDistanceNotification.json | 24 + .../jsons/UserDistanceSubscription.json | 16 + .../jsons/UserDistanceSubscriptionError.json | 15 + MEC013/SRV/UEDISTSUB/libraries/Server.py | 144 ++++ ...stanceNotificationSubscription.schema.json | 174 ----- ...otificationSubscription.schema.v1.1.1.json | 147 ---- .../NotificationSubscriptionList.schema.json | 715 ------------------ .../UserDistanceNotification.schema.json | 634 ++++++++++++++++ .../UserDistanceSubscription.schema.json | 168 ++++ 13 files changed, 1070 insertions(+), 1104 deletions(-) delete mode 100644 MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json delete mode 100644 MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json create mode 100644 MEC013/SRV/UEDISTSUB/jsons/UserDistanceNotification.json create mode 100644 MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscription.json create mode 100644 MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscriptionError.json create mode 100644 MEC013/SRV/UEDISTSUB/libraries/Server.py delete mode 100644 MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json delete mode 100644 MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json delete mode 100644 MEC013/SRV/UEDISTSUB/schemas/NotificationSubscriptionList.schema.json create mode 100644 MEC013/SRV/UEDISTSUB/schemas/UserDistanceNotification.schema.json create mode 100644 MEC013/SRV/UEDISTSUB/schemas/UserDistanceSubscription.schema.json diff --git a/MEC013/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot b/MEC013/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot index fd3e3a5..9e1cc58 100644 --- a/MEC013/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot +++ b/MEC013/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot @@ -8,7 +8,8 @@ Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem - +Library libraries/Server.py +Library String Default Tags TC_MEC_SRV_UEDISTSUB @@ -17,57 +18,83 @@ Default Tags TC_MEC_SRV_UEDISTSUB TC_MEC_MEC013_SRV_UEDISTSUB_001_OK [Documentation] ... Check that the IUT acknowledges the UE distance subscription request when commanded by a - ... MEC Application and notifies it when (all) the requested UE(s) is (are) within the specified distance + ... MEC Application and notifies it when (all) the requested UE(s) is (are) within the specified distance ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.10 - ... OpenAPI # TODO check this + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.9 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.9 + ... ETSI GS MEC 013 3.1.1 Clause 7.14.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES - Create new subscription DistanceNotificationSubscription + Create new subscription UserDistanceSubscription Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is DistanceNotificationSubscription - Check Result Contains ${response['body']['distanceNotificationSubscription']} clientCorrelator ${UEDISTSUB_CLIENT_ID} - Check Result Contains ${response['body']['distanceNotificationSubscription']} callbackReference ${APP_SRVSUB_NOTIF_CALLBACK_URI} - Check Result Contains ${response['body']['distanceNotificationSubscription']} monitoredAddress ${UEDISTSUB_MONITORED_IP_ADDRESS} - Check Result Contains ${response['body']['distanceNotificationSubscription']} referenceAddress ${UEDISTSUB_IP_ADDRESS} - + Check HTTP Response Body Json Schema Is UserDistanceSubscription + ${CLIENT_CORRELATOR} Get value entry from JSON file UserDistanceSubscription clientCorrelator + ${CALLBACK_REF} Get value entry from JSON file UserDistanceSubscription callbackReference + ${MON_ADDRESSED} Get value entry from JSON file UserDistanceSubscription monitoredAddress + ${DISTANCE} Get value entry from JSON file UserDistanceSubscription distance + ${TRACK_ACCURACY} Get value entry from JSON file UserDistanceSubscription trackingAccuracy + ${CRITERIA} Get value entry from JSON file UserDistanceSubscription criteria + ${CHECK_IMMEDIATE} Get value entry from JSON file UserDistanceSubscription checkImmediate + + Should be Equal ${response['body']['userDistanceSubscription']['clientCorrelator']} ${CLIENT_CORRELATOR} + Should be Equal ${response['body']['userDistanceSubscription']['callbackReference']} ${CALLBACK_REF} + Should be Equal ${response['body']['userDistanceSubscription']['distance']} ${DISTANCE} + Should be Equal ${response['body']['userDistanceSubscription']['trackingAccuracy']} ${TRACK_ACCURACY} + Should be Equal ${response['body']['userDistanceSubscription']['criteria']} ${CRITERIA} + Should be Equal ${response['body']['userDistanceSubscription']['checkImmediate']} ${True} + Spawn Notification Server UserDistanceNotification + Validate Json UserDistanceNotification.schema.json ${payload_notification} + [TearDown] Remove subscription ${SUB_ID} TC_MEC_MEC013_SRV_UEDISTSUB_001_BR [Documentation] - ... Check that the IUT responds with an error when - ... a request with incorrect parameters is sent by a MEC Application + ... Check that the IUT responds with an error when a request with incorrect parameters is + ... sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.10 - + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.9 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.9 + ... ETSI GS MEC 013 3.1.1 Clause 7.14.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES - Create new subscription DistanceNotificationSubscriptionError + Create new subscription UserDistanceSubscriptionError Check HTTP Response Status Code Is 400 TC_MEC_MEC013_SRV_UEDISTSUB_002_OK [Documentation] - ... Check that the IUT acknowledges the cancellation of UE distance notifications - ... when commanded by a MEC Application + ... Check that the IUT acknowledges the cancellation of UE distance + ... notifications when commanded by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.15.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${SUBSCRIPTION_ID} + [Setup] Create new subscription and get sub id UserDistanceSubscription + Remove subscription ${SUB_ID} Check HTTP Response Status Code Is 204 TC_MEC_MEC013_SRV_UEDISTSUB_002_NF [Documentation] - ... Check that the IUT responds with an error when - ... a request for an unknown URI is sent by a MEC Application + ... Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI + ... is sent by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.15.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + [Setup] Remove subscription ${NON_EXISTING_SUBSCRIPTION_ID} + Remove subscription ${NON_EXISTING_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 - + *** Keywords *** +Create new subscription and get sub id + [Arguments] ${content} + Create new subscription ${content} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Create new subscription [Arguments] ${content} Set Headers {"Accept":"application/json"} @@ -79,10 +106,15 @@ Create new subscription ${output}= Output response Set Suite Variable ${response} ${output} -Remove subscription +Remove subscription [Arguments] ${subscriptionId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/distance/${subscriptionId} ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file + Set Suite Variable ${response} ${output} + +Spawn Notification Server + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + Set Suite Variable ${payload_notification} ${output} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/environment/variables.txt b/MEC013/SRV/UEDISTSUB/environment/variables.txt index 83efa07..8e9b191 100644 --- a/MEC013/SRV/UEDISTSUB/environment/variables.txt +++ b/MEC013/SRV/UEDISTSUB/environment/variables.txt @@ -1,18 +1,19 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} location -${apiVersion} v2 +${apiVersion} v3 -# Specific variables -${UEDISTSUB_CLIENT_ID} 0123 -${APP_SRVSUB_NOTIF_CALLBACK_URI} "callbackReference": {"callbackData": "1234","notifyURL": "http://application.example.com/notifications/distance_notifications/123456"} -${UEDISTSUB_MONITORED_IP_ADDRESS} ["acr:10.0.0.1", "acr:10.0.0.2"] -${UEDISTSUB_IP_ADDRESS} acr:10.0.0.3 -${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID \ No newline at end of file +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 +${SUB_ID} +${NON_EXISTING_SUBSCRIPTION_ID} NON_EXISTING_SUBSCRIPTION_ID \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json b/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json deleted file mode 100644 index 57db8a1..0000000 --- a/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "distanceNotificationSubscription": { - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://application.example.com/notifications/distance_notifications/123456" - }, - "checkImmediate": "true", - "clientCorrelator": "0123", - "criteria": "AllWithinDistance", - "distance": "100", - "frequency": "10", - "monitoredAddress": ["acr:10.0.0.1", "acr:10.0.0.2"], - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": "10" - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json b/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json deleted file mode 100644 index 7c13bd9..0000000 --- a/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "distanceNotificationSubscription": { - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://application.example.com/notifications/distance_notifications/123456" - }, - "checkImmediate": "true", - "clientCorrelator": "0123", - "criteria": "AllWithinDistance", - "distance": "100", - "frequency": "10", - "monitoredAddress": ["acr:10.0.0.1", "acr:10.0.0.2"], - "reference": "acr:10.0.0.3", - "trackingAccuracy": "10" - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/jsons/UserDistanceNotification.json b/MEC013/SRV/UEDISTSUB/jsons/UserDistanceNotification.json new file mode 100644 index 0000000..ae75946 --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/jsons/UserDistanceNotification.json @@ -0,0 +1,24 @@ +{ + "notificationType": "UserDistanceNotification", + "_links": { + "subscription": { + "href": "https://sDZdgInDNnbFYppR.rt/aa" + } + }, + "distanceEvent": "AllWithinDistance", + "monitoredUsers": { + "resourceURL": "http://meAppServer.example.com/location/v3/queries/users", + "user": [ + { + "address": "acr:10.0.0.1", + "accessPointId": "001010000000000000000000000000001", + "zoneId": "zone01", + "resourceURL": "sunt", + "timestamp": { + "nanoSeconds": 22688093, + "seconds": 0 + } + } + ] + } +} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscription.json b/MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscription.json new file mode 100644 index 0000000..0e3babb --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscription.json @@ -0,0 +1,16 @@ +{ + "subscriptionType": "UserDistanceSubscription", + "clientCorrelator": "0123", + "callbackReference": "http://my.callback.com/user-distance/some-id", + "referenceAddress": [ + "acr:10.0.0.3" + ], + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "distance": 100, + "trackingAccuracy": 10, + "criteria": "AllWithinDistance", + "checkImmediate": "true" + } \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscriptionError.json b/MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscriptionError.json new file mode 100644 index 0000000..6db1643 --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/jsons/UserDistanceSubscriptionError.json @@ -0,0 +1,15 @@ +{ + "subscriptionType": "UserDistanceSubscription", + "clientCorrelator": "0123", + "referenceAddress": [ + "acr:10.0.0.3" + ], + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "distance": 100, + "trackingAccuracy": 10, + "criteria": "AllWithinDistance", + "checkImmediate": "true" + } \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/libraries/Server.py b/MEC013/SRV/UEDISTSUB/libraries/Server.py new file mode 100644 index 0000000..c983c3b --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/libraries/Server.py @@ -0,0 +1,144 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + notification_json= import_notification_json(self.handler.get_resp_body()) + return notification_json + diff --git a/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json b/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json deleted file mode 100644 index cfa6963..0000000 --- a/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json +++ /dev/null @@ -1,174 +0,0 @@ -{ - "type": "object", - "properties": { - "distanceNotificationSubscription": { - "description": "A type containing data for distance subscription, with reference to other devices.", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "criteria": { - "enum": [ - "AllWithinDistance", - "AnyWithinDistance", - "AllBeyondDistance", - "AnyBeyondDistance" - ], - "type": "string" - }, - "distance": { - "description": "Distance between devices that shall be monitored.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "monitoredAddress": { - "description": "Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "referenceAddress": { - "description": "Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "monitoredAddress", - "distance", - "trackingAccuracy", - "criteria", - "checkImmediate", - "frequency" - ], - "type": "object" - } - }, - "example": { - "distanceNotificationSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "checkImmediate": true, - "criteria": "AllWithinDistance", - "distance": 100, - "frequency": 10, - "referenceAddress": "acr:10.0.0.3", - "trackingAccuracy": 10 - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json b/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json deleted file mode 100644 index bc69876..0000000 --- a/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json +++ /dev/null @@ -1,147 +0,0 @@ -{ - "definitions": {}, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "http://example.com/root.json", - "type": "object", - "title": "The Root Schema", - "required": [ - "distanceNotificationSubscription" - ], - "properties": { - "distanceNotificationSubscription": { - "$id": "#/properties/distanceNotificationSubscription", - "type": "object", - "title": "The Distancenotificationsubscription Schema", - "required": [ - "callbackReference", - "checkImmediate", - "clientCorrelator", - "criteria", - "distance", - "frequency", - "monitoredAddress", - "referenceAddress", - "trackingAccuracy" - ], - "properties": { - "callbackReference": { - "$id": "#/properties/distanceNotificationSubscription/properties/callbackReference", - "type": "object", - "title": "The Callbackreference Schema", - "required": [ - "callbackData", - "notifyURL" - ], - "properties": { - "callbackData": { - "$id": "#/properties/distanceNotificationSubscription/properties/callbackReference/properties/callbackData", - "type": "string", - "title": "The Callbackdata Schema", - "default": "", - "examples": [ - "1234" - ], - "pattern": "^(.*)$" - }, - "notifyURL": { - "$id": "#/properties/distanceNotificationSubscription/properties/callbackReference/properties/notifyURL", - "type": "string", - "title": "The Notifyurl Schema", - "default": "", - "examples": [ - "http://application.example.com/notifications/distance_notifications/123456" - ], - "pattern": "^(.*)$" - } - } - }, - "checkImmediate": { - "$id": "#/properties/distanceNotificationSubscription/properties/checkImmediate", - "type": "string", - "title": "The Checkimmediate Schema", - "default": "", - "examples": [ - "true" - ], - "pattern": "^(.*)$" - }, - "clientCorrelator": { - "$id": "#/properties/distanceNotificationSubscription/properties/clientCorrelator", - "type": "string", - "title": "The Clientcorrelator Schema", - "default": "", - "examples": [ - "0123" - ], - "pattern": "^(.*)$" - }, - "criteria": { - "$id": "#/properties/distanceNotificationSubscription/properties/criteria", - "type": "string", - "title": "The Criteria Schema", - "default": "", - "examples": [ - "AllWithinDistance" - ], - "pattern": "^(.*)$" - }, - "distance": { - "$id": "#/properties/distanceNotificationSubscription/properties/distance", - "type": "string", - "title": "The Distance Schema", - "default": "", - "examples": [ - "100" - ], - "pattern": "^(.*)$" - }, - "frequency": { - "$id": "#/properties/distanceNotificationSubscription/properties/frequency", - "type": "string", - "title": "The Frequency Schema", - "default": "", - "examples": [ - "10" - ], - "pattern": "^(.*)$" - }, - "monitoredAddress": { - "$id": "#/properties/distanceNotificationSubscription/properties/monitoredAddress", - "type": "array", - "title": "The Monitoredaddress Schema", - "items": { - "$id": "#/properties/distanceNotificationSubscription/properties/monitoredAddress/items", - "type": "string", - "title": "The Items Schema", - "default": "", - "examples": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "pattern": "^(.*)$" - } - }, - "referenceAddress": { - "$id": "#/properties/distanceNotificationSubscription/properties/referenceAddress", - "type": "string", - "title": "The Referenceaddress Schema", - "default": "", - "examples": [ - "acr:10.0.0.3" - ], - "pattern": "^(.*)$" - }, - "trackingAccuracy": { - "$id": "#/properties/distanceNotificationSubscription/properties/trackingAccuracy", - "type": "string", - "title": "The Trackingaccuracy Schema", - "default": "", - "examples": [ - "10" - ], - "pattern": "^(.*)$" - } - } - } - } -} diff --git a/MEC013/SRV/UEDISTSUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEDISTSUB/schemas/NotificationSubscriptionList.schema.json deleted file mode 100644 index 3a495cd..0000000 --- a/MEC013/SRV/UEDISTSUB/schemas/NotificationSubscriptionList.schema.json +++ /dev/null @@ -1,715 +0,0 @@ -{ - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "properties": { - "circleNotificationSubscription": { - "description": "Collection of CircleNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for notifications, when the area is defined as a circle.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "enteringLeavingCriteria": { - "enum": [ - "Entering", - "Leaving" - ], - "type": "string" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "latitude": { - "description": "Latitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "longitude": { - "description": "Longitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "radius": { - "description": "Radius circle around center point in meters.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "address", - "latitude", - "longitude", - "radius", - "trackingAccuracy", - "enteringLeavingCriteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "CircleNotificationSubscription" - }, - "distanceNotificationSubscription": { - "description": "Collection of DistanceNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for distance subscription, with reference to other devices.", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "criteria": { - "enum": [ - "AllWithinDistance", - "AnyWithinDistance", - "AllBeyondDistance", - "AnyBeyondDistance" - ], - "type": "string" - }, - "distance": { - "description": "Distance between devices that shall be monitored.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "monitoredAddress": { - "description": "Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "referenceAddress": { - "description": "Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "monitoredAddress", - "distance", - "trackingAccuracy", - "criteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "DistanceNotificationSubscription" - }, - "periodicNotificationSubscription": { - "description": "Collection of PeriodicNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for periodic subscription.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications (can also be considered minimum time between notifications) per subscription.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "requestedAccuracy": { - "description": "Accuracy of the provided distance in meters.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "callbackReference", - "address", - "requestedAccuracy", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "PeriodicNotificationSubscription" - }, - "resourceURL": { - "description": "Self-referring URL, see note 1.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "AnyURI" - }, - "userTrackingSubscription": { - "description": "Collection of UserTrackingSubscription elements, see note 1.", - "items": { - "description": "A type containing user tracking subscription.", - "properties": { - "address": { - "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - } - }, - "required": [ - "callbackReference", - "address" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "UserTrackingSubscription" - }, - "zonalTrafficSubscription": { - "description": "Collection of ZonalTrafficSubscription elements, see note 1.", - "items": { - "description": "A type containing zonal traffic subscription", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "interestRealm": { - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZonalTrafficSubscription" - }, - "zoneStatusSubscription": { - "description": "Collection of ZoneStatusSubscription elements, see note 1.", - "items": { - "description": "A type containing zone status subscription.", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "numberOfUsersAPThreshold": { - "description": "Threshold number of users in an access point which if crossed shall cause a notification", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsersZoneThreshold": { - "description": "Threshold number of users in a zone which if crossed 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).", - "items": { - "enum": [ - "Serviceable", - "Unserviceable", - "Unknown" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "OperationStatus" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZoneStatusSubscription" - } - }, - "required": [ - "resourceURL" - ], - "type": "object", - "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.8.\nNOTE 2: \tAs specified in [6], clause 5.2.2.7.", - "x-etsi-ref": "6.3.3" - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/schemas/UserDistanceNotification.schema.json b/MEC013/SRV/UEDISTSUB/schemas/UserDistanceNotification.schema.json new file mode 100644 index 0000000..6737cac --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/schemas/UserDistanceNotification.schema.json @@ -0,0 +1,634 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "subscription": { + "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": [ + "subscription" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "distanceEvent": { + "description": "An enumeration, defining the distance criteria between devices.", + "enum": [ + "AllWithinDistance", + "AnyWithinDistance", + "AllBeyondDistance", + "AnyBeyondDistance" + ], + "type": "string" + }, + "monitoredUsers": { + "description": "A type containing list of users.", + "properties": { + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "user": { + "description": "Collection of the zone information list.", + "items": { + "description": "This type represents the information related to a user attached to an access point associated to the MEC host, such access point is in scope of the Location Service instance.", + "required": [ + "address", + "accessPointId", + "zoneId", + "resourceURL", + "timestamp" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.7.\nNOTE 2: \tAs specified in [5], clause 5.2.2.5.", + "x-etsi-ref": "6.2.2", + "properties": { + "address": { + "description": "Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI) currently on the access point, see note 1.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "AnyURI" + }, + "AccessPointId": { + "description": "The identity of the access point the user is currently on, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "zoneId": { + "description": "The identity of the zone the user is currently within, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceURL": { + "description": "Self-referring URL, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "AnyURI" + }, + "timestamp": { + "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" + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "civicInfo": { + "description": "Indicates a Civic address", + "type": "object", + "required": [ + "country" + ], + "properties": { + "country": { + "description": "The two-letter ISO 3166 country code in capital ASCII letters, e.g., DE or US", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "String" + }, + "A1": { + "description": "National subdivisions (state, canton, region, province, prefecture)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A5": { + "description": "Neighbourhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A6": { + "description": "Group of streets below the neighbourhood level", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRD": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POD": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "STS": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNO": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNS": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LMK": { + "description": "Landmark or vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LOC": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "NAM": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PC": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "BLD": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "UNIT": { + "description": "Unit (apartment, suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "FLR": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ROOM": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PLC": { + "description": "Place-type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PCN": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POBOX": { + "description": "Post office box (P.O. box)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ADDCODE": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "SEAT": { + "description": "Seat (desk, cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RD": { + "description": "Primary road or street", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSEC": { + "description": "Road clause", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDBR": { + "description": "Road branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSUBBR": { + "description": "Road sub-branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRM": { + "description": "Road pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POM": { + "description": "Road post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "usageRules": { + "description": "When present, this IE shall carry the value of \"usagerules\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "method": { + "description": "When present, this IE shall contain the method token, carried by the \"method\" Element of the PIDLLO XML document.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "providedBy": { + "description": "When present, this IE shall carry the value of \"provided-by\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "ancillaryInfo": { + "description": "Reserved for future use.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "relativeLocationInfo": { + "properties": { + "X": { + "description": "Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system. Positive value represents easting from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Y": { + "description": "Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system. Positive value represents northing from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Z": { + "description": "Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3DPoint. Positive value represents height above origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "mapInfo": { + "properties": { + "ancillaryMapInfo": { + "description": "Ancillary map information may be used to convert coordinates between different coordinate systems.", + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Not_specified" + }, + "mapId": { + "description": "Indicates the ID of the map. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "origin": { + "description": "Indicates the location of the map origin in the local Cartesian coordinate system.", + "properties": { + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure(inlined)" + } + }, + "required": [ + "mapId" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } + }, + "required": [ + "mapInfo", + "X", + "Y" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + } + } + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UserInfo" + } + }, + "required": [ + "resourceURL" + ], + "type": "object" + }, + "notificationType": { + "description": "Shall be set to \"UserDistanceNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "timeStamp": { + "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" + } + }, + "required": [ + "notificationType", + "monitoredUsers", + "distanceEvent", + "_links" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tAs specified in [6], clause 5.2.3.2.", + "x-etsi-ref": "6.4.9" +} \ No newline at end of file diff --git a/MEC013/SRV/UEDISTSUB/schemas/UserDistanceSubscription.schema.json b/MEC013/SRV/UEDISTSUB/schemas/UserDistanceSubscription.schema.json new file mode 100644 index 0000000..6423a84 --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/schemas/UserDistanceSubscription.schema.json @@ -0,0 +1,168 @@ +{ + "_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" + }, + "checkImmediate": { + "type": "boolean" + }, + "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" + }, + "criteria": { + "description": "An enumeration, defining the distance criteria between devices.", + "enum": [ + "AllWithinDistance", + "AnyWithinDistance", + "AllBeyondDistance", + "AnyBeyondDistance" + ], + "type": "string" + }, + "distance": { + "description": "Distance between users that shall be monitored. The unit is meter.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "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" + }, + "monitoredAddress": { + "description": "Contains addresses of users to monitor (e.g., ‘sip’ URI, ‘tel’ URI, ‘acr’ URI). Reference to a group could be provided here if supported by implementation.\nIf the ReferenceAddress is specified, then the distance between each monitored user and reference user(s) will be monitored.\nIf the ReferenceAddress is not present, then the distance between each pair of the monitored users will be monitored. Note that in that case there shall be at least two addresses specified here.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Array(Uri)" + }, + "referenceAddress": { + "description": "If specified, indicates address of each user that will be used as reference users from which the distances towards monitored users indicated in the Addresses will be monitored (e.g., ‘sip’ URI, ‘tel’ URI, ‘acr’ URI). Reference to a group could be provided here if supported by implementation.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array(Uri)" + }, + "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 \"UserDistanceSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "trackingAccuracy": { + "description": "Number of meters of acceptable error in tracking distance.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "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" + } + } \ No newline at end of file -- GitLab From 099919c49276d13fbe46fef15c1e65671bcb5876 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Mon, 8 Jan 2024 10:17:54 +0100 Subject: [PATCH 42/94] refactor --- MEC028/WAI/EXT_SUB/ExistingSubscription.robot | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MEC028/WAI/EXT_SUB/ExistingSubscription.robot b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot index 87a5420..4bfbfc7 100644 --- a/MEC028/WAI/EXT_SUB/ExistingSubscription.robot +++ b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot @@ -31,6 +31,7 @@ TC_MEC_MEC028_SRV_WAI_008_OK [TearDown] Remove Subscription Info ${Location} + TC_MEC_MEC028_SRV_WAI_008_NF [Documentation] ... Check that the IUT responds with an error when a request for existing subscription with incorrect parameters is sent" @@ -43,7 +44,7 @@ TC_MEC_MEC028_SRV_WAI_008_NF Retrieve existing subscription information ${NOT_EXISTING_SUB_ID} Check HTTP Response Status Code Is 404 -*** Test Cases *** + TC_MEC_MEC028_SRV_WAI_009_OK [Documentation] ... Check that the IUT responds with a Notification Subscription when it is modified" -- GitLab From cb6482faa9bac8ca1a4074707e5633e4291031f5 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Mon, 8 Jan 2024 10:18:15 +0100 Subject: [PATCH 43/94] added preamble and postamble to MEC029 --- MEC029/SRV/FAIS/PlatFixedAcessInfo.robot | 33 +++++++++++++++++++ .../SRV/FAIS/jsons/OnuAlarmSubscription.json | 2 +- 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot b/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot index b3ca073..68ff057 100644 --- a/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot +++ b/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot @@ -172,10 +172,16 @@ TC_MEC_MEC029_SRV_FAIS_005_OK ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + + [Setup] Create a new subscription OnuAlarmSubscription + Set Suite Variable ${subscriptionUrl} ${response['body']['_links']['self']['href']} + Get list of subscriptions Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SubscriptionLinkList + [Teardown] Remove subscription using url ${subscriptionUrl} + TC_MEC_MEC029_SRV_FAIS_005_BR [Documentation] @@ -197,6 +203,7 @@ TC_MEC_MEC029_SRV_FAIS_005_NF ... Reference ETSI GS MEC 029 V2.2.1, clause 7.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + Get list of subscriptions using query parameters subscriptionType ${NON_EXISTENT_SUBSCRIPTION_TYPE} Check HTTP Response Status Code Is 404 @@ -235,10 +242,16 @@ TC_MEC_MEC029_SRV_FAIS_007_OK ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES + + [Setup] Create a new subscription OnuAlarmSubscription + Set Suite Variable ${subscriptionUrl} ${response['body']['_links']['self']['href']} + Get an individual subscription ${ONU_ALARM_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is OnuAlarmSubscription Should Be Equal As Strings ${response['body']['subscriptionType']} OnuAlarmSubscription + + [Teardown] Remove subscription using url ${subscriptionUrl} TC_MEC_MEC029_SRV_FAIS_007_NF @@ -261,11 +274,17 @@ TC_MEC_MEC029_SRV_FAIS_008_OK ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + + [Setup] Create a new subscription OnuAlarmSubscription + Set Suite Variable ${subscriptionUrl} ${response['body']['_links']['self']['href']} + Update subscription ${ONU_ALARM_SUBSCRIPTION_ID} OnuAlarmSubscriptionUpdate Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is OnuAlarmSubscription Should Be Equal As Strings ${response['body']['subscriptionType']} OnuAlarmSubscription + [Teardown] Remove subscription using url ${subscriptionUrl} + TC_MEC_MEC029_SRV_FAIS_008_BR [Documentation] @@ -287,6 +306,9 @@ TC_MEC_MEC029_SRV_FAIS_008_NF ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES + + [Setup] Remove subscription ${NON_ESISTENT_SUBSCRIPTION_ID} + Update subscription ${NON_ESISTENT_SUBSCRIPTION_ID} OnuAlarmSubscriptionUpdate Check HTTP Response Status Code Is 404 @@ -311,6 +333,10 @@ TC_MEC_MEC029_SRV_FAIS_009_OK ... Reference ETSI GS MEC 029 V2.2.1, clause 7.8.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES + + [Setup] Create a new subscription OnuAlarmSubscription + Set Suite Variable ${subscriptionUrl} ${response['body']['_links']['self']['href']} + Remove subscription ${ONU_ALARM_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 @@ -480,4 +506,11 @@ Remove subscription Set Headers {"Authorization":"${TOKEN}"} Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove subscription using url + [Arguments] ${url} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${url} + ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json index 46db685..3370857 100644 --- a/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json +++ b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json @@ -18,7 +18,7 @@ }, "_links": { "self": { - "href": "https://example.com/resource/123" + "href": "https://example.com/resource/6cd12d29-30c7-4c8c-bf51-846daa51bab0" } }, "callbackReference": "https://client/callback", -- GitLab From 425a9e6d93205de98aac50408d97a384f3152b14 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 8 Jan 2024 10:36:53 +0100 Subject: [PATCH 44/94] Refactoring and minor fixes. --- MEC012/SRV/RNIS/RnisNotifications.robot | 4 +- .../SRV/RNIS/RnisNotifications_noSetup.robot | 165 ------------------ MEC012/SRV/RNIS/environment/variables.txt | 4 +- .../SRV/RNIS/jsons/S1BearerNotification.json | 2 +- 4 files changed, 4 insertions(+), 171 deletions(-) delete mode 100644 MEC012/SRV/RNIS/RnisNotifications_noSetup.robot diff --git a/MEC012/SRV/RNIS/RnisNotifications.robot b/MEC012/SRV/RNIS/RnisNotifications.robot index a80dadf..984ac76 100644 --- a/MEC012/SRV/RNIS/RnisNotifications.robot +++ b/MEC012/SRV/RNIS/RnisNotifications.robot @@ -21,7 +21,7 @@ TC_MEC_MEC012_SRV_RNIS_001_OK ... service has an associated subscription and the event is generated ... ETSI GS MEC 012 2.2.1, clause 6.4.2 Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - [Setup] Send a request for a subscription CellChangeSubscriptionRequest + [Setup] Send a request for a subscription CellChangeSubscription Spawn Notification Server CellChangeNotification Validate Json CellChangeNotification.schema.json ${payload_notification} [TearDown] Delete subscription ${SUB_ID} @@ -157,8 +157,6 @@ Delete subscription ${output}= Output response Set Suite Variable ${response} ${output} - - Spawn Notification Server [Arguments] ${payload_notification} ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} diff --git a/MEC012/SRV/RNIS/RnisNotifications_noSetup.robot b/MEC012/SRV/RNIS/RnisNotifications_noSetup.robot deleted file mode 100644 index df5ddd2..0000000 --- a/MEC012/SRV/RNIS/RnisNotifications_noSetup.robot +++ /dev/null @@ -1,165 +0,0 @@ -''[Documentation] robot --outputdir ../../outputs ./RnisNotifications_BV.robot -... Test Suite to validate RNIS/Notification (RNIS) operations. - -*** Settings *** - -Resource environment/variables.txt -Resource ../../../pics.txt -Resource ../../../GenericKeywords.robot -Library libraries/Server.py -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false -Library BuiltIn -Library OperatingSystem -Library Collections -Library String - - -*** Test Cases *** -TC_MEC_MEC012_SRV_RNIS_001_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about cell change if the RNIS - ... service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.2 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription CellChangeSubscriptionRequest - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url CellChangeNotification - Validate Json CellChangeNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - -TC_MEC_MEC012_SRV_RNIS_002_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about RAB establishment - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.3 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription RabEstSubscriptionRequest - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url RabEstNotification - Validate Json RabEstNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - - - -TC_MEC_MEC012_SRV_RNIS_003_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about RAB modification - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.4 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription RabModSubscription - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url RabModNotification - Validate Json RabModNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - - -TC_MEC_MEC012_SRV_RNIS_004_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about RAB release - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.5 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription RabRelSubscription - Spawn Notification Server 10.30.8.189 8888 5 POST /callback_url RabRelNotification - Validate Json RabRelNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - - -TC_MEC_MEC012_SRV_RNIS_005_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about UE measurement report - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.6 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription MeasRepUeSubscription - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url MeasRepUeNotification - Validate Json MeasRepUeNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - -TC_MEC_MEC012_SRV_RNIS_006_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about UE timing advance - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.7 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription MeasTaSubscription - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url MeasTaNotification - Validate Json MeasTaNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - - -TC_MEC_MEC012_SRV_RNIS_007_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about UE carrier aggregation reconfiguration - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.8 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription CaReconfSubscription - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url CaReconfNotification - Validate Json CaReconfNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - - -TC_MEC_MEC012_SRV_RNIS_008_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about S1-U bearer - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.10 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription S1BearerSubscription - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url S1BearerNotification - Validate Json S1BearerNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - - -TC_MEC_MEC012_SRV_RNIS_009_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report - ... if the RNIS service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.11 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription NrMeasRepUeSubscription - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url NrMeasRepUeNotification - Validate Json NrMeasRepUeNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - -TC_MEC_MEC012_SRV_RNIS_010_OK - [Documentation] - ... Check that the RNIS service sends an RNIS notification about cell change if the RNIS - ... service has an associated subscription and the event is generated - ... ETSI GS MEC 012 2.2.1, clause 6.4.2 - Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1 - #[Setup] Send a request for a subscription CellChangeSubscriptionRequestWithExpiration - Spawn Notification Server 10.30.8.189 8888 ${NOTIFICATION_SERVER_TIMEOUT} POST /callback_url ExpiryNotification - Validate Json ExpiryNotification.schema.json ${payload_notification} - #[TearDown] Delete subscription ${SUB_ID} - - -*** Keywords *** -Send a request for a subscription - [Arguments] ${content} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} - ${output}= Output response - Set Suite Variable ${response} ${output} - ${elements} = Split String ${response['headers']['Location']} / - Set Suite Variable ${SUB_ID} ${elements[4]} - - -Delete subscription - [Arguments] ${subscription_id} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscription_id} - ${output}= Output response - Set Suite Variable ${response} ${output} - - - -Spawn Notification Server - [Arguments] ${host} ${port} ${timeout} ${method} ${endpoint} ${payload_notification} - ${output} Spawn Web Server ${host} ${port} ${timeout} ${method} ${endpoint} ${payload_notification} - Set Suite Variable ${payload_notification} ${output} diff --git a/MEC012/SRV/RNIS/environment/variables.txt b/MEC012/SRV/RNIS/environment/variables.txt index d073df4..da47b01 100644 --- a/MEC012/SRV/RNIS/environment/variables.txt +++ b/MEC012/SRV/RNIS/environment/variables.txt @@ -13,11 +13,11 @@ ${SUB_ID} ##Notification Server variables -${NOTIFICATION_SERVER_IP} 10.30.8.189 +${NOTIFICATION_SERVER_IP} 127.0.0.1 ${NOTIFICATION_SERVER_PORT} 8888 ${NOTIFICATION_SERVER_HTTP_METHOD} POST ${NOTIFICATION_SERVER_URI} /callback_url -${NOTIFICATION_SERVER_TIMEOUT} 10 +${NOTIFICATION_SERVER_TIMEOUT} 5 ${APP_INS_ID} appInsId diff --git a/MEC012/SRV/RNIS/jsons/S1BearerNotification.json b/MEC012/SRV/RNIS/jsons/S1BearerNotification.json index 6590a88..56d2e00 100644 --- a/MEC012/SRV/RNIS/jsons/S1BearerNotification.json +++ b/MEC012/SRV/RNIS/jsons/S1BearerNotification.json @@ -15,7 +15,7 @@ { "enbInfo": { "ipAddress": "127.0.0.1", - "tunnelIdaa": "tunnelId" + "tunnelId": "tunnelId" }, "erabId": 1234, "sGwInfo": { -- GitLab From 2a1b5bc097d15fdf2fad8c21b53d5cb830f52eac Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 8 Jan 2024 11:43:20 +0100 Subject: [PATCH 45/94] MEC013 v3.1.1 UEINFOLOOK Draft TCs available --- .../UEINFOLOOK/PlatUeInformationLookup.robot | 102 ++- .../SRV/UEINFOLOOK/environment/variables.txt | 7 +- .../UEINFOLOOK/schemas/UserList.schema.json | 726 +++++++++++++----- 3 files changed, 636 insertions(+), 199 deletions(-) diff --git a/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot index 2f12c91..2a789f4 100644 --- a/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot +++ b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot @@ -14,50 +14,104 @@ Default Tags TC_MEC_SRV_UEINFOLOOK *** Test Cases *** -TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK +TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01 [Documentation] ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location - ... when queried by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.3 - ... OpenAPI https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserList + ... when queried by a MEC Application - No Filter + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 - [Tags] PIC_MEC_PLAT PIC_SERVICES INCLUDE_UNDEFINED_SCHEMAS - Get list of users with filter address ${ACR_ADDRESS} + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get list of users + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserList + +TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_02 + [Documentation] + ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location + ... when queried by a MEC Application - Filter with one address + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get list of users with filter address ${ACR_ADDRESS} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UserList + -TC_MEC_MEC013_SRV_UEINFOLOOK_001_BR +TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_03 [Documentation] - ... Check that the IUT responds with an error when - ... a request with incorrect parameters is sent by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.3 + ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location + ... when queried by a MEC Application - Filter with several addresses + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get list of users with filter addr ${ACR_ADDRESS} - Check HTTP Response Status Code Is 400 + Get list of users with filter address ${ACR_ADDRESS},${ACR_ADDRESS2} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserList + +TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_04 + [Documentation] + ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location + ... when queried by a MEC Application - Filter with several zoneIds + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 -TC_MEC_MEC013_SRV_UEINFOLOOK_001_NF + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get list of users with filter zoneId ${ZONE_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserList + + + + +TC_MEC_MEC013_SRV_UEINFLOOK_001_BR [Documentation] - ... Check that the IUT responds with an error when - ... a request for an unknown URI is sent by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.3 - ... OpenAPI https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserList + ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location + ... when queried by a MEC Application - Filter with several zoneIds + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get list of users with filter addr ${ACR_ADDRESS} + Check HTTP Response Status Code Is 400 +TC_MEC_MEC013_SRV_UEINFLOOK_001_NF + [Documentation] + ... Check that the IUT responds with an error when + ... a request for an unknown URI is sent by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of users with filter address ${ACR_UNKNOWN_IP} - Check HTTP Response Status Code Is 200 - # TODO add check that list is empty + Check HTTP Response Status Code Is 404 *** Keywords *** +Get list of users + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/queries/users + ${output}= Output response + Set Suite Variable ${response} ${output} + Get list of users with filter - [Arguments] ${key} ${value} + [Arguments] ${key} ${values} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/queries/users?${key}=${value} + Get ${apiRoot}/${apiName}/${apiVersion}/queries/users?${key}=${values} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC013/SRV/UEINFOLOOK/environment/variables.txt b/MEC013/SRV/UEINFOLOOK/environment/variables.txt index f85df68..08f06f5 100644 --- a/MEC013/SRV/UEINFOLOOK/environment/variables.txt +++ b/MEC013/SRV/UEINFOLOOK/environment/variables.txt @@ -1,14 +1,17 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} location -${apiVersion} v2 +${apiVersion} v3 # Specific variables ${ACR_ADDRESS} acr:10.0.0.3 +${ACR_ADDRESS2} acr:10.0.0.4 +${ZONE_ID} zone001 +${ZONE_ID2} zone002 ${ACR_UNKNOWN_IP} acr:192.168.5.1.1 diff --git a/MEC013/SRV/UEINFOLOOK/schemas/UserList.schema.json b/MEC013/SRV/UEINFOLOOK/schemas/UserList.schema.json index 65aefa0..7dbdb5c 100644 --- a/MEC013/SRV/UEINFOLOOK/schemas/UserList.schema.json +++ b/MEC013/SRV/UEINFOLOOK/schemas/UserList.schema.json @@ -1,174 +1,554 @@ { - "type": "object", - "properties": { - "userList": { - "description": "A type containing list of users.", - "type": "object", - "required": [ - "resourceURL" - ], - "properties": { - "user": { - "description": "Collection of the zone information list.", - "type": "array", - "items": { - "properties": { - "accessPointId": { - "description": "The identity of the access point the user is currently on, see note 1.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "address": { - "description": "Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI) currently on the access point, see note 1.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "AnyURI" - }, - "ancillaryInfo": { - "description": "Reserved for future use.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "contextLocationInfo": { - "description": "Contextual information of a user location (e.g. aisle, floor, room number, etc.).", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "String" - }, - "locationInfo": { - "properties": { - "accuracy": { - "type": "number" - }, - "accuracyAltitude": { - "type": "number" - }, - "accuracySemiMinor": { - "type": "number" - }, - "altitude": { - "description": "Location altitude relative to the WGS84 ellipsoid surface.", - "type": "number", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Float" - }, - "confidence": { - "type": "number" - }, - "includedAngle": { - "type": "number" - }, - "innerRadius": { - "type": "number" - }, - "latitude": { - "description": "Location latitude, expressed in the range -90 deg to +90 deg. Cardinality greater than one only if \"shape\" equals 7.", - "items": { - "type": "number" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Float" - }, - "longitude": { - "description": "Location longitude, expressed in the range -180 deg to +180 deg. Cardinality greater than one only if \"shape\" equals 7.", - "items": { - "type": "number" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "Float" - }, - "offsetAngle": { - "type": "number" - }, - "orientationMajorAxis": { - "type": "number" - }, - "shape": { - "description": "Shape information, as detailed in [14], associated with the reported location coordinate:\n1 = Ellipsoid_Arc\n2 = ellipsoid_Point\n3 = ellipsoid_Point_Altitude\n4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid\n5 = ellipsoid_Point_Uncert_Circle\n6 = ellipsoid_Point_Uncert_Ellipse\n7 = polygon", - "enum": [ - "ELLIPSOID_ARC", - "ELLIPSOID_POINT", - "ELLIPSOID_POINT_ALTITUDE", - "ELLIPSOID_POINT_ALTITUDE_UNCERT_ELLIPSOID", - "ELLIPSOID_POINT_UNCERT_CIRCLE", - "ELLIPSOID_POINT_UNCERT_ELLIPSE", - "POLYGON" - ], - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum (inlined)" - }, - "uncertaintyRadius": { - "type": "number" - }, - "velocity": { - "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", - "type": "object", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "Structure (inlined)" - } - }, - "required": [ - "latitude", - "longitude", - "shape" - ], - "type": "object", - "x-etsi-ref": "6.5.3" - }, - "resourceURL": { - "description": "Self-referring URL, see note 1.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "timeStamp": { - "properties": { - "nanoSeconds": { - "type": "number" - }, - "seconds": { - "type": "number" - } - }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.2" - }, - "zoneId": { - "description": "The identity of the zone the user is currently within, see note 1.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "address", - "accessPointId", - "zoneId", - "resourceURL", - "timeStamp" - ], - "type": "object", - "x-etsi-notes": ":\tAs specified in [5], clause 5.2.2.7.\nNOTE 2: \tAs specified in [5], clause 5.2.2.5.", - "x-etsi-ref": "6.2.2" - } - }, - "resourceURL": { - "description": "Self referring URL.", - "type": "string", - "format": "uri", - "example": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription123" - } - } -} - } -} + "description": "A type containing list of users.", + "properties": { + "resourceURL": { + "description": "Self referring URL", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "anyURI" + }, + "user": { + "description": "Collection of the zone information list.", + "items": { + "description": "This type represents the information related to a user attached to an access point associated to the MEC host, such access point is in scope of the Location Service instance.", + "required": [ + "address", + "accessPointId", + "zoneId", + "resourceURL", + "timestamp" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.7.\nNOTE 2: \tAs specified in [5], clause 5.2.2.5.", + "x-etsi-ref": "6.2.2", + "properties": { + "address": { + "description": "Address of user (e.g. 'sip' URI, 'tel' URI, 'acr' URI) currently on the access point, see note 1.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "AnyURI" + }, + "AccessPointId": { + "description": "The identity of the access point the user is currently on, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "zoneId": { + "description": "The identity of the zone the user is currently within, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceURL": { + "description": "Self-referring URL, see note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "AnyURI" + }, + "timestamp": { + "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" + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "civicInfo": { + "description": "Indicates a Civic address", + "type": "object", + "required": [ + "country" + ], + "properties": { + "country": { + "description": "The two-letter ISO 3166 country code in capital ASCII letters, e.g., DE or US", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "String" + }, + "A1": { + "description": "National subdivisions (state, canton, region, province, prefecture)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A5": { + "description": "Neighbourhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A6": { + "description": "Group of streets below the neighbourhood level", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRD": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POD": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "STS": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNO": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNS": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LMK": { + "description": "Landmark or vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LOC": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "NAM": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PC": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "BLD": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "UNIT": { + "description": "Unit (apartment, suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "FLR": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ROOM": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PLC": { + "description": "Place-type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PCN": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POBOX": { + "description": "Post office box (P.O. box)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ADDCODE": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "SEAT": { + "description": "Seat (desk, cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RD": { + "description": "Primary road or street", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSEC": { + "description": "Road clause", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDBR": { + "description": "Road branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSUBBR": { + "description": "Road sub-branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRM": { + "description": "Road pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POM": { + "description": "Road post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "usageRules": { + "description": "When present, this IE shall carry the value of \"usagerules\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "method": { + "description": "When present, this IE shall contain the method token, carried by the \"method\" Element of the PIDLLO XML document.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "providedBy": { + "description": "When present, this IE shall carry the value of \"provided-by\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "ancillaryInfo": { + "description": "Reserved for future use.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "relativeLocationInfo": { + "properties": { + "X": { + "description": "Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system. Positive value represents easting from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Y": { + "description": "Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system. Positive value represents northing from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Z": { + "description": "Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3DPoint. Positive value represents height above origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "mapInfo": { + "properties": { + "ancillaryMapInfo": { + "description": "Ancillary map information may be used to convert coordinates between different coordinate systems.", + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Not_specified" + }, + "mapId": { + "description": "Indicates the ID of the map. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "origin": { + "description": "Indicates the location of the map origin in the local Cartesian coordinate system.", + "properties": { + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure(inlined)" + } + }, + "required": [ + "mapId" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } + }, + "required": [ + "mapInfo", + "X", + "Y" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + } + } + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UserInfo" + } + }, + "required": [ + "resourceURL" + ], + "type": "object" + } \ No newline at end of file -- GitLab From 6e5604322a32384890d428c23bf690688ebdee36 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Mon, 8 Jan 2024 12:49:50 +0100 Subject: [PATCH 46/94] draft of MEC30 331 TCs --- MEC030/SRV/V2X/V2XInformationService.robot | 222 +++++++++++------- MEC030/SRV/V2X/environment/variables.txt | 6 +- MEC030/SRV/V2X/jsons/PredictedQoS_BR.json | 2 +- MEC030/SRV/V2X/jsons/PredictedQoS_NF.json | 2 +- .../SRV/V2X/jsons/V2XDistributionServers.json | 53 +++++ .../V2X/jsons/V2XDistributionServers_BR.json | 61 +++++ .../V2X/jsons/V2XDistributionServers_NF.json | 46 ++++ .../schemas/Pc5ProvisioningInfo.schema.json | 2 +- .../V2XDistributionServers.schema.json | 172 ++++++++++++++ 9 files changed, 470 insertions(+), 96 deletions(-) create mode 100644 MEC030/SRV/V2X/jsons/V2XDistributionServers.json create mode 100644 MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json create mode 100644 MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json create mode 100644 MEC030/SRV/V2X/schemas/V2XDistributionServers.schema.json diff --git a/MEC030/SRV/V2X/V2XInformationService.robot b/MEC030/SRV/V2X/V2XInformationService.robot index 915cbc6..5a7b5bd 100644 --- a/MEC030/SRV/V2X/V2XInformationService.robot +++ b/MEC030/SRV/V2X/V2XInformationService.robot @@ -10,39 +10,39 @@ Library OperatingSystem ##GET on ${apiRoot}/${apiName}/${apiVersion}/queries/uu_unicast_provisioning_info *** Test Cases *** -TP_MEC_MEC030_SRV_V2X_001_OK_01 +TC_MEC_MEC030_SRV_V2X_001_OK_01 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.3.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over Uu unicast using ecgi filter ${ECGI} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UuUnicastProvisioningInfo -TP_MEC_MEC030_SRV_V2X_001_OK_02 +TC_MEC_MEC030_SRV_V2X_001_OK_02 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.3.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over Uu unicast using geographical filter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UuUnicastProvisioningInfo -TP_MEC_MEC030_SRV_V2X_001_BR +TC_MEC_MEC030_SRV_V2X_001_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.3.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over Uu unicast using geographical filter wrong parameter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 400 -TP_MEC_MEC030_SRV_V2X_001_NF +TC_MEC_MEC030_SRV_V2X_001_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.3.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over Uu unicast using ecgi filter ${UNKNOWN_ECGI} Check HTTP Response Status Code Is 404 @@ -50,35 +50,35 @@ TP_MEC_MEC030_SRV_V2X_001_NF ##GET on ${apiRoot}/${apiName}/${apiVersion}/queries/uu_mbms_provisioning_info -TP_MEC_MEC030_SRV_V2X_002_OK_01 +TC_MEC_MEC030_SRV_V2X_002_OK_01 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu MBM when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.4.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.4.3.1 Retrieve configured provisioning information over Uu MBM using ecgi filter ${ECGI} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UuMbmsProvisioningInfo -TP_MEC_MEC030_SRV_V2X_002_OK_02 +TC_MEC_MEC030_SRV_V2X_002_OK_02 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.4.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.4.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over Uu MBM using geographical filter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UuMbmsProvisioningInfo -TP_MEC_MEC030_SRV_V2X_002_BR +TC_MEC_MEC030_SRV_V2X_002_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.4.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.4.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over Uu MBM using geographical filter wrong parameter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 400 -TP_MEC_MEC030_SRV_V2X_002_NF +TC_MEC_MEC030_SRV_V2X_002_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.4.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.4.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over Uu MBM using geographical filter ${UNKNOWN_LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 404 @@ -86,66 +86,94 @@ TP_MEC_MEC030_SRV_V2X_002_NF ##GET on ${apiRoot}/${apiName}/${apiVersion}/queries/pc5_provisioning_info -TP_MEC_MEC030_SRV_V2X_003_OK_01 +TC_MEC_MEC030_SRV_V2X_003_OK_01 [Documentation] ... Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.5.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over PC5 using ecgi filter ${ECGI} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is Pc5ProvisioningInfo -TP_MEC_MEC030_SRV_V2X_003_OK_02 +TC_MEC_MEC030_SRV_V2X_003_OK_02 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.5.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over PC5 using geographical filter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is Pc5ProvisioningInfo -TP_MEC_MEC030_SRV_V2X_003_BR +TC_MEC_MEC030_SRV_V2X_003_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.5.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over PC5 using geographical filter wrong parameter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 400 -TP_MEC_MEC030_SRV_V2X_003_NF +TC_MEC_MEC030_SRV_V2X_003_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.5.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Retrieve configured provisioning information over PC5 using ecgi filter ${UNKNOWN_ECGI} Check HTTP Response Status Code Is 404 +##POST on ${apiRoot}/${apiName}/${apiVersion}/provide_v2x_msg_distribution_server_info +TC_MEC_MEC030_SRV_V2X_004_OK + [Documentation] + ... Check that the IUT processes properly a request to information of V2X Message Distribution servers + ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 + ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + Request v2x message distribution servers V2XDistributionServers + Check HTTP Response Body Json Schema Is V2XDistributionServers + Check HTTP Response Status Code Is 200 + +TC_MEC_MEC030_SRV_V2X_004_BR + [Documentation] + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 + ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + Request v2x message distribution servers V2XDistributionServers_BR + Check HTTP Response Status Code Is 400 + + +TC_MEC_MEC030_SRV_V2X_004_NF + [Documentation] + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 + ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + Request v2x message distribution servers V2XDistributionServers_NF + Check HTTP Response Status Code Is 404 + + ##POST on ${apiRoot}/${apiName}/${apiVersion}/provide_predicted_qos -TP_MEC_MEC030_SRV_V2X_004_OK +TC_MEC_MEC030_SRV_V2X_005_OK [Documentation] ... Check that the IUT sends a request about QoS information for a vehicular UE when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.6.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Request predicted QoS PredictedQoS.json Check HTTP Response Body Json Schema Is PredictedQoS Check HTTP Response Status Code Is 200 -TP_MEC_MEC030_SRV_V2X_004_BR +TC_MEC_MEC030_SRV_V2X_005_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.6.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml ##Wrong parameter into JSON: locality instead of locationGranularity Request predicted QoS PredictedQoS_BR.json Check HTTP Response Status Code Is 400 -TP_MEC_MEC030_SRV_V2X_004_NF +TC_MEC_MEC030_SRV_V2X_005_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.6.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Request predicted QoS PredictedQoS_NF.json Check HTTP Response Status Code Is 404 @@ -153,18 +181,18 @@ TP_MEC_MEC030_SRV_V2X_004_NF ##POST on ${apiRoot}/${apiName}/${apiVersion}/publish_v2x_message -TP_MEC_MEC030_SRV_V2X_005_OK +TC_MEC_MEC030_SRV_V2X_006_OK [Documentation] ... Check that the IUT processes properly a request to publish a V2X message - ... ETSI GS MEC 030 V2.1.1, clause 7.7.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.7.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Publish V2X message V2xMsgPublication.json Check HTTP Response Status Code Is 204 -TP_MEC_MEC030_SRV_V2X_005_BR +TC_MEC_MEC030_SRV_V2X_006_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.7.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.7.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Publish V2X message V2xMsgPublication_BR.json Check HTTP Response Status Code Is 400 @@ -172,10 +200,10 @@ TP_MEC_MEC030_SRV_V2X_005_BR ##GET on ${apiRoot}/${apiName}/${apiVersion}/subscription -TP_MEC_MEC030_SRV_V2X_006_OK_01 +TC_MEC_MEC030_SRV_V2X_007_OK_01 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 @@ -189,10 +217,10 @@ TP_MEC_MEC030_SRV_V2X_006_OK_01 END Should Be True ${passed} -TP_MEC_MEC030_SRV_V2X_006_OK_02 +TC_MEC_MEC030_SRV_V2X_007_OK_02 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 @@ -206,10 +234,10 @@ TP_MEC_MEC030_SRV_V2X_006_OK_02 END Should Be True ${passed} -TP_MEC_MEC030_SRV_V2X_006_OK_03 +TC_MEC_MEC030_SRV_V2X_007_OK_03 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 @@ -223,10 +251,10 @@ TP_MEC_MEC030_SRV_V2X_006_OK_03 END Should Be True ${passed} -TP_MEC_MEC030_SRV_V2X_006_OK_04 +TC_MEC_MEC030_SRV_V2X_008_OK_04 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 @@ -241,10 +269,10 @@ TP_MEC_MEC030_SRV_V2X_006_OK_04 Should Be True ${passed} -TP_MEC_MEC030_SRV_V2X_006_BR +TC_MEC_MEC030_SRV_V2X_008_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -253,10 +281,10 @@ TP_MEC_MEC030_SRV_V2X_006_BR ##POST on ${apiRoot}/${apiName}/${apiVersion}/subscription -TP_MEC_MEC030_SRV_V2X_007_OK_01 +TC_MEC_MEC030_SRV_V2X_009_OK_01 [Documentation] ... Check that the IUT responds with the requested to create a subscription - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -271,10 +299,10 @@ TP_MEC_MEC030_SRV_V2X_007_OK_01 Should Be Equal As Strings ${json_object['filterCriteria']} ${response['body']['filterCriteria']} Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_007_OK_02 +TC_MEC_MEC030_SRV_V2X_009_OK_02 [Documentation] ... Check that the IUT responds with the requested to create a subscription - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -290,10 +318,10 @@ TP_MEC_MEC030_SRV_V2X_007_OK_02 Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_007_OK_03 +TC_MEC_MEC030_SRV_V2X_009_OK_03 [Documentation] ... Check that the IUT responds with the requested to create a subscription - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -308,10 +336,10 @@ TP_MEC_MEC030_SRV_V2X_007_OK_03 Should Be Equal As Strings ${json_object['filterCriteria']} ${response['body']['filterCriteria']} Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_007_OK_04 +TC_MEC_MEC030_SRV_V2X_009_OK_04 [Documentation] ... Check that the IUT responds with the requested to create a subscription - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 @@ -328,10 +356,10 @@ TP_MEC_MEC030_SRV_V2X_007_OK_04 Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_007_BR +TC_MEC_MEC030_SRV_V2X_009_BR [Documentation] ... Check that the IUT responds with the requested to create a subscription - ... ETSI GS MEC 030 V2.1.1, clause 7.8.3.4 + ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -343,10 +371,10 @@ TP_MEC_MEC030_SRV_V2X_007_BR ##GET on ${apiRoot}/${apiName}/${apiVersion}/subscriptions/{subscriptionId} -TP_MEC_MEC030_SRV_V2X_008_OK_01 +TC_MEC_MEC030_SRV_V2X_010_OK_01 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -358,10 +386,10 @@ TP_MEC_MEC030_SRV_V2X_008_OK_01 Should Not Be Empty ${response['body']['filterCriteria']} Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_008_OK_02 +TC_MEC_MEC030_SRV_V2X_010_OK_02 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -374,10 +402,10 @@ TP_MEC_MEC030_SRV_V2X_008_OK_02 Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_008_OK_03 +TC_MEC_MEC030_SRV_V2X_010_OK_03 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -389,10 +417,10 @@ TP_MEC_MEC030_SRV_V2X_008_OK_03 Should Not Be Empty ${response['body']['filterCriteria']} Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_008_OK_04 +TC_MEC_MEC030_SRV_V2X_010_OK_04 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -404,10 +432,10 @@ TP_MEC_MEC030_SRV_V2X_008_OK_04 Should Not Be Empty ${response['body']['filterCriteria']} Should Not Be Empty ${response['body']['_links']['self']['href']} -TP_MEC_MEC030_SRV_V2X_008_BR +TC_MEC_MEC030_SRV_V2X_010_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -415,10 +443,10 @@ TP_MEC_MEC030_SRV_V2X_008_BR Check HTTP Response Status Code Is 400 -TP_MEC_MEC030_SRV_V2X_008_NF +TC_MEC_MEC030_SRV_V2X_010_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.1 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -428,10 +456,10 @@ TP_MEC_MEC030_SRV_V2X_008_NF ##PUT on ${apiRoot}/${apiName}/${apiVersion}/subscriptions/{subscriptionId} -TP_MEC_MEC030_SRV_V2X_009_OK_01 +TC_MEC_MEC030_SRV_V2X_011_OK_01 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -446,10 +474,10 @@ TP_MEC_MEC030_SRV_V2X_009_OK_01 Should Not Be Empty ${response['body']['_links']['self']['href']} Should Be Equal As Strings ${json_object['filterCriteria']} ${response['body']['filterCriteria']} -TP_MEC_MEC030_SRV_V2X_009_OK_02 +TC_MEC_MEC030_SRV_V2X_011_OK_02 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -464,10 +492,10 @@ TP_MEC_MEC030_SRV_V2X_009_OK_02 Should Not Be Empty ${response['body']['_links']['self']['href']} Should Be Equal As Strings ${json_object['filterCriteria']} ${response['body']['filterCriteria']} -TP_MEC_MEC030_SRV_V2X_009_OK_03 +TC_MEC_MEC030_SRV_V2X_011_OK_03 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -482,10 +510,10 @@ TP_MEC_MEC030_SRV_V2X_009_OK_03 Should Not Be Empty ${response['body']['_links']['self']['href']} Should Be Equal As Strings ${json_object['filterCriteria']} ${response['body']['filterCriteria']} -TP_MEC_MEC030_SRV_V2X_009_OK_04 +TC_MEC_MEC030_SRV_V2X_011_OK_04 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -500,10 +528,10 @@ TP_MEC_MEC030_SRV_V2X_009_OK_04 Should Not Be Empty ${response['body']['_links']['self']['href']} Should Be Equal As Strings ${json_object['filterCriteria']} ${response['body']['filterCriteria']} -TP_MEC_MEC030_SRV_V2X_009_BR +TC_MEC_MEC030_SRV_V2X_011_BR [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -513,10 +541,10 @@ TP_MEC_MEC030_SRV_V2X_009_BR Update existing subscription ${SUB_PROV_CHG_UU_UNI_ID} ${body} Check HTTP Response Status Code Is 400 -TP_MEC_MEC030_SRV_V2X_009_NF +TC_MEC_MEC030_SRV_V2X_011_NF [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -528,40 +556,40 @@ TP_MEC_MEC030_SRV_V2X_009_NF Check HTTP Response Status Code Is 404 ##DELETE on ${apiRoot}/${apiName}/${apiVersion}/subscriptions/{subscriptionId} -TP_MEC_MEC030_SRV_V2X_010_OK_01 +TC_MEC_MEC030_SRV_V2X_012_OK_01 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${SUB_PROV_CHG_UU_UNI_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC030_SRV_V2X_010_OK_02 +TC_MEC_MEC030_SRV_V2X_012_OK_02 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${SUB_PROV_CHG_UU_MBMS_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC030_SRV_V2X_010_OK_03 +TC_MEC_MEC030_SRV_V2X_012_OK_03 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${SUB_PROV_CHG_PC5_ID} Check HTTP Response Status Code Is 204 -TP_MEC_MEC030_SRV_V2X_010_OK_04 +TC_MEC_MEC030_SRV_V2X_012_OK_04 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -569,10 +597,10 @@ TP_MEC_MEC030_SRV_V2X_010_OK_04 Check HTTP Response Status Code Is 204 -TP_MEC_MEC030_SRV_V2X_010_NF +TC_MEC_MEC030_SRV_V2X_012_NF [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application - ... ETSI GS MEC 030 V2.1.1, clause 7.9.3.2 + ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -588,7 +616,7 @@ Retrieve configured provisioning information over Uu unicast using ecgi filter Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} + Set Headers {"Content-Length":"0"} GET ${apiRoot}/${apiName}/${apiVersion}/queries/uu_unicast_provisioning_info?location_info=ecgi,${value} ${output}= Output response Set Suite Variable ${response} ${output} @@ -711,7 +739,21 @@ Request predicted QoS Post ${apiRoot}/${apiName}/${apiVersion}/provide_predicted_qos ${body} ${output}= Output response Set Suite Variable ${response} ${output} - + + +Request v2x message distribution servers + [Arguments] ${content} + Should Be True ${PIC_MEC_PLAT} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + ${path} Catenate SEPARATOR= jsons/ ${content} .json + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/provide_v2x_msg_distribution_server_info ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} Publish V2X message diff --git a/MEC030/SRV/V2X/environment/variables.txt b/MEC030/SRV/V2X/environment/variables.txt index 198cebb..c4ad9e4 100644 --- a/MEC030/SRV/V2X/environment/variables.txt +++ b/MEC030/SRV/V2X/environment/variables.txt @@ -1,13 +1,13 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 127.0.0.1 -${PORT} 8082 +${HOST} mockoon +${PORT} 3005 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} vis -${apiVersion} v1 +${apiVersion} v2 # Specific variables ${LOCATION_INFO_QUERY_PARAM} location_info diff --git a/MEC030/SRV/V2X/jsons/PredictedQoS_BR.json b/MEC030/SRV/V2X/jsons/PredictedQoS_BR.json index 1ddbf46..7d0cdfe 100644 --- a/MEC030/SRV/V2X/jsons/PredictedQoS_BR.json +++ b/MEC030/SRV/V2X/jsons/PredictedQoS_BR.json @@ -1,5 +1,5 @@ { - "localityGranularity": "10", + "localityGranularity": "11", "routes": [{ "routeinfo": [ { diff --git a/MEC030/SRV/V2X/jsons/PredictedQoS_NF.json b/MEC030/SRV/V2X/jsons/PredictedQoS_NF.json index 3086833..9ab022a 100644 --- a/MEC030/SRV/V2X/jsons/PredictedQoS_NF.json +++ b/MEC030/SRV/V2X/jsons/PredictedQoS_NF.json @@ -1,5 +1,5 @@ { - "locationGranularity": "10", + "locationGranularity": "12", "routes": [{ "routeinfo": [ { diff --git a/MEC030/SRV/V2X/jsons/V2XDistributionServers.json b/MEC030/SRV/V2X/jsons/V2XDistributionServers.json new file mode 100644 index 0000000..44bb360 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/V2XDistributionServers.json @@ -0,0 +1,53 @@ +{ + "V2xMsgDistributionServerInfo": { + "locationInfo": [ + { + "ecgi": { + "cellId": { + "cellId": "01010101010101010101010101" + }, + "plmn": { + "mcc": "123", + "mnc": "456" + } + }, + "geoArea": { + "latitude": 37.7749, + "longitude": -122.4194 + } + }, + { + "ecgi": { + "cellId": { + "cellId": "02020202020202020202020202" + }, + "plmn": { + "mcc": "789", + "mnc": "012" + } + } + } + ], + "v2xMsgDistributionServer": [ + { + "infoProtocol": { + "msgProtocol": [ + 0, + 1, + 2 + ], + "protImplementation": "Java" + } + }, + { + "infoProtocol": { + "msgProtocol": [ + 3, + 4 + ], + "protImplementation": "Python" + } + } + ] + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json b/MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json new file mode 100644 index 0000000..7013986 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json @@ -0,0 +1,61 @@ +{ + "V2xMsgDistributionServerInfo": { + "locationInfo": [ + { + "ecgi": { + "cellId": { + "cellId": "01010101010101010101010101" + }, + "plmn": { + "mcc": "123", + "mnc": "456" + } + }, + "geoArea": { + "latitude": 37.7749, + "longitude": -122.4194 + } + }, + { + "ecgi": { + "cellId": { + "cellId": "02020202020202020202020202" + }, + "plmn": { + "mcc": "789", + "mnc": "012" + } + } + } + ], + "v2xMsgDistributionServer": [ + { + "infoConnection": { + "ipAddress": "192.168.1.1", + "port_number": 8080 + }, + "infoProtocol": { + "msgProtocol": [ + 0, + 1, + 2 + ], + "protImplementation": "Java" + } + }, + { + "infoConnection": { + "ipAddress": "10.0.0.1", + "port_number": 8888 + }, + "infoProtocol": { + "msgProtocol": [ + 3, + 4 + ], + "protImplementation": "Python" + } + } + ] + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json b/MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json new file mode 100644 index 0000000..167d5cc --- /dev/null +++ b/MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json @@ -0,0 +1,46 @@ +{ + "V2xMsgDistributionServerInfo": { + "locationInfo": [ + { + "ecgi": { + "cellId": { + "cellId": "01010101010101010101010101" + }, + "plmn": { + "mcc": "123", + "mnc": "456" + } + }, + "geoArea": { + "latitude": 37.7749, + "longitude": -122.4194 + } + }, + { + "ecgi": { + "cellId": { + "cellId": "02020202020202020202020202" + }, + "plmn": { + "mcc": "789", + "mnc": "012" + } + } + } + ], + "v2xMsgDistributionServer": [ + { + "infoConnection": { + "ipAddress": "192.168.1.1", + "port_number": 8080 + }, + "infoProtocol": { + "msgProtocol": [ + 0 + ], + "protImplementation": "Java" + } + } + ] + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/Pc5ProvisioningInfo.schema.json b/MEC030/SRV/V2X/schemas/Pc5ProvisioningInfo.schema.json index f6d972d..9b305ed 100644 --- a/MEC030/SRV/V2X/schemas/Pc5ProvisioningInfo.schema.json +++ b/MEC030/SRV/V2X/schemas/Pc5ProvisioningInfo.schema.json @@ -6,7 +6,7 @@ "description": "The provisioning information per location as defined below.", "properties": { "dstLayer2Id": { - "description": "For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS 136 321 [i.12].\nPLMN operators coordinate to make sure Destination Layer-2 ID(s) for different V2X services are configured in a consistent manner.", + "description": "For sidelink communication, the Destination Layer-2 ID is set to the ProSe Layer-2 Group ID or Prose UE ID, see ETSI TS136321 [i.12].\nPLMN operators coordinate to make sure Destination Layer-2 ID(s) for different V2X services are configured in a consistent manner.", "type": "string", "x-etsi-mec-cardinality": "1", "x-etsi-mec-origin-type": "String" diff --git a/MEC030/SRV/V2X/schemas/V2XDistributionServers.schema.json b/MEC030/SRV/V2X/schemas/V2XDistributionServers.schema.json new file mode 100644 index 0000000..06233dd --- /dev/null +++ b/MEC030/SRV/V2X/schemas/V2XDistributionServers.schema.json @@ -0,0 +1,172 @@ +{ + "properties": { + "locationInfo": { + "description": "Location information to identify a particular geographical area of interest to the service consumer for receiving V2X messages.", + "items": { + "properties": { + "ecgi": { + "properties": { + "cellId": { + "properties": { + "cellId": { + "description": "E-UTRAN Cell Identity as a bit string (size (28)).", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "cellId" + ], + "type": "object", + "x-etsi-ref": "6.6.2" + }, + "plmn": { + "properties": { + "mcc": { + "description": "The Mobile Country Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "mnc": { + "description": "The Mobile Network Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "x-etsi-ref": "6.5.4" + } + }, + "required": [ + "plmn", + "cellId" + ], + "type": "object", + "x-etsi-ref": "6.5.5" + }, + "geoArea": { + "description": "Information of a geographical area.", + "properties": { + "latitude": { + "description": "Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM = WGS84) -180 to 180 in decimal degree format DDD.ddd", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "type": "object", + "x-etsi-notes": "NOTE:\tEither ecgi or geoArea shall be present, but not both.", + "x-etsi-ref": "6.5.3" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "LocationInfo" + }, + "v2xMsgDistributionServer": { + "description": "Describes the information of the V2X Message Distribution Servers supported by the service consumer for direct communication.", + "items": { + "properties": { + "infoConnection": { + "description": "Connection information of the V2X Message Distribution Server the service consumer can use for direct connection. Shall only be included in the response.", + "properties": { + "ipAddress": { + "description": "IP address of the V2X Message Distribution Server.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "port_number": { + "description": "Port number of the V2X Message Distribution Server.", + "x-etsi-mec-cardinality'": "1", + "x-etsi-mec-origin-type'": "Integer (0..65535)", + "type": "integer" + } + }, + "required": [ + "ipAddress", + "port_number" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "infoProtocol": { + "description": "Specifics of the application layer protocol of V2X Message Distribution Server.", + "properties": { + "msgProtocol": { + "description": "Numerical value corresponding to the application layer protocol supported by the service consumer. For the msgProtocol, the following values are currently defined (see note): 0 = MQTT v3.1.0 1 = MQTT v3.1.1 2 = MQTT v5 3 = MQTT-SN 4 = AMQP 1.0", + "items": { + "enum": [ + 0, + 1, + 2, + 3, + 4 + ], + "type": "integer" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Enum" + }, + "protImplementation": { + "description": "Implementation specifics of application layer protocol, e.g. programming language.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "msgProtocol", + "protImplementation" + ], + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "infoProtocol" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tOther application layer protocols (and versions thereof) may be added as needed.", + "x-etsi-ref": "6.5.16" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "V2xMsgDistributionServer" + } + }, + "required": [ + "v2xMsgDistributionServer" + ], + "type": "object", + "x-etsi-ref": "6.2.5" + } \ No newline at end of file -- GitLab From 1ab59ce80f67947e589a2fc860996cb75a3afe4f Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 8 Jan 2024 13:23:10 +0100 Subject: [PATCH 47/94] MEC013 v3.1.1 UELOCLOOK Draft TCs available --- .../SRV/UELOCLOOK/PlatUeLocationLookup.robot | 236 +++++++++++++++--- .../SRV/UELOCLOOK/environment/variables.txt | 10 +- .../jsons/UserLocationEventSubscription.json | 5 + .../UserLocationPeriodicSubscription.json | 8 + .../NotificationSubscriptionList.schema.json | 55 ++++ .../UserLocationEventSubscription.schema.json | 165 ++++++++++++ ...erLocationPeriodicSubscription.schema.json | 136 ++++++++++ 7 files changed, 569 insertions(+), 46 deletions(-) create mode 100644 MEC013/SRV/UELOCLOOK/jsons/UserLocationEventSubscription.json create mode 100644 MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json create mode 100644 MEC013/SRV/UELOCLOOK/schemas/NotificationSubscriptionList.schema.json create mode 100644 MEC013/SRV/UELOCLOOK/schemas/UserLocationEventSubscription.schema.json create mode 100644 MEC013/SRV/UELOCLOOK/schemas/UserLocationPeriodicSubscription.schema.json diff --git a/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot b/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot index fbe9841..db5cf88 100644 --- a/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot +++ b/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot @@ -8,90 +8,244 @@ Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem - +Library String Default Tags TC_MEC_SRV_UELOCLOOK -*** Variables *** -${response} - *** Test Cases *** - TC_MEC_MEC013_SRV_UELOCLOOK_001_OK [Documentation] - ... Check that the IUT responds with a list for the location of User Equipments + ... Check that the IUT responds with a list for the location of User Equipments ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.3 - ... OpenAPI https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo + ... Reference ETSI GS MEC 013 3.1.1, clause 5.3.2, + ... ETSI GS MEC 013 3.1.1, clause 7.5.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a subscription and get sub id UserLocationEventSubscription + 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_UELOCLOOK_002_OK_01 + [Documentation] + ... Check that the IUT responds with the subscription + ... when queried by a MEC Application - UE location Event + ... + ... Reference 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.5.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create multiple subscriptions and get sub ids UserLocationEventSubscription UserLocationPeriodicSubscription + Get subscriptions with filter subscription_type event + Check HTTP Response Status Code Is 200 + Should be Equal ${response['body']['subscription'][0]['subscriptionType']} UserLocationEventSubscription + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + [TearDown] Remove subscriptions ${SUB_ID_01} ${SUB_ID_02} + + + +TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_02 + [Documentation] + ... Check that the IUT responds with the subscription + ... when queried by a MEC Application - UE location Periodic + ... + ... Reference 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.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get list of user equipments zoneId ${ZONE_ID} + [Setup] Create multiple subscriptions and get sub ids UserLocationEventSubscription UserLocationPeriodicSubscription + Get subscriptions with filter subscription_type periodic Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is UserList - Check Result Contains ${response['body']['userList']['user']} zoneId ${ZONE_ID} + Should be Equal ${response['body']['subscription'][0]['subscriptionType']} UserLocationPeriodicSubscription + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + [TearDown] Remove subscriptions ${SUB_ID_01} ${SUB_ID_02} + + -TC_MEC_MEC013_SRV_UELOCLOOK_001_BR + +TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03 [Documentation] - ... Check that the IUT responds with an error when - ... a request with incorrect parameters is sent by a MEC Application + ... Check that the IUT responds with the subscription + ... when queried by a MEC Application - UE location Event and address + ... + ... Reference 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.5.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create multiple subscriptions and get sub ids UserLocationEventSubscription UserLocationPeriodicSubscription + Get subscriptions with filters subscription_type event address 10.0.0.4 + Check HTTP Response Status Code Is 200 + Should be Equal ${response['body']['subscription'][0]['subscriptionType']} UserLocationEventSubscription + Check HTTP Response Body Json Schema Is NotificationSubscriptionList + [TearDown] Remove subscriptions ${SUB_ID_01} ${SUB_ID_02} + + + +TP_MEC_MEC013_SRV_UELOCLOOK_002_BR + [Documentation] + ... Check that the IUT responds with an error when + ... inconsistent request was sent by a MEC Application - Invalid filter ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.3 + ... Reference 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.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get list of user equipments z0n3 ${ZONE_ID} + [Setup] Create multiple subscriptions and get sub ids UserLocationEventSubscription UserLocationPeriodicSubscription + Get subscriptions with filter subscription_type dummy Check HTTP Response Status Code Is 400 + [TearDown] Remove subscriptions ${SUB_ID_01} ${SUB_ID_02} + + + +TP_MEC_MEC013_SRV_UELOCLOOK_002_NF + [Documentation] + ... Check that the IUT responds with an error + ... when inconsistent request was sent by a MEC Application + ... Reference 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.5.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create multiple subscriptions and get sub ids UserLocationEventSubscription UserLocationPeriodicSubscription + Get subscriptions + Check HTTP Response Status Code Is 404 + [TearDown] Remove subscriptions ${SUB_ID_01} ${SUB_ID_02} + -TC_MEC_MEC013_SRV_UELOCLOOK_001_NF + +TP_MEC_MEC013_SRV_UELOCLOOK_003_OK_01 [Documentation] - ... Check that the IUT responds with an error when - ... a request for an unknown URI is sent by a MEC Application + ... Check that the IUT responds with the subscription + ... when queried by a MEC Application - UE location Event ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.2 + ... Reference 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 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get list of user equipments zoneId ${NON_EXISTENT_ZONE_ID} + [Setup] Create a subscription and get sub id UserLocationEventSubscription + Get subscription by identifier ${SUB_ID} Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserLocationEventSubscription + [TearDown] Remove subscription ${SUB_ID} + -TC_MEC_MEC013_SRV_UELOCLOOK_002_OK +TP_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 [Documentation] - ... Check that the IUT responds with a User Equipment information - ... when queried by a MEC Application + ... Check that the IUT responds with the subscription when queried by a MEC Application - UE location Periodic ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.2 - ... OpenAPI https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo + ... Reference 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 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Log Deprecated - # Get specific user equipments ${USER_ID} - # Check HTTP Response Status Code Is 200 - # Check HTTP Response Body Json Schema Is UserInfo + [Setup] Create a subscription and get sub id UserLocationPeriodicSubscription + Get subscription by identifier ${SUB_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserLocationPeriodicSubscription + [TearDown] Remove subscription ${SUB_ID} -TC_MEC_MEC013_SRV_UELOCLOOK_002_NF + +TP_MEC_MEC013_SRV_UELOCLOOK_003_NF [Documentation] - ... Check that the IUT responds with an error when - ... a request for an unknown URI is sent by a MEC Application + ... Check that the IUT responds with an error + ... when the non existing subscription is queried by a MEC Application ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.2 + ... Reference 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 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get specific user equipments ${NON_EXISTENT_USER_ID} + [Setup] Remove subscription ${NON_EXISTING_SUBSCRIPTION_ID} + Get subscription by identifier ${NON_EXISTING_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 + + *** Keywords *** -Get list of user equipments - [Arguments] ${key} ${value} +Create a subscription and get sub id + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users ${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 and get sub ids + [Arguments] ${content} ${content2} + Create a subscription and get sub id ${content} + Set Suite Variable ${SUB_ID_01} ${SUB_ID} + Create a subscription and get sub id ${content2} + Set Suite Variable ${SUB_ID_02} ${SUB_ID} + + +Remove subscriptions + [Arguments] ${subscription_id01} ${subscription_id02} + Remove subscription ${subscription_id01} + Remove subscription ${subscription_id02} + + +Remove subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get subscription by identifier + [Arguments] ${subscriptionId} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get subscriptions Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/queries/users?${key}=${value} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users ${output}= Output response Set Suite Variable ${response} ${output} -Get specific user equipments - [Arguments] ${userId} +Get subscriptions with filter + [Arguments] ${filter_name} ${filter_value} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/queries/users/${userId} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users?${filter_name}=${filter_value} ${output}= Output response Set Suite Variable ${response} ${output} + + + +Get subscriptions with filters + [Arguments] ${filter_name01} ${filter_value01} ${filter_name02} ${filter_value02} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users?${filter_name01}=${filter_value01}&${filter_name02}=${filter_value02} + ${output}= Output response + Set Suite Variable ${response} ${output} + diff --git a/MEC013/SRV/UELOCLOOK/environment/variables.txt b/MEC013/SRV/UELOCLOOK/environment/variables.txt index 940607b..0d2e21a 100644 --- a/MEC013/SRV/UELOCLOOK/environment/variables.txt +++ b/MEC013/SRV/UELOCLOOK/environment/variables.txt @@ -1,13 +1,13 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.30.7.120 -${PORT} 30007 +${HOST} 127.0.0.2 +${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${apiRoot} etsi-013 +${apiRoot} ${apiName} location -${apiVersion} v2 +${apiVersion} v3 # Specific variables ${ZONE_ID} zone1 @@ -15,4 +15,4 @@ ${NON_EXISTENT_ZONE_ID} NON_EXISTENT_ZONE_ID ${USER_ID} ue1 ${NON_EXISTENT_USER_ID} NON_EXISTENT_USER_ID - +${NON_EXISTING_SUBSCRIPTION_ID} NON_EXISTING_SUBSCRIPTION_ID diff --git a/MEC013/SRV/UELOCLOOK/jsons/UserLocationEventSubscription.json b/MEC013/SRV/UELOCLOOK/jsons/UserLocationEventSubscription.json new file mode 100644 index 0000000..2d8961c --- /dev/null +++ b/MEC013/SRV/UELOCLOOK/jsons/UserLocationEventSubscription.json @@ -0,0 +1,5 @@ +{ + "subscriptionType": "UserLocationEventSubscription", + "address": "acr:10.0.0.1", + "callbackReference": "http://10.3.0.0.8:8888" +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json b/MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json new file mode 100644 index 0000000..b2c76fa --- /dev/null +++ b/MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json @@ -0,0 +1,8 @@ +{ + "subscriptionType": "UserLocationPeriodicSubscription", + "address": "acr:10.0.4.3", + "periodicEventInfo": { + "reportingAmount": 10, + "reportingInterval": 5 + } +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCLOOK/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UELOCLOOK/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000..4b24531 --- /dev/null +++ b/MEC013/SRV/UELOCLOOK/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/UELOCLOOK/schemas/UserLocationEventSubscription.schema.json b/MEC013/SRV/UELOCLOOK/schemas/UserLocationEventSubscription.schema.json new file mode 100644 index 0000000..6d81787 --- /dev/null +++ b/MEC013/SRV/UELOCLOOK/schemas/UserLocationEventSubscription.schema.json @@ -0,0 +1,165 @@ +{ + "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)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "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 (these apply to address specified). ", + "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)" + }, + "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 \"UserLocationEventSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "userEventPara": { + "properties": { + "accessPointList": { + "description": "One or more access points forming a monitoring area that could be any shape. See note 1.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array(String)" + }, + "occurrenceInfo": { + "description": "The enumeration OccurrenceInfo indicates whether event reporting is one time.", + "enum": [ + "ONE_TIME_EVENT", + "MULTIPLE_TIME_EVENT" + ], + "type": "string" + }, + "reportingLocationReq": { + "description": "This IE shall be set to true if a location estimate is required for each event report.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "boolean" + }, + "zoneId": { + "description": "Identifier of zone (e.g. zone001) to monitor. See note 1.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-notes": "NOTE 1:\tOnly one of accessPointList and zoneId may be present.\nNOTE 2:\tAs specified in [17], clause 6.1.6.3.16.", + "x-etsi-ref": "6.5.5" + }, + "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" + } + }, + "required": [ + "subscriptionType", + "address" + ], + "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.4" + } \ No newline at end of file diff --git a/MEC013/SRV/UELOCLOOK/schemas/UserLocationPeriodicSubscription.schema.json b/MEC013/SRV/UELOCLOOK/schemas/UserLocationPeriodicSubscription.schema.json new file mode 100644 index 0000000..0ef5244 --- /dev/null +++ b/MEC013/SRV/UELOCLOOK/schemas/UserLocationPeriodicSubscription.schema.json @@ -0,0 +1,136 @@ +{ + "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)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "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" + }, + "periodicEventInfo": { + "description": "NOTE: reportingAmount x reportingInterval shall not exceed 8639999 (99 days, 23 hours, 59 minutes and 59 seconds) for compatibility with OMA MLP and RLP.", + "type": "object", + "required": [ + "reportingAmount", + "reportingInterval" + ], + "properties": { + "reportingAmount": { + "description": "Number of event reports", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "ReportingAmount" + }, + "reportingInterval": { + "description": "Interval of event reports", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "reportingInterval" + } + } + }, + "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 \"UserLocationPeriodicSubscription\".", + "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" + } + }, + "required": [ + "subscriptionType", + "address", + "periodicEventInfo" + ], + "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 [17], clause 6.1.6.2.24.", + "x-etsi-ref": "6.3.5" + } \ No newline at end of file -- GitLab From a205dae25ee34ac73f628a13924f88e24aaf8b1b Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 12 Jan 2024 17:17:38 +0100 Subject: [PATCH 48/94] MEC013 v3.1.1 UELOCSUB Draft TCs available --- .../UELOCSUB/PlatUeLocationSubscription.robot | 265 ++++++-- MEC013/SRV/UELOCSUB/environment/variables.txt | 14 +- .../jsons/UserLocationEventNotification.json | 16 + .../jsons/UserLocationEventSubscription.json | 6 + .../UserLocationEventSubscriptionBR.json | 5 + .../UserLocationEventSubscriptionUpdate.json | 6 + ...UserLocationEventSubscriptionUpdateBR.json | 5 + .../UserLocationPeriodicNotification.json | 18 + .../UserLocationPeriodicSubscription.json | 10 + .../UserLocationPeriodicSubscriptionBR.json | 9 + ...serLocationPeriodicSubscriptionUpdate.json | 10 + .../jsons/UserTrackingSubscription.json | 10 - .../jsons/UserTrackingSubscriptionError.json | 10 - MEC013/SRV/UELOCSUB/libraries/Server.py | 149 +++++ .../UserLocationEventNotification.schema.json | 559 +++++++++++++++++ .../UserLocationEventSubscription.schema.json | 165 +++++ ...erLocationPeriodicNotification.schema.json | 565 ++++++++++++++++++ ...erLocationPeriodicSubscription.schema.json | 136 +++++ .../UserTrackingSubscription.schema.json | 74 --- ...serTrackingSubscription.schema.v1.1.1.json | 77 --- 20 files changed, 1882 insertions(+), 227 deletions(-) create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationEventNotification.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscription.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionBR.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdate.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdateBR.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicNotification.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscription.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionBR.json create mode 100644 MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionUpdate.json delete mode 100644 MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscription.json delete mode 100644 MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json create mode 100644 MEC013/SRV/UELOCSUB/libraries/Server.py create mode 100644 MEC013/SRV/UELOCSUB/schemas/UserLocationEventNotification.schema.json create mode 100644 MEC013/SRV/UELOCSUB/schemas/UserLocationEventSubscription.schema.json create mode 100644 MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicNotification.schema.json create mode 100644 MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicSubscription.schema.json delete mode 100644 MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json delete mode 100644 MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json diff --git a/MEC013/SRV/UELOCSUB/PlatUeLocationSubscription.robot b/MEC013/SRV/UELOCSUB/PlatUeLocationSubscription.robot index ec1cbae..32f9d0f 100644 --- a/MEC013/SRV/UELOCSUB/PlatUeLocationSubscription.robot +++ b/MEC013/SRV/UELOCSUB/PlatUeLocationSubscription.robot @@ -8,98 +8,257 @@ Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem - +Library String +Library libraries/Server.py Default Tags TC_MEC_SRV_UELOCSUB -*** Variables *** -${response} - *** Test Cases *** - -TC_MEC_MEC013_SRV_UELOCSUB_001_OK +TC_MEC_MEC013_SRV_UELOCSUB_001_OK_01 [Documentation] - ... Check that the IUT acknowledges the UE location change subscription request - ... when commanded by a MEC Application and notifies it when the location changes + ... Check that the IUT acknowledges the subscription by a MEC Application to notifications user location event ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.4 - ... OpenAPI https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserTrackingSubscription - + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.5.3.4 + ... [Tags] PIC_MEC_PLAT PIC_SERVICES - Create new subscription UserTrackingSubscription + Create a subscription UserLocationEventSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is UserTrackingSubscription - # TODO fix related TP - # Check Result Contains ${response['body']['userTrackingSubscription']} clientCorrelator ${USERTRACKSUB_CLIENT_ID} - Should Be Equal As Strings ${response['body']['userTrackingSubscription']['callbackReference']} ${USERTRACK_NOTIF_CALLBACK_URI} - Should Be Equal As Strings ${response['body']['userTrackingSubscription']['address']} ${USERTRACK_IP_ADDRESS} - - # TODO how to send this? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? - # // MEC 013, clause 7.3.4.3 - # the IUT entity sends a vPOST containing - # Uri set to CALLBACK_URL - # body containing - # zonalPresenceNotification containing - # clientCorrelator set to CLIENT_ID, - # address set to IP_ADDRESS - # ; - # ; - # ; - # to the MEC_APP entity - -TC_MEC_MEC013_SRV_UELOCSUB_001_BR + Check HTTP Response Body Json Schema Is UserLocationEventSubscription + Get value entry from JSON file UserLocationEventSubscription subscriptionType + ${CLIENT_CORR} Get value entry from JSON file UserLocationEventSubscription clientCorrelator + ${CALLBACK_REF} Get value entry from JSON file UserLocationEventSubscription callbackReference + ${ADDRESS} Get value entry from JSON file UserLocationEventSubscription address + Should be Equal ${response['body']['subscriptionType']} UserLocationEventSubscription + Should be Equal ${response['body']['clientCorrelator']} ${CLIENT_CORR} + Should be Equal ${response['body']['callbackReference']} ${CALLBACK_REF} + Should be Equal ${response['body']['address']} ${ADDRESS} + Spawn Notification Server UserLocationEventNotification + Validate Json UserLocationEventNotification.schema.json ${payload_notification} + [TearDown] Remove a subscription ${SUB_ID} + + + +TC_MEC_MEC013_SRV_UELOCSUB_001_OK_02 [Documentation] - ... Check that the IUT responds with an error when - ... a request with incorrect parameters is sent by a MEC Application + ... Check that the IUT acknowledges the subscription by a MEC Application to notifications user location periodic ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.4 + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.5 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.5.3.4 + ... + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a subscription UserLocationPeriodicSubscription + Check HTTP Response Status Code Is 201 + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Check HTTP Response Body Json Schema Is UserLocationPeriodicSubscription + Get value entry from JSON file UserLocationPeriodicSubscription subscriptionType + ${CLIENT_CORR} Get value entry from JSON file UserLocationPeriodicSubscription clientCorrelator + ${CALLBACK_REF} Get value entry from JSON file UserLocationPeriodicSubscription callbackReference + ${ADDRESS} Get value entry from JSON file UserLocationPeriodicSubscription address + ${PER_EVENT_INFO} Get value entry from JSON file UserLocationPeriodicSubscription periodicEventInfo + Should be Equal ${response['body']['subscriptionType']} UserLocationPeriodicSubscription + Should be Equal ${response['body']['clientCorrelator']} ${CLIENT_CORR} + Should be Equal ${response['body']['callbackReference']} ${CALLBACK_REF} + Should be Equal ${response['body']['address']} ${ADDRESS} + Should be Equal ${response['body']['periodicEventInfo']} ${PER_EVENT_INFO} + Spawn Notification Server UserLocationPeriodicNotification + Validate Json UserLocationPeriodicNotification.schema.json ${payload_notification} + [TearDown] Remove a subscription ${SUB_ID} + +TC_MEC_MEC013_SRV_UELOCSUB_001_BR_01 + [Documentation] + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.5.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES - Create new subscription UserTrackingSubscriptionError + Create a subscription UserLocationEventSubscriptionBR Check HTTP Response Status Code Is 400 +TC_MEC_MEC013_SRV_UELOCSUB_001_BR_02 + [Documentation] + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.5 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.5.3.4 + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create a subscription UserLocationPeriodicSubscriptionBR + Check HTTP Response Status Code Is 400 + TC_MEC_MEC013_SRV_UELOCSUB_002_OK [Documentation] - ... Check that the IUT acknowledges the cancellation of UE location change notifications + ... Check that the IUT acknowledges the cancellation of UE information change notifications ... when commanded by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 - + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 5.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${SUBSCRIPTION_ID} + [Setup] Create a subscription UserLocationEventSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Remove a subscription ${SUB_ID} Check HTTP Response Status Code Is 204 TC_MEC_MEC013_SRV_UELOCSUB_002_NF [Documentation] - ... Check that the IUT responds with an error when - ... a request for an unknown URI is sent by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 - + ... Check that the IUT responds with an error + ... when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 5.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + [Setup] Remove a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Remove a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 + + + +TC_MEC_MEC013_SRV_UELOCSUB_003_OK_01 + [Documentation] + ... Check that the IUT acknowledges a request + ... to modify an existing subscription by a MEC Application + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a subscription UserLocationEventSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Update a subscription ${SUB_ID} UserLocationEventSubscriptionUpdate + ${CLIENT_CORR} Get value entry from JSON file UserLocationEventSubscriptionUpdate clientCorrelator + ${CALLBACK_REF} Get value entry from JSON file UserLocationEventSubscriptionUpdate callbackReference + ${ADDRESS} Get value entry from JSON file UserLocationEventSubscriptionUpdate address + Should be Equal ${response['body']['subscriptionType']} UserLocationEventSubscription + Should be Equal ${response['body']['clientCorrelator']} ${CLIENT_CORR} + Should be Equal ${response['body']['callbackReference']} ${CALLBACK_REF} + Should be Equal ${response['body']['address']} ${ADDRESS} + Check HTTP Response Status Code Is 200 + [TearDown] Remove a subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UELOCSUB_003_OK_02 + [Documentation] + ... Check that the IUT acknowledges a request to modify an existing subscription by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a subscription UserLocationPeriodicSubscription + + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + + Update a subscription ${SUB_ID} UserLocationPeriodicSubscriptionUpdate + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is UserLocationPeriodicSubscription + ${CLIENT_CORR} Get value entry from JSON file UserLocationPeriodicSubscriptionUpdate clientCorrelator + ${CALLBACK_REF} Get value entry from JSON file UserLocationPeriodicSubscriptionUpdate callbackReference + ${ADDRESS} Get value entry from JSON file UserLocationPeriodicSubscriptionUpdate address + ${PER_EVENT_INFO} Get value entry from JSON file UserLocationPeriodicSubscriptionUpdate periodicEventInfo + Should be Equal ${response['body']['subscriptionType']} UserLocationPeriodicSubscription + Should be Equal ${response['body']['clientCorrelator']} ${CLIENT_CORR} + Should be Equal ${response['body']['callbackReference']} ${CALLBACK_REF} + Should be Equal ${response['body']['address']} ${ADDRESS} + Should be Equal ${response['body']['periodicEventInfo']} ${PER_EVENT_INFO} + [TearDown] Remove a subscription ${SUB_ID} + +TC_MEC_MEC013_SRV_UELOCSUB_003_BR_02 + [Documentation] + ... Check that the IUT responds with an error when received an inconsistent request + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a subscription UserLocationPeriodicSubscription + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + Update a subscription ${SUB_ID} UserLocationEventSubscriptionUpdateBR + Check HTTP Response Status Code Is 400 + [TearDown] Remove a subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UELOCSUB_003_NF + [Documentation] + ... Check that the IUT acknowledges a request to modify a not existing subscription by a MEC Application + ... Reference ETSI GS MEC 013 3.1.1 Clause 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.4 + ... ETSI GS MEC 013 3.1.1 Clause 7.6.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Remove a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Update a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} UserLocationEventSubscriptionUpdate + Check HTTP Response Status Code Is 404 + *** Keywords *** -Create new subscription +Create a subscription [Arguments] ${content} Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/userTracking ${body} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users ${body} ${output}= Output response Set Suite Variable ${response} ${output} -Remove subscription - [Arguments] ${subscriptionId} + +Update a subscription + [Arguments] ${subscription_id} ${content} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/userTracking/${subscriptionId} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users/${subscription_id} ${body} ${output}= Output response Set Suite Variable ${response} ${output} + + +Retrieve a subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Remove a subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + + +Spawn Notification Server + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + ${length} = Get Length ${output} + Set Suite Variable ${payload_notification} ${output} + Run Keyword If ${length} == 0 Skip + + \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/environment/variables.txt b/MEC013/SRV/UELOCSUB/environment/variables.txt index 3881d38..9ba08ce 100644 --- a/MEC013/SRV/UELOCSUB/environment/variables.txt +++ b/MEC013/SRV/UELOCSUB/environment/variables.txt @@ -1,13 +1,13 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} location -${apiVersion} v2 +${apiVersion} v3 # Specific variables ${USERTRACKSUB_CLIENT_ID} 0123 @@ -15,4 +15,12 @@ ${USERTRACK_NOTIF_CALLBACK_URI} {"notifyURL": "http://clientApp.example.com ${USERTRACK_IP_ADDRESS} acr:10.0.0.1 ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID \ No newline at end of file +${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID + + +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationEventNotification.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventNotification.json new file mode 100644 index 0000000..cab199e --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventNotification.json @@ -0,0 +1,16 @@ +{ + "notificationType": "UserLocationEventNotification", + "timestamp": { + "seconds": 1673507343, + "nanoseconds": 0 + }, + "address": "acr:10.0.0.1", + "userLocationEvent": "ENTERING_AREA_EVENT", + "zoneId": "zone01", + "accessPointId": "001010000000000000000000000000001", + "_links": { + "subscription": { + "href": "http://meAppServer.example.com/location/v3/subscriptions/user/subscription123" + } + } + } \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscription.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscription.json new file mode 100644 index 0000000..48ccf95 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscription.json @@ -0,0 +1,6 @@ +{ + "subscriptionType": "UserLocationEventSubscription", + "clientCorrelator":"someCorrelator", + "address": "acr:10.0.0.1", + "callbackReference": "http://10.3.0.0.8:8888" +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionBR.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionBR.json new file mode 100644 index 0000000..78d0460 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionBR.json @@ -0,0 +1,5 @@ +{ + "subscriptionType": "UserLocationEventSubscription", + "clientCorrelator":"someCorrelator", + "address": "acr:10.0.0.1" +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdate.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdate.json new file mode 100644 index 0000000..d19ee4e --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdate.json @@ -0,0 +1,6 @@ +{ + "subscriptionType": "UserLocationEventSubscription", + "clientCorrelator":"someCorrelator", + "address": "acr:10.0.0.1", + "callbackReference": "http://10.3.0.0.9:8888" +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdateBR.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdateBR.json new file mode 100644 index 0000000..78d0460 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationEventSubscriptionUpdateBR.json @@ -0,0 +1,5 @@ +{ + "subscriptionType": "UserLocationEventSubscription", + "clientCorrelator":"someCorrelator", + "address": "acr:10.0.0.1" +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicNotification.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicNotification.json new file mode 100644 index 0000000..bc3f854 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicNotification.json @@ -0,0 +1,18 @@ +{ + "notificationType": "UserLocationPeriodicNotification", + "result": "SUCCESS", + "locationInfo": { + "latitude": [ + 50.5 + ], + "longitude": [ + 47.5 + ], + "shape": 1 + }, + "_links": { + "self": { + "href": "http://someip.com/subscriptions/users/subscriptionPeriodicId" + } + } +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscription.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscription.json new file mode 100644 index 0000000..5c7389f --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscription.json @@ -0,0 +1,10 @@ +{ + "subscriptionType": "UserLocationPeriodicSubscription", + "callbackReference": "http://10.3.0.0.8:8888", + "clientCorrelator":"clientCorrelatorInfo", + "address": "acr:10.0.4.3", + "periodicEventInfo": { + "reportingAmount": 10, + "reportingInterval": 5 + } +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionBR.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionBR.json new file mode 100644 index 0000000..ca6c250 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionBR.json @@ -0,0 +1,9 @@ +{ + "subscriptionType": "UserLocationPeriodicSubscription", + "clientCorrelator":"clientCorrelatorInfo", + "address": "acr:10.0.4.3", + "periodicEventInfo": { + "reportingAmount": 10, + "reportingInterval": 5 + } +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionUpdate.json b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionUpdate.json new file mode 100644 index 0000000..9fb7ef4 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/jsons/UserLocationPeriodicSubscriptionUpdate.json @@ -0,0 +1,10 @@ +{ + "subscriptionType": "UserLocationPeriodicSubscription", + "callbackReference": "http://10.3.0.0.10:8888", + "clientCorrelator":"clientCorrelatorInfo", + "address": "acr:10.0.4.3", + "periodicEventInfo": { + "reportingAmount": 10, + "reportingInterval": 5 + } +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscription.json b/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscription.json deleted file mode 100644 index a5eb08d..0000000 --- a/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscription.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "userTrackingSubscription": { - "clientCorrelator": "0123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "userEventCriteria": "Transferring" - } -} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json b/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json deleted file mode 100644 index d2f9470..0000000 --- a/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "userTrackingSubscription": { - "client": "0123", - "callbackReference": { - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "address": "acr:10.0.0.1", - "userEventCriteria": "Transferring" - } -} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/libraries/Server.py b/MEC013/SRV/UELOCSUB/libraries/Server.py new file mode 100644 index 0000000..e4e2298 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/libraries/Server.py @@ -0,0 +1,149 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + ## If a notification is received, then is returned. Otherwise an empty dictionary. + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + + ##OLD mechanism commented: if no response is received, then read the Notification JSON file and return it. + + #notification_json= import_notification_json(self.handler.get_resp_body()) + #return notification_json + return {} + diff --git a/MEC013/SRV/UELOCSUB/schemas/UserLocationEventNotification.schema.json b/MEC013/SRV/UELOCSUB/schemas/UserLocationEventNotification.schema.json new file mode 100644 index 0000000..0bc9e09 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/schemas/UserLocationEventNotification.schema.json @@ -0,0 +1,559 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "subscription": { + "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": [ + "subscription" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "accessPointId": { + "description": "The identity of the access point.\nFor the events of \"ENTERING_AREA_EVENT\", it indicates the access point that the user is currently within. \nFor the event of \"LEAVING_AREA_EVENT\", it indicates the access point that the user used to be within.\nSee note 2.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI).", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uri" + }, + "civicInfo": { + "description": "Indicates a Civic address", + "type": "object", + "required": [ + "country" + ], + "properties": { + "country": { + "description": "The two-letter ISO 3166 country code in capital ASCII letters, e.g., DE or US", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "String" + }, + "A1": { + "description": "National subdivisions (state, canton, region, province, prefecture)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A5": { + "description": "Neighbourhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A6": { + "description": "Group of streets below the neighbourhood level", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRD": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POD": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "STS": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNO": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNS": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LMK": { + "description": "Landmark or vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LOC": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "NAM": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PC": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "BLD": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "UNIT": { + "description": "Unit (apartment, suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "FLR": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ROOM": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PLC": { + "description": "Place-type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PCN": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POBOX": { + "description": "Post office box (P.O. box)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ADDCODE": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "SEAT": { + "description": "Seat (desk, cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RD": { + "description": "Primary road or street", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSEC": { + "description": "Road clause", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDBR": { + "description": "Road branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSUBBR": { + "description": "Road sub-branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRM": { + "description": "Road pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POM": { + "description": "Road post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "usageRules": { + "description": "When present, this IE shall carry the value of \"usagerules\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "method": { + "description": "When present, this IE shall contain the method token, carried by the \"method\" Element of the PIDLLO XML document.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "providedBy": { + "description": "When present, this IE shall carry the value of \"provided-by\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "notificationType": { + "description": "Shall be set to \"UserLocationEventNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "relativeLocationInfo": { + "properties": { + "X": { + "description": "Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system. Positive value represents easting from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Y": { + "description": "Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system. Positive value represents northing from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Z": { + "description": "Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3DPoint. Positive value represents height above origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "mapInfo": { + "properties": { + "ancillaryMapInfo": { + "description": "Ancillary map information may be used to convert coordinates between different coordinate systems.", + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Not_specified" + }, + "mapId": { + "description": "Indicates the ID of the map. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "origin": { + "description": "Indicates the location of the map origin in the local Cartesian coordinate system.", + "properties": { + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure(inlined)" + } + }, + "required": [ + "mapId" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } + }, + "required": [ + "mapInfo", + "X", + "Y" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + }, + "timeStamp": { + "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" + }, + "userLocationEvent": { + "description": "This type represents specified event types for UE location report.", + "enum": [ + "ENTERING_AREA_EVENT", + "LEAVING_AREA_EVENT" + ], + "type": "string" + }, + "zoneId": { + "description": "The identity of the zone. \nFor the events of \"ENTERING_AREA_EVENT\", it is the zone that the user is currently within. \nFor the event of \"LEAVING_AREA_EVENT\", it is the zone that the user used to be within.\nSee note 2.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "notificationType", + "userLocationEvent", + "_links" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [17], clause 6.1.6.2.14.\nNOTE 2:\tAs specified in [5], clause 5.2.2.7.\nNOTE 3:\tAt least one of these attributes shall be present only when reportingLocationReq is set to TRUE in the UserLocationEventSubscription.", + "x-etsi-ref": "6.4.4" +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/schemas/UserLocationEventSubscription.schema.json b/MEC013/SRV/UELOCSUB/schemas/UserLocationEventSubscription.schema.json new file mode 100644 index 0000000..6d81787 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/schemas/UserLocationEventSubscription.schema.json @@ -0,0 +1,165 @@ +{ + "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)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "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 (these apply to address specified). ", + "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)" + }, + "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 \"UserLocationEventSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "userEventPara": { + "properties": { + "accessPointList": { + "description": "One or more access points forming a monitoring area that could be any shape. See note 1.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Array(String)" + }, + "occurrenceInfo": { + "description": "The enumeration OccurrenceInfo indicates whether event reporting is one time.", + "enum": [ + "ONE_TIME_EVENT", + "MULTIPLE_TIME_EVENT" + ], + "type": "string" + }, + "reportingLocationReq": { + "description": "This IE shall be set to true if a location estimate is required for each event report.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "boolean" + }, + "zoneId": { + "description": "Identifier of zone (e.g. zone001) to monitor. See note 1.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-notes": "NOTE 1:\tOnly one of accessPointList and zoneId may be present.\nNOTE 2:\tAs specified in [17], clause 6.1.6.3.16.", + "x-etsi-ref": "6.5.5" + }, + "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" + } + }, + "required": [ + "subscriptionType", + "address" + ], + "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.4" + } \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicNotification.schema.json b/MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicNotification.schema.json new file mode 100644 index 0000000..0894d2a --- /dev/null +++ b/MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicNotification.schema.json @@ -0,0 +1,565 @@ +{ + "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)" + }, + "accessPointId": { + "description": "The identity of the access point that the user is currently within. \nSee note 2.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI).", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uri" + }, + "civicInfo": { + "description": "Indicates a Civic address", + "type": "object", + "required": [ + "country" + ], + "properties": { + "country": { + "description": "The two-letter ISO 3166 country code in capital ASCII letters, e.g., DE or US", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "String" + }, + "A1": { + "description": "National subdivisions (state, canton, region, province, prefecture)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A5": { + "description": "Neighbourhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A6": { + "description": "Group of streets below the neighbourhood level", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRD": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POD": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "STS": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNO": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNS": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LMK": { + "description": "Landmark or vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LOC": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "NAM": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PC": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "BLD": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "UNIT": { + "description": "Unit (apartment, suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "FLR": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ROOM": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PLC": { + "description": "Place-type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PCN": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POBOX": { + "description": "Post office box (P.O. box)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ADDCODE": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "SEAT": { + "description": "Seat (desk, cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RD": { + "description": "Primary road or street", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSEC": { + "description": "Road clause", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDBR": { + "description": "Road branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSUBBR": { + "description": "Road sub-branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRM": { + "description": "Road pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POM": { + "description": "Road post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "usageRules": { + "description": "When present, this IE shall carry the value of \"usagerules\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "method": { + "description": "When present, this IE shall contain the method token, carried by the \"method\" Element of the PIDLLO XML document.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "providedBy": { + "description": "When present, this IE shall carry the value of \"provided-by\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "isFinalNotification": { + "description": "Shall be set to true if it is a final notification.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "notificationType": { + "description": "Shall be set to \"UserLocationPeriodicNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "relativeLocationInfo": { + "properties": { + "X": { + "description": "Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system. Positive value represents easting from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Y": { + "description": "Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system. Positive value represents northing from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Z": { + "description": "Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3DPoint. Positive value represents height above origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "mapInfo": { + "properties": { + "ancillaryMapInfo": { + "description": "Ancillary map information may be used to convert coordinates between different coordinate systems.", + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Not_specified" + }, + "mapId": { + "description": "Indicates the ID of the map. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "origin": { + "description": "Indicates the location of the map origin in the local Cartesian coordinate system.", + "properties": { + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure(inlined)" + } + }, + "required": [ + "mapId" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } + }, + "required": [ + "mapInfo", + "X", + "Y" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + }, + "result": { + "description": "This enumeration represents the result of a localization associated with a notification", + "enum": [ + "SUCCESS", + "ABNORMAL" + ], + "type": "string" + }, + "timeStamp": { + "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" + }, + "zoneId": { + "description": "The identity of the zone that the user is currently within. \nSee note 2.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "notificationType", + "result", + "_links" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [17], clause 6.1.6.2.14.\nNOTE 2:\tAs specified in [5], clause 5.2.2.7.\nNOTE 3:\tIf the result is SUCCESS, at least one of locationInfo, civicInfo and relativeLocationInfo shall be present.", + "x-etsi-ref": "6.4.5" + } \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicSubscription.schema.json b/MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicSubscription.schema.json new file mode 100644 index 0000000..0ef5244 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/schemas/UserLocationPeriodicSubscription.schema.json @@ -0,0 +1,136 @@ +{ + "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)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI) to monitor.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "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" + }, + "periodicEventInfo": { + "description": "NOTE: reportingAmount x reportingInterval shall not exceed 8639999 (99 days, 23 hours, 59 minutes and 59 seconds) for compatibility with OMA MLP and RLP.", + "type": "object", + "required": [ + "reportingAmount", + "reportingInterval" + ], + "properties": { + "reportingAmount": { + "description": "Number of event reports", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "ReportingAmount" + }, + "reportingInterval": { + "description": "Interval of event reports", + "type": "number", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "reportingInterval" + } + } + }, + "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 \"UserLocationPeriodicSubscription\".", + "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" + } + }, + "required": [ + "subscriptionType", + "address", + "periodicEventInfo" + ], + "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 [17], clause 6.1.6.2.24.", + "x-etsi-ref": "6.3.5" + } \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json b/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json deleted file mode 100644 index 6e2231a..0000000 --- a/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json +++ /dev/null @@ -1,74 +0,0 @@ -{ - "type": "object", - "properties": { - "userTrackingSubscription": { - "description": "A type containing user tracking subscription.", - "properties": { - "address": { - "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - } - }, - "required": [ - "callbackReference", - "address" - ], - "type": "object" - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json b/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json deleted file mode 100644 index c7e590d..0000000 --- a/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json +++ /dev/null @@ -1,77 +0,0 @@ -{ - "definitions": {}, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://example.com/object1575044080.json", - "title": "Root", - "type": "object", - "required": [ - "userTrackingSubscription" - ], - "properties": { - "userTrackingSubscription": { - "$id": "#root/userTrackingSubscription", - "title": "Usertrackingsubscription", - "type": "object", - "required": [ - "clientCorrelator", - "callbackReference", - "address", - "userEventCriteria" - ], - "properties": { - "clientCorrelator": { - "$id": "#root/userTrackingSubscription/clientCorrelator", - "title": "Clientcorrelator", - "type": "string", - "default": "", - "examples": [ - "0123" - ], - "pattern": "^.*$" - }, - "callbackReference": { - "$id": "#root/userTrackingSubscription/callbackReference", - "title": "Callbackreference", - "type": "object", - "required": [ - "notifyURL" - ], - "properties": { - "notifyURL": { - "$id": "#root/userTrackingSubscription/callbackReference/notifyURL", - "title": "Notifyurl", - "type": "string", - "default": "", - "examples": [ - "http://clientApp.example.com/location_notifications/123456" - ], - "pattern": "^.*$" - } - } - } -, - "address": { - "$id": "#root/userTrackingSubscription/address", - "title": "Address", - "type": "string", - "default": "", - "examples": [ - "acr:10.0.0.1" - ], - "pattern": "^.*$" - }, - "userEventCriteria": { - "$id": "#root/userTrackingSubscription/userEventCriteria", - "title": "Usereventcriteria", - "type": "string", - "default": "", - "examples": [ - "Transferring" - ], - "pattern": "^.*$" - } - } - } - - } -} -- GitLab From b3cb1899dc29d335e82dab4431dae2d324eb741f Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 12 Jan 2024 18:50:36 +0100 Subject: [PATCH 49/94] MEC013 v3.1.1 UETESTNOT Draft TCs available --- .../UETESTNOT/PlatUeTestSubscription.robot | 101 ++++ MEC013/SRV/UETESTNOT/README.md | 0 .../SRV/UETESTNOT/environment/variables.txt | 21 + .../SRV/UETESTNOT/jsons/TestNotification.json | 8 + .../UETESTNOT/jsons/UserAreaNotification.json | 12 + .../UETESTNOT/jsons/UserAreaSubscription.json | 29 + .../jsons/UserLocationEventSubscription.json | 7 + MEC013/SRV/UETESTNOT/libraries/Server.py | 149 +++++ .../schemas/TestNotification.schema.json | 43 ++ .../schemas/UserAreaNotification.schema.json | 539 ++++++++++++++++++ 10 files changed, 909 insertions(+) create mode 100644 MEC013/SRV/UETESTNOT/PlatUeTestSubscription.robot create mode 100644 MEC013/SRV/UETESTNOT/README.md create mode 100644 MEC013/SRV/UETESTNOT/environment/variables.txt create mode 100644 MEC013/SRV/UETESTNOT/jsons/TestNotification.json create mode 100644 MEC013/SRV/UETESTNOT/jsons/UserAreaNotification.json create mode 100644 MEC013/SRV/UETESTNOT/jsons/UserAreaSubscription.json create mode 100644 MEC013/SRV/UETESTNOT/jsons/UserLocationEventSubscription.json create mode 100644 MEC013/SRV/UETESTNOT/libraries/Server.py create mode 100644 MEC013/SRV/UETESTNOT/schemas/TestNotification.schema.json create mode 100644 MEC013/SRV/UETESTNOT/schemas/UserAreaNotification.schema.json diff --git a/MEC013/SRV/UETESTNOT/PlatUeTestSubscription.robot b/MEC013/SRV/UETESTNOT/PlatUeTestSubscription.robot new file mode 100644 index 0000000..a2f1324 --- /dev/null +++ b/MEC013/SRV/UETESTNOT/PlatUeTestSubscription.robot @@ -0,0 +1,101 @@ +*** Settings *** + +Documentation +... A test suite for validating UE Test Notification (UETESTNOT) operations. + +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt +Resource environment/variables.txt +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem +Library String +Library libraries/Server.py +Default Tags TC_MEC_SRV_UELOCSUB + + +*** Test Cases *** +TC_MEC_MEC013_SRV_UETESTNOT_001_OK + [Documentation] + ... Check that the IUT provides a test notification when requested by a MEC Application + ... + ... ETSI GS MEC 013 3.1.1 Clause 5.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.4 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.3 + ... ETSI GS MEC 013 3.1.1 Clause 7.5.3.4 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create an UserLocationEvent subscription and get sub id UserLocationEventSubscription + Spawn Notification Server TestNotification + Validate Json TestNotification.schema.json ${payload_notification} + [TearDown] Remove an UserLocationEvent subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UETESTNOT_002_OK + [Documentation] + ... Check that the IUT terminates notifications after time expiration + ... + ... ETSI GS MEC 013 3.1.1 Clause 5.3.11 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.8 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 + ... ETSI GS MEC 013 3.1.1 Clause 7.16.3.4 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create an UserArea subscription and get sub id UserAreaSubscription + Spawn Notification Server UserAreaNotification + Validate Json UserAreaNotification.schema.json ${payload_notification} + [TearDown] Remove an UserArea subscription ${SUB_ID} + + +*** Keywords *** +Create an UserLocationEvent subscription and get sub id + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + +Create an UserArea subscription and get sub id + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + +Remove an UserLocationEvent subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/users/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove an UserArea subscription + [Arguments] ${subscription_id} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area/${subscription_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Spawn Notification Server + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + ${length} = Get Length ${output} + Set Suite Variable ${payload_notification} ${output} + Run Keyword If ${length} == 0 Skip + + \ No newline at end of file diff --git a/MEC013/SRV/UETESTNOT/README.md b/MEC013/SRV/UETESTNOT/README.md new file mode 100644 index 0000000..e69de29 diff --git a/MEC013/SRV/UETESTNOT/environment/variables.txt b/MEC013/SRV/UETESTNOT/environment/variables.txt new file mode 100644 index 0000000..50c62aa --- /dev/null +++ b/MEC013/SRV/UETESTNOT/environment/variables.txt @@ -0,0 +1,21 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} location +${apiVersion} v3 + +${SUB_ID} +${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID + + +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 diff --git a/MEC013/SRV/UETESTNOT/jsons/TestNotification.json b/MEC013/SRV/UETESTNOT/jsons/TestNotification.json new file mode 100644 index 0000000..75ae598 --- /dev/null +++ b/MEC013/SRV/UETESTNOT/jsons/TestNotification.json @@ -0,0 +1,8 @@ +{ + "_links": { + "self": { + "href": "https://someurl.com/subscriptions/users/subscriptionId" + } + }, + "notificationType": "TestNotification" +} \ No newline at end of file diff --git a/MEC013/SRV/UETESTNOT/jsons/UserAreaNotification.json b/MEC013/SRV/UETESTNOT/jsons/UserAreaNotification.json new file mode 100644 index 0000000..21d73f3 --- /dev/null +++ b/MEC013/SRV/UETESTNOT/jsons/UserAreaNotification.json @@ -0,0 +1,12 @@ +{ + "notificationType": "UserAreaNotification", + "callbackReference":"127.0.0.1:8888/callback_uri", + "address": "http://someuri.com/123", + "civicInfo": { + "country": "A1" + }, + "userLocationEvent": "ENTERING_AREA_EVENT", + "_links": { + "subscription": "someuri" + } +} \ No newline at end of file diff --git a/MEC013/SRV/UETESTNOT/jsons/UserAreaSubscription.json b/MEC013/SRV/UETESTNOT/jsons/UserAreaSubscription.json new file mode 100644 index 0000000..accbfc3 --- /dev/null +++ b/MEC013/SRV/UETESTNOT/jsons/UserAreaSubscription.json @@ -0,0 +1,29 @@ +{ + "subscriptionType": "userAreaSubscription", + "clientCorrelator": "0123", + "callbackReference": "http://my.callback.com/area_notification/some-id", + "_links": { + "self": { + "href": "http://meAppServer.example.com/location/v2/subscriptions/area/subscription123" + } + }, + "areaDefine": { + "shape": 1, + "points": [ + { + "latitude": -80.86302, + "longitude": 41.277306 + } + ], + "radius": null + }, + "addressList": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "trackingAccuracy": 10.99, + "expiryDeadline": { + "seconds": 1973507343, + "nanoSeconds\"": 0 + } +} \ No newline at end of file diff --git a/MEC013/SRV/UETESTNOT/jsons/UserLocationEventSubscription.json b/MEC013/SRV/UETESTNOT/jsons/UserLocationEventSubscription.json new file mode 100644 index 0000000..843f42f --- /dev/null +++ b/MEC013/SRV/UETESTNOT/jsons/UserLocationEventSubscription.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "UserLocationEventSubscription", + "clientCorrelator":"someCorrelator", + "address": "acr:10.0.0.1", + "callbackReference": "http://10.3.0.0.8:8888", + "requestTestNotification":"true" +} \ No newline at end of file diff --git a/MEC013/SRV/UETESTNOT/libraries/Server.py b/MEC013/SRV/UETESTNOT/libraries/Server.py new file mode 100644 index 0000000..ce79b6f --- /dev/null +++ b/MEC013/SRV/UETESTNOT/libraries/Server.py @@ -0,0 +1,149 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + ## If a notification is received, then is returned. Otherwise an empty dictionary. + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + + ##OLD mechanism commented: if no response is received, then read the Notification JSON file and return it. + + notification_json= import_notification_json(self.handler.get_resp_body()) + #return notification_json + return {} + diff --git a/MEC013/SRV/UETESTNOT/schemas/TestNotification.schema.json b/MEC013/SRV/UETESTNOT/schemas/TestNotification.schema.json new file mode 100644 index 0000000..af01800 --- /dev/null +++ b/MEC013/SRV/UETESTNOT/schemas/TestNotification.schema.json @@ -0,0 +1,43 @@ +{ + "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)" + }, + "notificationType": { + "description": "Shall be set to \"TestNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "notificationType", + "_links" + ], + "type": "object", + "x-etsi-ref": "6.4.3" + } \ No newline at end of file diff --git a/MEC013/SRV/UETESTNOT/schemas/UserAreaNotification.schema.json b/MEC013/SRV/UETESTNOT/schemas/UserAreaNotification.schema.json new file mode 100644 index 0000000..ea82b65 --- /dev/null +++ b/MEC013/SRV/UETESTNOT/schemas/UserAreaNotification.schema.json @@ -0,0 +1,539 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "subscription": { + "description": "URI referring to a resource.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + } + }, + "required": [ + "subscription" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI).", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + }, + "civicInfo": { + "description": "Indicates a Civic address", + "type": "object", + "required": [ + "country" + ], + "properties": { + "country": { + "description": "The two-letter ISO 3166 country code in capital ASCII letters, e.g., DE or US", + "type": "string", + "x-etsi-mec-cardinality": 1, + "x-etsi-mec-origin-type": "String" + }, + "A1": { + "description": "National subdivisions (state, canton, region, province, prefecture)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A5": { + "description": "Neighbourhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "A6": { + "description": "Group of streets below the neighbourhood level", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRD": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POD": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "STS": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNO": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "HNS": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LMK": { + "description": "Landmark or vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "LOC": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "NAM": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PC": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "BLD": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "UNIT": { + "description": "Unit (apartment, suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "FLR": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ROOM": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PLC": { + "description": "Place-type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PCN": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POBOX": { + "description": "Post office box (P.O. box)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ADDCODE": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "SEAT": { + "description": "Seat (desk, cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RD": { + "description": "Primary road or street", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSEC": { + "description": "Road clause", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDBR": { + "description": "Road branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "RDSUBBR": { + "description": "Road sub-branch", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "PRM": { + "description": "Road pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "POM": { + "description": "Road post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "usageRules": { + "description": "When present, this IE shall carry the value of \"usagerules\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "method": { + "description": "When present, this IE shall contain the method token, carried by the \"method\" Element of the PIDLLO XML document.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "providedBy": { + "description": "When present, this IE shall carry the value of \"provided-by\" Element of the PIDL-LO XML document, with UTF-8 encoding.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + } + }, + "locationInfo": { + "properties": { + "accuracy": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracyAltitude": { + "description": "Altitude accuracy/uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "accuracySemiMinor": { + "description": "Horizontal accuracy/(semi-major) uncertainty of location provided in meters, as defined in [14]. Present only if \"shape\" equals 4, 5 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "confidence": { + "description": "Confidence by which the position of a target entity is known to be within the shape description, expressed as a percentage and defined in [14]. Present only if \"shape\" equals 1, 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "includedAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "innerRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°. Cardinality greater than one only if \"shape\" equals 7.", + "format": "float", + "items": { + "type": "number" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Float" + }, + "offsetAngle": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "orientationMajorAxis": { + "description": "Angle of orientation of the major axis, expressed in the range 0° to 180°, as defined in [14]. Present only if \"shape\" equals 4 or 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "shape": { + "description": "Shape information, as detailed in [14], associated with the reported location coordinate: 1 = Ellipsoid_Arc 2 = ellipsoid_Point 3 = ellipsoid_Point_Altitude 4 = ellipsoid_Point_Altitude_Uncert_Ellipsoid 5 = ellipsoid_Point_Uncert_Circle 6 = ellipsoid_Point_Uncert_Ellipse 7 = polygon", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6, + 7 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "uncertaintyRadius": { + "description": "Present only if \"shape\" equals 6.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocity": { + "description": "Structure with attributes relating to the target entity’s velocity, as defined in [14].", + "properties": { + "bearing": { + "description": "Bearing, expressed in the range 0° to 360°, as defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "horizontalSpeed": { + "description": "Horizontal speed, expressed in km/h and defined in [14].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "uncertainty": { + "description": "Horizontal uncertainty, as defined in [14]. Present only if \"velocityType\" equals 3 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + }, + "velocityType": { + "description": "Velocity information, as detailed in [14], associated with the reported location coordinate: 1 = Horizontal 2 = Horizontal_Vertical 3 = Horizontal_Uncert 4 = Horizontal_Vertical_Uncert", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "verticalSpeed": { + "description": "Vertical speed, expressed in km/h and defined in [14]. Present only if \"velocityType\" equals 2 or 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "verticalUncertainty": { + "description": "Vertical uncertainty, as defined in [14]. Present only if \"velocityType\" equals 4.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "UnsignedInt" + } + }, + "required": [ + "velocityType", + "bearing", + "horizontalSpeed" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "latitude", + "longitude", + "shape" + ], + "type": "object", + "x-etsi-ref": "6.5.3" + }, + "notificationType": { + "description": "Shall be set to \"UserAreaNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "relativeLocationInfo": { + "properties": { + "X": { + "description": "Indicates the value (in the unit of meters) on x-axis of the relative location in the Cartesian system. Positive value represents easting from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Y": { + "description": "Indicates the value (in the unit of meters) on y-axis of the relative location in the Cartesian system. Positive value represents northing from origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "Z": { + "description": "Indicates the value (in the unit of meters) on z-axis of the relative location in the Cartesian system for a 3DPoint. Positive value represents height above origin.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "mapInfo": { + "properties": { + "ancillaryMapInfo": { + "description": "Ancillary map information may be used to convert coordinates between different coordinate systems.", + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Not_specified" + }, + "mapId": { + "description": "Indicates the ID of the map. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "origin": { + "description": "Indicates the location of the map origin in the local Cartesian coordinate system.", + "properties": { + "altitude": { + "description": "Location altitude relative to the WGS84 ellipsoid surface.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Float" + }, + "latitude": { + "description": "Location latitude, expressed in the range -90° to +90°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Location longitude, expressed in the range -180° to +180°.", + "format": "float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure(inlined)" + } + }, + "required": [ + "mapId" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } + }, + "required": [ + "mapInfo", + "X", + "Y" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + }, + "timeStamp": { + "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" + }, + "userLocationEvent": { + "description": "This type represents specified event types for UE location report.", + "enum": [ + "ENTERING_AREA_EVENT", + "LEAVING_AREA_EVENT" + ], + "type": "string" + } + }, + "required": [ + "notificationType", + "address", + "userLocationEvent", + "_links" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tAs specified in [17], clause 6.1.6.2.14.\nNOTE 2:\tAt least one of these attributes shall be present only when reportingLocationReq is set to TRUE in the UserAreaSubscription.", + "x-etsi-ref": "6.4.8" +} \ No newline at end of file -- GitLab From 8a4e549892573ea7a9d94b076bc4ffed0d24be8d Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 22 Jan 2024 09:15:36 +0100 Subject: [PATCH 50/94] MEC013 v3.1.1 UEZONELOOK Draft TCs available --- MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot | 214 ++++++++++++++++++ MEC013/SRV/UEZONELOOK/README.md | 0 .../SRV/UEZONELOOK/environment/variables.txt | 13 ++ .../jsons/ZoneLocationEventSubscription.json | 8 + .../jsons/ZoneStatusSubscription.json | 8 + .../NotificationSubscriptionList.schema.json | 55 +++++ .../ZoneLocationEventSubscription.schema.json | 161 +++++++++++++ .../ZoneStatusSubscription.schema.json | 176 ++++++++++++++ 8 files changed, 635 insertions(+) create mode 100644 MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot create mode 100644 MEC013/SRV/UEZONELOOK/README.md create mode 100644 MEC013/SRV/UEZONELOOK/environment/variables.txt create mode 100644 MEC013/SRV/UEZONELOOK/jsons/ZoneLocationEventSubscription.json create mode 100644 MEC013/SRV/UEZONELOOK/jsons/ZoneStatusSubscription.json create mode 100644 MEC013/SRV/UEZONELOOK/schemas/NotificationSubscriptionList.schema.json create mode 100644 MEC013/SRV/UEZONELOOK/schemas/ZoneLocationEventSubscription.schema.json create mode 100644 MEC013/SRV/UEZONELOOK/schemas/ZoneStatusSubscription.schema.json diff --git a/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot b/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot new file mode 100644 index 0000000..f18faa6 --- /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 0000000..e69de29 diff --git a/MEC013/SRV/UEZONELOOK/environment/variables.txt b/MEC013/SRV/UEZONELOOK/environment/variables.txt new file mode 100644 index 0000000..585984a --- /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 0000000..2015771 --- /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 0000000..eea7a4b --- /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 0000000..4b24531 --- /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 0000000..9d16c05 --- /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 0000000..1d576f2 --- /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 -- GitLab From 6ff2d9810c3f0fef2a970f7abb27448bd6328481 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 29 Jan 2024 10:21:32 +0100 Subject: [PATCH 51/94] MEC013 v3.1.1 UEZONESUB Draft TCs available --- .../UEZONESUB/PlatUeZoneSubscription.robot | 194 ++++++++++++++++++ MEC013/SRV/UEZONESUB/README.md | 0 .../SRV/UEZONESUB/environment/variables.txt | 20 ++ .../jsons/ZoneLocationEventNotification.json | 11 + .../jsons/ZoneLocationEventSubscription.json | 8 + .../ZoneLocationEventSubscriptionError.json | 7 + .../ZoneLocationEventSubscriptionUpdate.json | 9 + ...ZoneStatusNotificationOperationStatus.json | 11 + ...ZoneStatusNotificationUserConstraints.json | 11 + ...ZoneStatusSubscriptionOperationStatus.json | 9 + .../jsons/ZoneStatusSubscriptionUpdate.json | 10 + ...ZoneStatusSubscriptionUserConstraints.json | 10 + MEC013/SRV/UEZONESUB/libraries/Server.py | 149 ++++++++++++++ .../NotificationSubscriptionList.schema.json | 55 +++++ .../ZoneLocationEventNotification.schema.json | 91 ++++++++ .../ZoneLocationEventSubscription.schema.json | 161 +++++++++++++++ .../ZoneStatusNotification.schema.json | 102 +++++++++ .../ZoneStatusSubscription.schema.json | 176 ++++++++++++++++ 18 files changed, 1034 insertions(+) create mode 100644 MEC013/SRV/UEZONESUB/PlatUeZoneSubscription.robot create mode 100644 MEC013/SRV/UEZONESUB/README.md create mode 100644 MEC013/SRV/UEZONESUB/environment/variables.txt create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventNotification.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscription.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscriptionError.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscriptionUpdate.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationOperationStatus.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationUserConstraints.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionOperationStatus.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUpdate.json create mode 100644 MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUserConstraints.json create mode 100644 MEC013/SRV/UEZONESUB/libraries/Server.py create mode 100644 MEC013/SRV/UEZONESUB/schemas/NotificationSubscriptionList.schema.json create mode 100644 MEC013/SRV/UEZONESUB/schemas/ZoneLocationEventNotification.schema.json create mode 100644 MEC013/SRV/UEZONESUB/schemas/ZoneLocationEventSubscription.schema.json create mode 100644 MEC013/SRV/UEZONESUB/schemas/ZoneStatusNotification.schema.json create mode 100644 MEC013/SRV/UEZONESUB/schemas/ZoneStatusSubscription.schema.json diff --git a/MEC013/SRV/UEZONESUB/PlatUeZoneSubscription.robot b/MEC013/SRV/UEZONESUB/PlatUeZoneSubscription.robot new file mode 100644 index 0000000..888378b --- /dev/null +++ b/MEC013/SRV/UEZONESUB/PlatUeZoneSubscription.robot @@ -0,0 +1,194 @@ +*** 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 +Library libraries/Server.py +Default Tags TC_MEC_SRV_RLOCLOOK + + +*** Test Cases *** +TC_MEC_MEC013_SRV_UEZONESUB_001_OK + [Documentation] + ... Check that the IUT acknowledges the creation of UE zone subscription request + ... when commanded by a MEC Application + ... 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 6.4.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create new subscription and get sub id ZoneLocationEventSubscription + Check HTTP Response Body Json Schema Is ZoneLocationEventSubscription + Check HTTP Response Status Code Is 201 + Spawn Notification Server ZoneLocationEventNotification + Validate Json ZoneLocationEventNotification.schema.json ${payload_notification} + [TearDown] Remove subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_01 + [Documentation] + ... Check that the IUT acknowledges the creation of UE zone subscription request + ... when commanded by a MEC Application - OperationStatus constraint + ... 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 6.4.7 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.4 + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create new subscription ZoneStatusSubscriptionOperationStatus + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is ZoneLocationEventSubscription + Spawn Notification Server ZoneStatusNotificationOperationStatus + Validate Json ZoneStatusNotification.schema.json ${payload_notification} + [TearDown] Remove subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UEZONESUB_001_OK_02_02 + [Documentation] + ... Check that the IUT acknowledges the creation of UE zone subscription request + ... when commanded by a MEC Application - UserNumEvent constraint + ... 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 6.4.7 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.4 + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create new subscription and get sub id ZoneStatusSubscriptionUserConstraints + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is ZoneLocationEventSubscription + Spawn Notification Server ZoneStatusNotificationUserConstraints + Validate Json ZoneStatusNotification.schema.json ${payload_notification} + [TearDown] Remove subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UEZONESUB_001_BR + [Documentation] + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application - Neither callbackReference nor websockNotifConfig provided + ... 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 6.4.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.4 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Create new subscription ZoneLocationEventSubscriptionError + Check HTTP Response Status Code Is 400 + + +TC_MEC_MEC013_SRV_UEZONESUB_002_OK_01 + [Documentation] + ... Check that the IUT acknowledges the change of UE area subscription request + ... when commanded by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 6.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id ZoneLocationEventSubscription + Update existing subscription ${SUB_ID} ZoneLocationEventSubscriptionUpdate + Check HTTP Response Body Json Schema Is ZoneLocationEventSubscription + Check HTTP Response Status Code Is 200 + [TearDown] Remove subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UEZONESUB_002_OK_02 + [Documentation] + ... Check that the IUT acknowledges the change of UE area subscription request + ... when commanded by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 6.3.7 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.7 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id ZoneStatusSubscriptionUserConstraints + Update existing subscription ${SUB_ID} ZoneStatusSubscriptionUpdate + Check HTTP Response Body Json Schema Is ZoneStatusSubscription + Check HTTP Response Status Code Is 200 + [TearDown] Remove subscription ${SUB_ID} + + +TC_MEC_MEC013_SRV_UEZONESUB_002_NF + [Documentation] + ... Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI + ... is sent by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 6.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.2 + [Tags] PIC_MEC_PLAT PIC_SERVICES + Update existing subscription ${NOT_EXISTING_SUB_ID} ZoneStatusSubscriptionUpdate + Check HTTP Response Status Code Is 404 + + +TC_MEC_MEC013_SRV_UEZONESUB_003_OK + [Documentation] + ... Check that the IUT acknowledges the cancellation of UE area change notifications + ... when commanded by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 5.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.4 + [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new subscription and get sub id ZoneStatusSubscriptionUserConstraints + Remove subscription ${SUB_ID} + Check HTTP Response Status Code Is 204 + + +TC_MEC_MEC013_SRV_UEZONESUB_003_NF + [Documentation] + ... Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI + ... is sent by a MEC Application + ... ETSI GS MEC 013 3.1.1 Clause 5.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 6.3.6 + ... ETSI GS MEC 013 3.1.1 Clause 6.4.6 + ... ETSI GS MEC 013 3.1.1 Clause 7.11.3.4 + [Tags] PIC_MEC_PLAT PIC_SERVICES + Remove subscription ${NOT_EXISTING_SUB_ID} + Check HTTP Response Status Code Is 404 + +*** Keywords *** +Create new subscription and get sub id + [Arguments] ${content} + Create new subscription ${content} + ${elements} = Split String ${response['headers']['Location']} / + Set Suite Variable ${SUB_ID} ${elements[3]} + +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} + + +Update existing subscription + [Arguments] ${sub_id} ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/zones/${sub_id} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +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 + Set Suite Variable ${response} ${output} + + +Spawn Notification Server + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + ${length} = Get Length ${output} + Set Suite Variable ${payload_notification} ${output} + Run Keyword If ${length} == 0 Skip \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/README.md b/MEC013/SRV/UEZONESUB/README.md new file mode 100644 index 0000000..e69de29 diff --git a/MEC013/SRV/UEZONESUB/environment/variables.txt b/MEC013/SRV/UEZONESUB/environment/variables.txt new file mode 100644 index 0000000..ed7a7f5 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/environment/variables.txt @@ -0,0 +1,20 @@ +*** 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 + +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventNotification.json b/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventNotification.json new file mode 100644 index 0000000..f6297ea --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventNotification.json @@ -0,0 +1,11 @@ +{ + "notificationType": "ZoneLocationEventNotification", + "address": "acr:10.0.0.1", + "zoneId": "zone01", + "userLocationEvent": "ENTERING_AREA_EVENT", + "_links": { + "subscription": { + "href": "http://meAppServer.example.com/location/v3/subscriptions/zone/subscription123" + } + } +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscription.json b/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscription.json new file mode 100644 index 0000000..2015771 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/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/UEZONESUB/jsons/ZoneLocationEventSubscriptionError.json b/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscriptionError.json new file mode 100644 index 0000000..996dbb7 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscriptionError.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "ZoneLocationEventSubscription", + "zoneId": "zone01", + "locationEventCriteria": [ + "ENTERING_AREA_EVENT" + ] +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscriptionUpdate.json b/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscriptionUpdate.json new file mode 100644 index 0000000..ee18b05 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneLocationEventSubscriptionUpdate.json @@ -0,0 +1,9 @@ +{ + "subscriptionType": "ZoneLocationEventSubscription", + "clientCorrelator":"clientCorrelator", + "callbackReference": "http://my.callback.com/zone-notification/some-id", + "zoneId": "zone01", + "addressList": [ + "address01","address02" + ] +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationOperationStatus.json b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationOperationStatus.json new file mode 100644 index 0000000..66a9a77 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationOperationStatus.json @@ -0,0 +1,11 @@ +{ + "_links": { + "subscription": { + "href": "http://someurl.com/subscriptions/zones/ZoneStatusSubscriptionId" + } + }, + "accessPointId": "accessPointId", + "notificationType": "ZoneStatusNotification", + "zoneId": "zoneId", + "operationStatus":"Serviceable" +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationUserConstraints.json b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationUserConstraints.json new file mode 100644 index 0000000..910dc41 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusNotificationUserConstraints.json @@ -0,0 +1,11 @@ +{ + "_links": { + "subscription": { + "href": "http://someurl.com/subscriptions/zones/ZoneStatusSubscriptionId" + } + }, + "accessPointId": "accessPointId", + "notificationType": "ZoneStatusNotification", + "zoneId": "zoneId", + "userNumEvent":1 +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionOperationStatus.json b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionOperationStatus.json new file mode 100644 index 0000000..e767925 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionOperationStatus.json @@ -0,0 +1,9 @@ +{ + "callbackReference": "http://someurl.com/callback_uri", + "operationStatus": [ + "Unknown" + ], + "subscriptionType": "ZoneStatusSubscription", + "zoneId": "zoneId", + "operationStatus":"Serviceable" +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUpdate.json b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUpdate.json new file mode 100644 index 0000000..f2242e6 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUpdate.json @@ -0,0 +1,10 @@ +{ + "callbackReference": "http://someurl.com/callback_uri", + "clientCorrelator":"clientCorrelator", + "operationStatus": [ + "Unknown" + ], + "subscriptionType": "ZoneStatusSubscription", + "zoneId": "zoneId", + "operationStatus": ["Serviceable"] +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUserConstraints.json b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUserConstraints.json new file mode 100644 index 0000000..429cea7 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/jsons/ZoneStatusSubscriptionUserConstraints.json @@ -0,0 +1,10 @@ +{ + "callbackReference": "http://someurl.com/callback_uri", + "operationStatus": [ + "Unknown" + ], + "subscriptionType": "ZoneStatusSubscription", + "zoneId": "zoneId", + "upperNumberOfUser": 10, + "lowerNumberOfUser": 20 +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/libraries/Server.py b/MEC013/SRV/UEZONESUB/libraries/Server.py new file mode 100644 index 0000000..ce79b6f --- /dev/null +++ b/MEC013/SRV/UEZONESUB/libraries/Server.py @@ -0,0 +1,149 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + ## If a notification is received, then is returned. Otherwise an empty dictionary. + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + + ##OLD mechanism commented: if no response is received, then read the Notification JSON file and return it. + + notification_json= import_notification_json(self.handler.get_resp_body()) + #return notification_json + return {} + diff --git a/MEC013/SRV/UEZONESUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEZONESUB/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000..4b24531 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/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/UEZONESUB/schemas/ZoneLocationEventNotification.schema.json b/MEC013/SRV/UEZONESUB/schemas/ZoneLocationEventNotification.schema.json new file mode 100644 index 0000000..8be26a1 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/schemas/ZoneLocationEventNotification.schema.json @@ -0,0 +1,91 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "subscription": { + "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": [ + "subscription" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "address": { + "description": "Address of user (e.g. ‘sip’ URI, ‘tel’ URI, ‘acr’ URI).", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uri" + }, + "notificationType": { + "description": "Shall be set to \"ZoneLocationEventNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "timeStamp": { + "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" + }, + "userLocationEvent": { + "description": "This type represents specified event types for UE location report.", + "enum": [ + "ENTERING_AREA_EVENT", + "LEAVING_AREA_EVENT" + ], + "type": "string" + }, + "zoneId": { + "description": "The identity of the zone. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "notificationType", + "address", + "userLocationEvent", + "zoneId", + "_links" + ], + "type": "object", + "x-etsi-ref": "6.4.6" +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/schemas/ZoneLocationEventSubscription.schema.json b/MEC013/SRV/UEZONESUB/schemas/ZoneLocationEventSubscription.schema.json new file mode 100644 index 0000000..9d16c05 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/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/UEZONESUB/schemas/ZoneStatusNotification.schema.json b/MEC013/SRV/UEZONESUB/schemas/ZoneStatusNotification.schema.json new file mode 100644 index 0000000..a31df58 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/schemas/ZoneStatusNotification.schema.json @@ -0,0 +1,102 @@ +{ + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "subscription": { + "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": [ + "subscription" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "accessPointId": { + "description": "Identifier of an access point (e.g. ap01). Shall be included when userNumEvent related with access point or operationStatus is included.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "notificationType": { + "description": "Shall be set to \"ZoneStatusNotification\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "operationStatus": { + "description": "An enumeration defining the operations status of an access point.", + "enum": [ + "Serviceable", + "Unserviceable", + "Unknown" + ], + "type": "string" + }, + "timeStamp": { + "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" + }, + "userNumEvent": { + "description": "Shall be present when ZoneStatusSubscription includes upperNumberOfUsersZoneThreshold, lowerNumberOfUsersZoneThreshold, upperNumberOfUsersAPThreshold or lowerNumberOfUsersAPThreshold, and the number of users in a zone or an access point crosses the threshold defined in the subscription: 1 = OVER_ZONE_UPPER_THD. 2 = UNDER_ZONE_LOWER_THD. 3 = OVER_AP_UPPER_THD. 4 = UNDER_AP_LOWER_THD.", + "enum": [ + 1, + 2, + 3, + 4 + ], + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Enum(inlined)" + }, + "zoneId": { + "description": "The identity of the zone. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "notificationType", + "zoneId", + "_links" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tAs specified in [5], clause 5.2.3.2.", + "x-etsi-ref": "6.4.7" +} \ No newline at end of file diff --git a/MEC013/SRV/UEZONESUB/schemas/ZoneStatusSubscription.schema.json b/MEC013/SRV/UEZONESUB/schemas/ZoneStatusSubscription.schema.json new file mode 100644 index 0000000..1d576f2 --- /dev/null +++ b/MEC013/SRV/UEZONESUB/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 -- GitLab From 32282b10727287211b0cf8fc17b712fc0f016471 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Thu, 8 Feb 2024 12:36:04 +0100 Subject: [PATCH 52/94] fixed bug in MEC016 and MEC030 --- MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot | 8 ++++++-- MEC021/SRV/AMS/environment/variables.txt | 4 ++-- MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json | 2 +- MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot | 2 +- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot index dae88ee..5766d4b 100644 --- a/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot +++ b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot @@ -79,7 +79,7 @@ TC_MEC_MEC016_MEO_UEAPPCTX_002_BR [Setup] Create application context AppContext.json Set Suite Variable ${contextId_tbu} ${response['body']['contextId']} - Update application context ${context-id} UpdateAppContext_BR.json + Update application context ${contextId_tbu} UpdateAppContext_BR.json Check HTTP Response Status Code Is 400 [Teardown] Delete application context ${contextId_tbu} @@ -106,7 +106,11 @@ TC_MEC_MEC016_MEO_UEAPPCTX_003_OK # Preamble Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - Delete application context ${context-id} + + [Setup] Create application context AppContext.json + Set Suite Variable ${contextId_tbd} ${response['body']['contextId']} + + Delete application context ${contextId_tbd} Check HTTP Response Status Code Is 204 diff --git a/MEC021/SRV/AMS/environment/variables.txt b/MEC021/SRV/AMS/environment/variables.txt index af30adf..ce533f3 100644 --- a/MEC021/SRV/AMS/environment/variables.txt +++ b/MEC021/SRV/AMS/environment/variables.txt @@ -1,8 +1,8 @@ *** Variables *** # Generic variables ${AMS_SCHEMA} http -${AMS_HOST} 10.192.2.172 -${AMS_PORT} 8081 +${AMS_HOST} mockoon +${AMS_PORT} 3006 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} diff --git a/MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json b/MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json index 7013986..1362c1b 100644 --- a/MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json +++ b/MEC030/SRV/V2X/jsons/V2XDistributionServers_BR.json @@ -40,7 +40,7 @@ 1, 2 ], - "protImplementation": "Java" + "protImplementation": "cpp" } }, { diff --git a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot index 675c445..3c22208 100644 --- a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot +++ b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot @@ -1,4 +1,4 @@ -Y''[Documentation] robot --outputdir ../../../outputs ./RegisteredDevices.robot +''[Documentation] robot --outputdir ../../../outputs ./RegisteredDevices.robot ... Test Suite to validate the Registered IOT Device (IOTDEV) operations. *** Settings *** -- GitLab From a575550ef0076f279399ebef56366201f4bc2bb0 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Fri, 9 Feb 2024 14:02:30 +0100 Subject: [PATCH 53/94] updated MEC030 TCs --- MEC030/SRV/V2X/V2XInformationService.robot | 112 +++++++++--------- .../SRV/V2X/jsons/V2XDistributionServers.json | 2 +- .../V2X/jsons/V2XDistributionServers_NF.json | 4 - .../SRV/V2X/jsons/V2xMsgPublication_BR.json | 2 +- .../schemas/SubscriptionLinkList.schema.json | 2 +- 5 files changed, 62 insertions(+), 60 deletions(-) diff --git a/MEC030/SRV/V2X/V2XInformationService.robot b/MEC030/SRV/V2X/V2XInformationService.robot index 5a7b5bd..c6449e1 100644 --- a/MEC030/SRV/V2X/V2XInformationService.robot +++ b/MEC030/SRV/V2X/V2XInformationService.robot @@ -14,7 +14,7 @@ TC_MEC_MEC030_SRV_V2X_001_OK_01 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over Uu unicast using ecgi filter ${ECGI} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UuUnicastProvisioningInfo @@ -24,7 +24,7 @@ TC_MEC_MEC030_SRV_V2X_001_OK_02 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu unicast when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over Uu unicast using geographical filter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UuUnicastProvisioningInfo @@ -33,7 +33,7 @@ TC_MEC_MEC030_SRV_V2X_001_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over Uu unicast using geographical filter wrong parameter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 400 @@ -43,7 +43,7 @@ TC_MEC_MEC030_SRV_V2X_001_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.3.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over Uu unicast using ecgi filter ${UNKNOWN_ECGI} Check HTTP Response Status Code Is 404 @@ -62,7 +62,7 @@ TC_MEC_MEC030_SRV_V2X_002_OK_02 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.4.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over Uu MBM using geographical filter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UuMbmsProvisioningInfo @@ -71,7 +71,7 @@ TC_MEC_MEC030_SRV_V2X_002_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.4.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over Uu MBM using geographical filter wrong parameter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 400 @@ -79,7 +79,7 @@ TC_MEC_MEC030_SRV_V2X_002_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.4.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over Uu MBM using geographical filter ${UNKNOWN_LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 404 @@ -90,7 +90,7 @@ TC_MEC_MEC030_SRV_V2X_003_OK_01 [Documentation] ... Check that the IUT responds with a configured provisioning information over PC5 when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over PC5 using ecgi filter ${ECGI} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is Pc5ProvisioningInfo @@ -99,7 +99,7 @@ TC_MEC_MEC030_SRV_V2X_003_OK_02 [Documentation] ... Check that the IUT responds with a configured provisioning information over Uu MBMS when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over PC5 using geographical filter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is Pc5ProvisioningInfo @@ -108,7 +108,7 @@ TC_MEC_MEC030_SRV_V2X_003_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over PC5 using geographical filter wrong parameter ${LAT_VALUE} ${LON_VALUE} Check HTTP Response Status Code Is 400 @@ -117,7 +117,7 @@ TC_MEC_MEC030_SRV_V2X_003_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.5.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Retrieve configured provisioning information over PC5 using ecgi filter ${UNKNOWN_ECGI} Check HTTP Response Status Code Is 404 @@ -127,7 +127,7 @@ TC_MEC_MEC030_SRV_V2X_004_OK [Documentation] ... Check that the IUT processes properly a request to information of V2X Message Distribution servers ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Request v2x message distribution servers V2XDistributionServers Check HTTP Response Body Json Schema Is V2XDistributionServers Check HTTP Response Status Code Is 200 @@ -136,7 +136,7 @@ TC_MEC_MEC030_SRV_V2X_004_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Request v2x message distribution servers V2XDistributionServers_BR Check HTTP Response Status Code Is 400 @@ -145,7 +145,7 @@ TC_MEC_MEC030_SRV_V2X_004_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Request v2x message distribution servers V2XDistributionServers_NF Check HTTP Response Status Code Is 404 @@ -155,7 +155,7 @@ TC_MEC_MEC030_SRV_V2X_005_OK [Documentation] ... Check that the IUT sends a request about QoS information for a vehicular UE when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Request predicted QoS PredictedQoS.json Check HTTP Response Body Json Schema Is PredictedQoS Check HTTP Response Status Code Is 200 @@ -165,7 +165,7 @@ TC_MEC_MEC030_SRV_V2X_005_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml ##Wrong parameter into JSON: locality instead of locationGranularity Request predicted QoS PredictedQoS_BR.json Check HTTP Response Status Code Is 400 @@ -174,7 +174,7 @@ TC_MEC_MEC030_SRV_V2X_005_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.6.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Request predicted QoS PredictedQoS_NF.json Check HTTP Response Status Code Is 404 @@ -185,7 +185,7 @@ TC_MEC_MEC030_SRV_V2X_006_OK [Documentation] ... Check that the IUT processes properly a request to publish a V2X message ... ETSI GS MEC 030 v3.1.1, clause 7.7.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Publish V2X message V2xMsgPublication.json Check HTTP Response Status Code Is 204 @@ -193,7 +193,7 @@ TC_MEC_MEC030_SRV_V2X_006_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.7.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Publish V2X message V2xMsgPublication_BR.json Check HTTP Response Status Code Is 400 @@ -204,7 +204,7 @@ TC_MEC_MEC030_SRV_V2X_007_OK_01 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -221,7 +221,7 @@ TC_MEC_MEC030_SRV_V2X_007_OK_02 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -238,7 +238,7 @@ TC_MEC_MEC030_SRV_V2X_007_OK_03 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -255,7 +255,7 @@ TC_MEC_MEC030_SRV_V2X_008_OK_04 [Documentation] ... Check that the IUT responds with the requested list of subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -273,7 +273,7 @@ TC_MEC_MEC030_SRV_V2X_008_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve subscription list information ${SUB_TYPE_INVALID} @@ -285,7 +285,7 @@ TC_MEC_MEC030_SRV_V2X_009_OK_01 [Documentation] ... Check that the IUT responds with the requested to create a subscription ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscription.json @@ -303,7 +303,7 @@ TC_MEC_MEC030_SRV_V2X_009_OK_02 [Documentation] ... Check that the IUT responds with the requested to create a subscription ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgUuMbmsSubscription.json @@ -322,7 +322,7 @@ TC_MEC_MEC030_SRV_V2X_009_OK_03 [Documentation] ... Check that the IUT responds with the requested to create a subscription ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgPc5Subscription.json @@ -340,7 +340,7 @@ TC_MEC_MEC030_SRV_V2X_009_OK_04 [Documentation] ... Check that the IUT responds with the requested to create a subscription ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -358,15 +358,12 @@ TC_MEC_MEC030_SRV_V2X_009_OK_04 TC_MEC_MEC030_SRV_V2X_009_BR [Documentation] - ... Check that the IUT responds with the requested to create a subscription - ... ETSI GS MEC 030 v3.1.1, clause 7.8.3.4 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 030 V3.1.1, clause 7.10.3.1 + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 - ${path} Catenate SEPARATOR= jsons/ ProvChgUuMbmsSubscription_BR.json - ${body} Get File ${path} - ${json_object}= Evaluate json.loads('''${body}''') json - Send a request for creating a subscription ${body} + Retrieve a subscription using wrong endpoint ${SUB_PROV_CHG_UU_UNI_ID} Check HTTP Response Status Code Is 400 @@ -375,7 +372,7 @@ TC_MEC_MEC030_SRV_V2X_010_OK_01 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a subscription ${SUB_PROV_CHG_UU_UNI_ID} @@ -390,7 +387,7 @@ TC_MEC_MEC030_SRV_V2X_010_OK_02 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a subscription ${SUB_PROV_CHG_UU_MBMS_ID} @@ -406,7 +403,7 @@ TC_MEC_MEC030_SRV_V2X_010_OK_03 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a subscription ${SUB_PROV_CHG_PC5_ID} @@ -421,7 +418,7 @@ TC_MEC_MEC030_SRV_V2X_010_OK_04 [Documentation] ... Check that the IUT responds with the requested of subscription information when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a subscription ${SUB_V2X_MSG_ID} @@ -436,7 +433,7 @@ TC_MEC_MEC030_SRV_V2X_010_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a subscription ${SUB_WRONG_PARAM} @@ -447,7 +444,7 @@ TC_MEC_MEC030_SRV_V2X_010_NF [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.1 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Retrieve a subscription ${NOT_EXISTING_SUB_ID} @@ -460,7 +457,7 @@ TC_MEC_MEC030_SRV_V2X_011_OK_01 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscriptionUpdate.json @@ -478,7 +475,7 @@ TC_MEC_MEC030_SRV_V2X_011_OK_02 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgUuMbmsSubscriptionUpdate.json @@ -496,7 +493,7 @@ TC_MEC_MEC030_SRV_V2X_011_OK_03 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgPc5SubscriptionUpdate.json @@ -514,7 +511,7 @@ TC_MEC_MEC030_SRV_V2X_011_OK_04 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ V2xMsgSubscriptionUpdate.json @@ -532,7 +529,7 @@ TC_MEC_MEC030_SRV_V2X_011_BR [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscriptionUpdate_BR.json @@ -545,7 +542,7 @@ TC_MEC_MEC030_SRV_V2X_011_NF [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscriptionUpdate.json @@ -560,7 +557,7 @@ TC_MEC_MEC030_SRV_V2X_012_OK_01 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${SUB_PROV_CHG_UU_UNI_ID} @@ -570,7 +567,7 @@ TC_MEC_MEC030_SRV_V2X_012_OK_02 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${SUB_PROV_CHG_UU_MBMS_ID} @@ -580,7 +577,7 @@ TC_MEC_MEC030_SRV_V2X_012_OK_03 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${SUB_PROV_CHG_PC5_ID} @@ -590,7 +587,7 @@ TC_MEC_MEC030_SRV_V2X_012_OK_04 [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${SUB_V2X_MSG_ID} @@ -601,7 +598,7 @@ TC_MEC_MEC030_SRV_V2X_012_NF [Documentation] ... Check that the IUT responds with the requested of updating subscription when queried by a MEC Application ... ETSI GS MEC 030 v3.1.1, clause 7.9.3.2 - ... https://forge.etsi.org/rep/mec/gs030-vis-api/blob/master/MEC030_V2XInformationService.yaml + ... https://forge.etsi.org/rep/mec/gs030-vis-api/-/blob/master/MEC030_V2XInformationServices.yaml Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Remove existing subscription ${NOT_EXISTING_SUB_ID} @@ -776,7 +773,7 @@ Retrieve subscription list information Should Be True ${PIC_MEC_SYSTEM} == 1 Should Be True ${PIC_SERVICES} == 1 Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?subscription_type=${subscription_type} ${output}= Output response @@ -800,6 +797,15 @@ Retrieve a subscription GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} ${output}= Output response Set Suite Variable ${response} ${output} + +Retrieve a subscription using wrong endpoint + [Arguments] ${subscriptionId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subs/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} Update existing subscription [Arguments] ${subscriptionId} ${body} diff --git a/MEC030/SRV/V2X/jsons/V2XDistributionServers.json b/MEC030/SRV/V2X/jsons/V2XDistributionServers.json index 44bb360..c8c496a 100644 --- a/MEC030/SRV/V2X/jsons/V2XDistributionServers.json +++ b/MEC030/SRV/V2X/jsons/V2XDistributionServers.json @@ -36,7 +36,7 @@ 1, 2 ], - "protImplementation": "Java" + "protImplementation": "cpp" } }, { diff --git a/MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json b/MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json index 167d5cc..c61e7f7 100644 --- a/MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json +++ b/MEC030/SRV/V2X/jsons/V2XDistributionServers_NF.json @@ -30,10 +30,6 @@ ], "v2xMsgDistributionServer": [ { - "infoConnection": { - "ipAddress": "192.168.1.1", - "port_number": 8080 - }, "infoProtocol": { "msgProtocol": [ 0 diff --git a/MEC030/SRV/V2X/jsons/V2xMsgPublication_BR.json b/MEC030/SRV/V2X/jsons/V2xMsgPublication_BR.json index 638f906..755cc2e 100644 --- a/MEC030/SRV/V2X/jsons/V2xMsgPublication_BR.json +++ b/MEC030/SRV/V2X/jsons/V2xMsgPublication_BR.json @@ -1,5 +1,5 @@ { - "stdOrganization": "UNKNOWN_ORG", + "stdOrganization": "UNKNOWN_ORGANIZATION", "msgType": 2, "msgEncodeFormat": "base64", "msgContent": "V2X message content" diff --git a/MEC030/SRV/V2X/schemas/SubscriptionLinkList.schema.json b/MEC030/SRV/V2X/schemas/SubscriptionLinkList.schema.json index c2892e1..38b4448 100644 --- a/MEC030/SRV/V2X/schemas/SubscriptionLinkList.schema.json +++ b/MEC030/SRV/V2X/schemas/SubscriptionLinkList.schema.json @@ -20,7 +20,7 @@ "subscriptions": { "type": "array", "items": { - "description": "The service consumer’s subscriptions.", + "description": "The service consumers subscriptions.", "properties": { "href": { "description": "The URI referring to the subscription.", -- GitLab From afb3422233425efc9662f63e12dd98c18d249778 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Mon, 12 Feb 2024 18:44:22 +0100 Subject: [PATCH 54/94] first draft of MEC030 --- .../jsons/ProvChgUuUniSubscriptionUpdate.json | 8 +- .../ProvChgUuMbmsSubscription.schema.json | 838 +++++++++--------- 2 files changed, 423 insertions(+), 423 deletions(-) diff --git a/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate.json b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate.json index 40c61b4..cd92101 100644 --- a/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate.json +++ b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate.json @@ -23,8 +23,8 @@ } }, "_links": { - "self": { - "href": "https://127.0.0.1/vis/v1/subscription/1" - } - } + "self": { + "href": "https://127.0.0.1/vis/v1/subscription/1" + } + } } \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/ProvChgUuMbmsSubscription.schema.json b/MEC030/SRV/V2X/schemas/ProvChgUuMbmsSubscription.schema.json index 262c1e2..2905f27 100644 --- a/MEC030/SRV/V2X/schemas/ProvChgUuMbmsSubscription.schema.json +++ b/MEC030/SRV/V2X/schemas/ProvChgUuMbmsSubscription.schema.json @@ -1,485 +1,485 @@ { - "properties": { - "_links": { - "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", - "properties": { - "self": { - "description": "'This data type represents a type of link'", - "type": "object", - "required": [ - "href" - ], - "properties": { - "href": { - "description": "The URI referring to the subscription.", - "type": "string", - "format": "uri" - } + "properties": { + "_links": { + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.", + "properties": { + "self": { + "description": "'This data type represents a type of link'", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + } + } + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1" + }, + "callbackReference": { + "description": "URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "URI" + }, + "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 Unixtime 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" + }, + "filterCriteria": { + "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response.", + "properties": { + "locationInfo": { + "properties": { + "ecgi": { + "properties": { + "cellId": { + "properties": { + "cellId": { + "description": "E-UTRAN Cell Identity as a bit string (size (28)).", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "cellId" + ], + "type": "object", + "x-etsi-ref": "6.6.2" + }, + "plmn": { + "properties": { + "mcc": { + "description": "The Mobile Country Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "mnc": { + "description": "The Mobile Network Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "x-etsi-ref": "6.5.4" } - } - }, - "required": [ - "self" - ], - "type": "object", - "x-etsi-mec-cardinality": "0..1" - }, - "callbackReference": { - "description": "URI selected by the service consumer to receive notifications on the subscribed VIS information. This shall be included both in the request and in response.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "URI" - }, - "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 Unixtime since January 1, 1970, 00:00:00 UTC.", - "format": "Uint32", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Uint32" - } + "required": [ + "plmn", + "cellId" + ], + "type": "object", + "x-etsi-ref": "6.5.5" }, - "required": [ - "seconds", - "nanoSeconds" - ], - "type": "object", - "x-etsi-ref": "6.5.2" + "geoArea": { + "description": "Information of a geographical area.", + "properties": { + "latitude": { + "description": "Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + }, + "longitude": { + "description": "Longitude (DATUM = WGS84)-180 to 180 in decimal degree format DDD.ddd", + "format": "Float", + "type": "number", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Float" + } + }, + "required": [ + "latitude", + "longitude" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1" + } }, - "filterCriteria": { - "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response.", + "type": "object", + "x-etsi-notes": "NOTE:\tEither ecgi or geoArea shall be present, but not both.", + "x-etsi-ref": "6.5.3" + }, + "neighbourCellInfo": { + "description": "The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS.", + "items": { "properties": { - "locationInfo": { + "ecgi": { "properties": { - "ecgi": { + "cellId": { "properties": { "cellId": { - "properties": { - "cellId": { - "description": "E-UTRAN Cell Identity as a bit string (size (28)).", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.6.2" - }, - "plmn": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.4" + "description": "E-UTRAN Cell Identity as a bit string (size (28)).", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" } }, "required": [ - "plmn", "cellId" ], "type": "object", - "x-etsi-ref": "6.5.5" + "x-etsi-ref": "6.6.2" }, - "geoArea": { - "description": "Information of a geographical area.", + "plmn": { "properties": { - "latitude": { - "description": "Latitude (DATUM = WGS84) -90 to 90 in decimal degree format DDD.ddd", - "format": "Float", - "type": "number", + "mcc": { + "description": "The Mobile Country Code part of PLMN Identity.", + "type": "string", "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Float" + "x-etsi-mec-origin-type": "String" }, - "longitude": { - "description": "Longitude (DATUM = WGS84)-180 to 180 in decimal degree format DDD.ddd", - "format": "Float", - "type": "number", + "mnc": { + "description": "The Mobile Network Code part of PLMN Identity.", + "type": "string", "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Float" + "x-etsi-mec-origin-type": "String" } }, "required": [ - "latitude", - "longitude" + "mcc", + "mnc" ], "type": "object", - "x-etsi-mec-cardinality": "0..1" + "x-etsi-ref": "6.5.4" } }, + "required": [ + "plmn", + "cellId" + ], "type": "object", - "x-etsi-notes": "NOTE:\tEither ecgi or geoArea shall be present, but not both.", - "x-etsi-ref": "6.5.3" + "x-etsi-ref": "6.5.5" }, - "neighbourCellInfo": { - "description": "The information of the neighbour cells in a visiting PLMN that support V2X communication over Uu MBMS.", - "items": { - "properties": { - "ecgi": { - "properties": { - "cellId": { - "properties": { - "cellId": { - "description": "E-UTRAN Cell Identity as a bit string (size (28)).", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.6.2" - }, - "plmn": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.4" - } - }, - "required": [ - "plmn", - "cellId" - ], - "type": "object", - "x-etsi-ref": "6.5.5" - }, - "fddInfo": { - "properties": { - "dlEarfcn": { - "properties": { - "earfcn": { - "description": "E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535)", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - } - }, - "required": [ - "earfcn" - ], - "type": "object", - "x-etsi-ref": "6.6.3" - }, - "dlTransmissionBandwidth": { - "properties": { - "transmissionBandwidth": { - "description": "Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)", - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" - } - }, - "required": [ - "transmissionBandwidth" - ], - "type": "object", - "x-etsi-ref": "6.6.4" - }, - "ulEarfcn": { - "properties": { - "earfcn": { - "description": "E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535)", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - } - }, - "required": [ - "earfcn" - ], - "type": "object", - "x-etsi-ref": "6.6.3" - }, - "ulTransmissionBandwidth": { - "properties": { - "transmissionBandwidth": { - "description": "Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)", - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" - } - }, - "required": [ - "transmissionBandwidth" - ], - "type": "object", - "x-etsi-ref": "6.6.4" - } - }, - "required": [ - "ulEarfcn", - "dlEarfcn", - "ulTransmissionBandwidth", - "dlTransmissionBandwidth" - ], - "type": "object", - "x-etsi-ref": "6.5.6" - }, - "mbmsServiceAreaIdentity": { - "description": "Supported MBMS Service Area Identities in the cell.", - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "String" + "fddInfo": { + "properties": { + "dlEarfcn": { + "properties": { + "earfcn": { + "description": "E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535)", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + } }, - "pci": { - "description": "Physical Cell Identifier.", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" + "required": [ + "earfcn" + ], + "type": "object", + "x-etsi-ref": "6.6.3" + }, + "dlTransmissionBandwidth": { + "properties": { + "transmissionBandwidth": { + "description": "Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + } }, - "plmn": { - "properties": { - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } - }, - "required": [ - "mcc", - "mnc" - ], - "type": "object", - "x-etsi-ref": "6.5.4" + "required": [ + "transmissionBandwidth" + ], + "type": "object", + "x-etsi-ref": "6.6.4" + }, + "ulEarfcn": { + "properties": { + "earfcn": { + "description": "E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535)", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + } }, - "tddInfo": { - "properties": { - "earfcn": { - "properties": { - "earfcn": { - "description": "E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535)", - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Integer" - } - }, - "required": [ - "earfcn" - ], - "type": "object", - "x-etsi-ref": "6.6.3" - }, - "subframeAssignment": { - "description": "Uplink-downlink subframe configuration information.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "transmissionBandwidth": { - "properties": { - "transmissionBandwidth": { - "description": "Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)", - "enum": [ - 1, - 2, - 3, - 4, - 5, - 6 - ], - "type": "integer", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "Enum" - } - }, - "required": [ - "transmissionBandwidth" - ], - "type": "object", - "x-etsi-ref": "6.6.4" - } - }, - "required": [ - "earfcn", - "transmissionBandwidth", - "subframeAssignment" - ], - "type": "object", - "x-etsi-ref": "6.5.7" - } + "required": [ + "earfcn" + ], + "type": "object", + "x-etsi-ref": "6.6.3" }, - "required": [ - "plmn", - "ecgi", - "pci", - "fddInfo", - "tddInfo", - "mbmsServiceAreaIdentity" - ], - "type": "object", - "x-etsi-ref": "6.5.11" + "ulTransmissionBandwidth": { + "properties": { + "transmissionBandwidth": { + "description": "Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + } + }, + "required": [ + "transmissionBandwidth" + ], + "type": "object", + "x-etsi-ref": "6.6.4" + } + }, + "required": [ + "ulEarfcn", + "dlEarfcn", + "ulTransmissionBandwidth", + "dlTransmissionBandwidth" + ], + "type": "object", + "x-etsi-ref": "6.5.6" + }, + "mbmsServiceAreaIdentity": { + "description": "Supported MBMS Service Area Identities in the cell.", + "items": { + "type": "string" }, - "minItems": 0, + "minItems": 1, "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UuMbmsNeighbourCellInfo" + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" }, - "v2xServerUsd": { + "pci": { + "description": "Physical Cell Identifier.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "plmn": { "properties": { - "sdpInfo": { - "description": "SDP with IP multicast address and port number used for V2X communication via MBMS.", + "mcc": { + "description": "The Mobile Country Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "mnc": { + "description": "The Mobile Network Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "mcc", + "mnc" + ], + "type": "object", + "x-etsi-ref": "6.5.4" + }, + "tddInfo": { + "properties": { + "earfcn": { "properties": { - "ipMulticastAddress": { - "description": "", - "type": "string", + "earfcn": { + "description": "E-UTRA Absolute Radio Frequency Channel Number, range (0... 65535)", + "type": "integer", "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "portNumber": { - "description": "", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "x-etsi-mec-origin-type": "Integer" } }, "required": [ - "ipMulticastAddress", - "portNumber" + "earfcn" ], "type": "object", - "x-etsi-mec-cardinality": "1" + "x-etsi-ref": "6.6.3" }, - "serviceAreaIdentifier": { - "description": "A list of service area identifier for the applicable MBMS broadcast area.", - "items": { - "type": "string" - }, - "minItems": 1, - "type": "array", - "x-etsi-mec-cardinality": "1..N", + "subframeAssignment": { + "description": "Uplink-downlink subframe configuration information.", + "type": "string", + "x-etsi-mec-cardinality": "1", "x-etsi-mec-origin-type": "String" }, - "tmgi": { - "description": "Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services.", + "transmissionBandwidth": { "properties": { - "mbmsServiceId": { - "description": "MBMS Service ID consisting of three octets.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mcc": { - "description": "The Mobile Country Code part of PLMN Identity.", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - }, - "mnc": { - "description": "The Mobile Network Code part of PLMN Identity.", - "type": "string", + "transmissionBandwidth": { + "description": "Numeric value corresponding to the transmission bandwidth expressed in units of resource blocks as follows:1 = bw6 (6 resource blocks)2 = bw15 (15 resource blocks) 3 = bw25 (25 resource blocks) 4 = bw50 (50 resource blocks) 5 = bw75 (75 resource blocks) 6 = bw100 (100 resource blocks)", + "enum": [ + 1, + 2, + 3, + 4, + 5, + 6 + ], + "type": "integer", "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" + "x-etsi-mec-origin-type": "Enum" } }, "required": [ - "mbmsServiceId", - "mcc", - "mnc" + "transmissionBandwidth" ], "type": "object", - "x-etsi-mec-cardinality": "" + "x-etsi-ref": "6.6.4" } }, "required": [ - "tmgi", - "serviceAreaIdentifier", - "sdpInfo" + "earfcn", + "transmissionBandwidth", + "subframeAssignment" ], "type": "object", - "x-etsi-ref": "6.5.10" + "x-etsi-ref": "6.5.7" } }, "required": [ - "locationInfo", - "v2xServerUsd" + "plmn", + "ecgi", + "pci", + "fddInfo", + "tddInfo", + "mbmsServiceAreaIdentity" ], "type": "object", - "x-etsi-mec-cardinality": "1" + "x-etsi-ref": "6.5.11" }, - "subscriptionType": { - "description": "Shall be set to \"ProvChgUuMbmsSubscription\".", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "String" - } + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UuMbmsNeighbourCellInfo" }, - "required": [ - "subscriptionType", - "callbackReference", - "filterCriteria" - ], - "type": "object", - "x-etsi-ref": "6.3.3" - } \ No newline at end of file + "v2xServerUsd": { + "properties": { + "sdpInfo": { + "description": "SDP with IP multicast address and port number used for V2X communication via MBMS.", + "properties": { + "ipMulticastAddress": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "portNumber": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "ipMulticastAddress", + "portNumber" + ], + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "serviceAreaIdentifier": { + "description": "A list of service area identifier for the applicable MBMS broadcast area.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "tmgi": { + "description": "Temporary Mobile Group Identity (TMGI), which is used within MBMS to uniquely identify Multicast and Broadcast bearer services.", + "properties": { + "mbmsServiceId": { + "description": "MBMS Service ID consisting of three octets.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "mcc": { + "description": "The Mobile Country Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "mnc": { + "description": "The Mobile Network Code part of PLMN Identity.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "mbmsServiceId", + "mcc", + "mnc" + ], + "type": "object", + "x-etsi-mec-cardinality": "" + } + }, + "required": [ + "tmgi", + "serviceAreaIdentifier", + "sdpInfo" + ], + "type": "object", + "x-etsi-ref": "6.5.10" + } + }, + "required": [ + "locationInfo", + "v2xServerUsd" + ], + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \"ProvChgUuMbmsSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "filterCriteria" + ], + "type": "object", + "x-etsi-ref": "6.3.3" +} \ No newline at end of file -- GitLab From e8af76f581668b4e9a25fcf7fa67ac0b8436e17f Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Mon, 12 Feb 2024 18:44:39 +0100 Subject: [PATCH 55/94] first draft of MEC021 --- MEC021/SRV/AMS/AMSService.robot | 311 +++++++++++++----- MEC021/SRV/AMS/environment/variables.txt | 7 +- .../AMS/json/NotificationSubscription.json | 16 + .../json/NotificationSubscriptionError.json | 16 + MEC021/SRV/AMS/json/RegistrationInfo.json | 26 ++ .../AppMobilityServiceInfo.schema.json | 99 ++++++ .../AppMobilityServiceInfos.schema.json | 104 ++++++ .../MobilityProcedureNotification.schema.json | 0 .../NotificationSubscription.schema.json | 248 ++++++++++++++ .../schemas/SubscriptionLinkList.schema.json | 64 ++++ 10 files changed, 810 insertions(+), 81 deletions(-) create mode 100644 MEC021/SRV/AMS/json/NotificationSubscription.json create mode 100644 MEC021/SRV/AMS/json/NotificationSubscriptionError.json create mode 100644 MEC021/SRV/AMS/json/RegistrationInfo.json create mode 100644 MEC021/SRV/AMS/schemas/AppMobilityServiceInfo.schema.json create mode 100644 MEC021/SRV/AMS/schemas/AppMobilityServiceInfos.schema.json create mode 100644 MEC021/SRV/AMS/schemas/MobilityProcedureNotification.schema.json create mode 100644 MEC021/SRV/AMS/schemas/NotificationSubscription.schema.json create mode 100644 MEC021/SRV/AMS/schemas/SubscriptionLinkList.schema.json diff --git a/MEC021/SRV/AMS/AMSService.robot b/MEC021/SRV/AMS/AMSService.robot index 25ed72c..f37cd12 100644 --- a/MEC021/SRV/AMS/AMSService.robot +++ b/MEC021/SRV/AMS/AMSService.robot @@ -9,69 +9,124 @@ Library REST ${AMS_SCHEMA}://${AMS_HOST}:${AMS_PORT} ssl_verify=false Library BuiltIn Library OperatingSystem Library MockServerLibrary - - +Library Collections *** Test Cases *** -TC_MEC_MEC021_SRV_AMS_001_OK + +# Get ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services +TC_MEC_MEC021_SRV_AMS_001_OK_01 [Documentation] Request Registered AMS information ... Check that the AMS service returns information about the registered application mobility services when requested - ... ETSI GS MEC 021 2.0.8, clause 8.3.3.1 + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS + + [Setup] Create two new application mobility service ${APP_MOBILITY_SERVICE_ID} ${APP_INS_ID} ${APP_MOBILITY_SERVICE_ID2} ${APP_INS_ID} + Get Registered AMS information Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppMobilityServiceInfos + FOR ${app} IN @{response['body']} + ${passed_appMobilityServiceId} Run Keyword And Return Status Should Be Equal As Strings ${app['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + ${passed_appInstanceId} Run Keyword And Return Status Should Be Equal As Strings ${app['serviceConsumerId']['appInstanceId']} ${APP_INS_ID} + Exit For Loop If ${passed_appMobilityServiceId} and ${passed_appInstanceId} + END + + Should be True ${passed_appMobilityServiceId} + Should be True ${passed_appInstanceId} + + FOR ${app} IN @{response['body']} + ${passed_appMobilityServiceId} Run Keyword And Return Status Should Be Equal As Strings ${app['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID2} + ${passed_appInstanceId} Run Keyword And Return Status Should Be Equal As Strings ${app['serviceConsumerId']['appInstanceId']} ${APP_INS_ID} + Exit For Loop If ${passed_appMobilityServiceId} and ${passed_appInstanceId} + END + + Should be True ${passed_appMobilityServiceId} + Should be True ${passed_appInstanceId} + + [TearDown] Delete two specific AMS services ${APP_MOBILITY_SERVICE_ID} ${APP_MOBILITY_SERVICE_ID2} + +TC_MEC_MEC021_SRV_AMS_001_OK_02 + [Documentation] Request Registered AMS information + ... Check that the AMS service returns information about the registered application mobility services when requested + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml + [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS + + [Setup] Create two new application mobility service ${APP_MOBILITY_SERVICE_ID} ${APP_INS_ID} ${APP_MOBILITY_SERVICE_ID2} ${APP_INS_ID} + + Get Registered AMS information using attribute-selector filter ${APP_MOBILITY_SERVICE_FILTER} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AppMobilityServiceInfos + + FOR ${app} IN @{response['body']} + ${passed_appMobilityServiceId} Run Keyword And Return Status Should Be Equal As Strings ${app['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + ${passed_appInstanceId} Run Keyword And Return Status Should Be Equal As Strings ${app['serviceConsumerId']['appInstanceId']} ${APP_INS_ID} + Exit For Loop If ${passed_appMobilityServiceId} and ${passed_appInstanceId} + END + + Should be True ${passed_appMobilityServiceId} + Should be True ${passed_appInstanceId} + + [TearDown] Delete two specific AMS services ${APP_MOBILITY_SERVICE_ID} ${APP_MOBILITY_SERVICE_ID2} + TC_MEC_MEC021_SRV_AMS_002_OK [Documentation] Request Registered AMS information using attribute-selector ... Check that the AMS service returns information about the registered application mobility services when requested - ... ETSI GS MEC 021 2.0.8, clause 8.3.3.1 + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get Registered AMS information using attribute-selector appMobilityServiceId ${APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppMobilityServiceInfos - Check Result Contains ${response['body']['AppMobilityServiceInfo']} appMobilityServiceId ${APP_MOBILITY_SERVICE_ID} + FOR ${app} IN @{response['body']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${app['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + Exit For Loop If ${passed} + END TC_MEC_MEC021_SRV_AMS_001_BR [Documentation] Request Registered AMS information using bad parameters ... Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters - ... ETSI GS MEC 021 2.0.8, clause 8.3.3.1 + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get Registered AMS information using bad parameters Check HTTP Response Status Code Is 400 - +# Post ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services TC_MEC_MEC021_SRV_AMS_003_OK [Documentation] Register a new application mobility services ... Check that the AMS service creates a new application mobility services when requested - ... ETSI GS MEC 021 2.0.8, clause 8.3.3.4 + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - Create a new application mobility service RegistrationInfo + Create a new application mobility service ${APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is AppMobilityServiceInfo - Log Checking Postcondition - Check Result Contains ${response['body']['AppMobilityServiceInfo']['registeredAppMobilityService']['serviceConsumerId']['']} appInstanceId ${APP_INS_ID} - + Should Be Equal As Strings ${response['body']['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} TC_MEC_MEC021_SRV_AMS_003_BR [Documentation] Register an UE Identity Tag using invalid parameter ... Check that the AMS service sends an error when it receives a malformed request to create a new application mobility service - ... ETSI GS MEC 021 2.0.8, clause 8.3.3.4 + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - Create a new application mobility service RegistrationInfoMalformed + Create a new application mobility service ${MALFORMED_APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 400 +# Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions TC_MEC_MEC021_SRV_AMS_004_OK [Documentation] Request Subscriptions List for the registered AMS services ... Check that the AMS service returns information about the available subscriptions when requested. ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription ... - AdjacentAppInfoSubscription" - ... ETSI GS MEC 021 2.0.8, clause 8.6.3.1 + ... ETSI GS MEC 021 3.3.1, clause 8.6.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get Subscriptions for registered AMS Check HTTP Response Status Code Is 200 @@ -82,19 +137,22 @@ TC_MEC_MEC021_SRV_AMS_004_OK TC_MEC_MEC021_SRV_AMS_004_BR [Documentation] Request Subscription List for registered AMS Services using wrong attribute parameters ... Check that the AMS service sends an error when it receives a malformed query about the available subscriptions + ... ETSI GS MEC 021 3.3.1, clause 8.6.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get Subscriptions for registered AMS with wrong attbirube parameter Check HTTP Response Status Code Is 400 - +# Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions TC_MEC_MEC021_SRV_AMS_005_OK [Documentation] Create a notification subscription ... Check that the AMS service creates a notification subscriptions when requested. ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription ... - AdjacentAppInfoSubscription" - ... ETSI GS MEC 021 2.0.8, clause 8.6.3.4 + ... ETSI GS MEC 021 3.3.1, clause 8.6.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Post a new notification subscription NotificationSubscription Check HTTP Response Status Code Is 201 @@ -107,20 +165,22 @@ TC_MEC_MEC021_SRV_AMS_005_BR ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription ... - AdjacentAppInfoSubscription" - ... ETSI GS MEC 021 2.0.8, clause 8.6.3.4 + ... ETSI GS MEC 021 3.3.1, clause 8.6.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Post a new notification subscription NotificationSubscriptionError Check HTTP Response Status Code Is 400 - +# Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${content} TC_MEC_MEC021_SRV_AMS_006_OK [Documentation] Request a specific subscription ... Check that the AMS service returns information about a given subscription when requested. ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription ... - AdjacentAppInfoSubscription" - ... ETSI GS MEC 021 2.0.8, clause 8.7.3.1 + ... ETSI GS MEC 021 3.3.1, clause 8.7.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get individual subscription for AMS services ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 200 @@ -131,19 +191,22 @@ TC_MEC_MEC021_SRV_AMS_006_OK TC_MEC_MEC021_SRV_AMS_006_NF [Documentation] Request a specific subscription using wrong identifier ... Check that the AMS service returns an error when receives a query about a not existing subscription - ... ETSI GS MEC 021 2.0.8, clause 8.7.3.1 + ... ETSI GS MEC 021 3.3.1, clause 8.7.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get individual subscription for AMS services ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 +# Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${identifier} TC_MEC_MEC021_SRV_AMS_007_OK [Documentation] Modify a specific subscription ... Check that the AMS service modifies a given subscription when requested. ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription ... - AdjacentAppInfoSubscription - ... ETSI GS MEC 021 2.0.8, clause 8.7.3.2 + ... ETSI GS MEC 021 3.3.1, clause 8.7.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Update individual subscription for AMS services ${SUBSCRIPTION_ID} NotificationSubscription Check HTTP Response Status Code Is 200 @@ -157,7 +220,8 @@ TC_MEC_MEC021_SRV_AMS_007_BR ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription ... - AdjacentAppInfoSubscription - ... ETSI GS MEC 021 2.0.8, clause 8.7.3.2 + ... ETSI GS MEC 021 3.3.1, clause 8.7.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Update individual subscription for AMS services ${SUBSCRIPTION_ID} NotificationSubscriptionError Check HTTP Response Status Code Is 400 @@ -166,16 +230,19 @@ TC_MEC_MEC021_SRV_AMS_007_BR TP_MEC_MEC021_SRV_AMS_007_NF [Documentation] Modify a specific subscription using wrong identifier ... Check that the AMS service sends an error when it receives a modify request for a not existing subscription. - ... ETSI GS MEC 021 2.0.8, clause 8.7.3.2 + ... ETSI GS MEC 021 3.3.1, clause 8.7.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Update individual subscription for AMS services ${NON_EXISTENT_SUBSCRIPTION_ID} NotificationSubscription Check HTTP Response Status Code Is 404 +# Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${content} TC_MEC_MEC021_SRV_AMS_008_OK [Documentation] Remove a specific subscription ... Check that the AMS service deletes a given subscription when requested - ... ETSI GS MEC 021 2.0.8, clause 8.7.3.5 + ... ETSI GS MEC 021 3.3.1, clause 8.7.3.5 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Delete individual subscription for AMS services ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 @@ -184,28 +251,32 @@ TC_MEC_MEC021_SRV_AMS_008_OK TC_MEC_MEC021_SRV_AMS_008_NF [Documentation] Remove a specific subscription using wrong identifier ... Check that the AMS service sends an error when it receives a delete request for a not existing subscription - ... ETSI GS MEC 021 2.0.8, clause 8.7.3.5 + ... ETSI GS MEC 021 3.3.1, clause 8.7.3.5 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Delete individual subscription for AMS services ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 + TC_MEC_MEC021_SRV_AMS_009_OK [Documentation] Post Mobility Procedure Notification ... Check that the AMS service sends an AMS notification about a mobility procedure ... if the AMS service has an associated subscription and the event is generated - ... ETSI GS MEC 021 2.0.8, clause 7.4.2 + ... ETSI GS MEC 021 3.3.1, clause 7.4.2 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - ${json}= Get File schemas/MobilityProcedureNotification.schema.json - Log Creating mock request and response to handle Mobility Procedure Notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} + Log TBD +# ${json}= Get File schemas/MobilityProcedureNotification.schema.json +# Log Creating mock request and response to handle Mobility Procedure Notification +# &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json} +# &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 +# Create Mock Expectation ${req} ${rsp} +# Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} +# Log Verifying results +# Verify Mock Expectation ${req} +# Log Cleaning the endpoint +# Clear Requests ${callback_endpoint} @@ -213,18 +284,20 @@ TC_MEC_MEC021_SRV_AMS_010_OK [Documentation] Post Adjacent Application Info Notification ... Check that the AMS service sends an AMS notification about adjacent application instances ... if the AMS service has an associated subscription and the event is generated - ... ETSI GS MEC 021 2.0.8, clause 7.4.3 + ... ETSI GS MEC 021 3.3.1, clause 7.4.3 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - ${json}= Get File schemas/AdjacentAppInfoNotification.schema.json - Log Creating mock request and response to handle Adjacent Application Info Notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} + Log TBD +# ${json}= Get File schemas/AdjacentAppInfoNotification.schema.json +# Log Creating mock request and response to handle Adjacent Application Info Notification +# &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json} +# &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 +# Create Mock Expectation ${req} ${rsp} +# Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} +# Log Verifying results +# Verify Mock Expectation ${req} +# Log Cleaning the endpoint +# Clear Requests ${callback_endpoint} @@ -232,25 +305,28 @@ TC_MEC_MEC021_SRV_AMS_011_OK [Documentation] Post Expire Notification ... Check that the AMS service sends an AMS notification on subscription expiration ... if the AMS service has an associated subscription and the event is generated - ... ETSI GS MEC 021 2.0.8, clause 7.4.4 + ... ETSI GS MEC 021 3.3.1, clause 7.4.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - ${json}= Get File schemas/ExpiryNotification.schema.json - Log Creating mock request and response to handle Expire Notification - &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 - Create Mock Expectation ${req} ${rsp} - Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} - Log Verifying results - Verify Mock Expectation ${req} - Log Cleaning the endpoint - Clear Requests ${callback_endpoint} - - - + Log TBD +# ${json}= Get File schemas/ExpiryNotification.schema.json +# Log Creating mock request and response to handle Expire Notification +# &{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json} +# &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 +# Create Mock Expectation ${req} ${rsp} +# Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req} +# Log Verifying results +# Verify Mock Expectation ${req} +# Log Cleaning the endpoint +# Clear Requests ${callback_endpoint} + + +# Get ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId} TC_MEC_MEC021_SRV_AMS_012_OK [Documentation] Request a specific AMS service ... Check that the AMS service returns information about this individual application mobility service ... ETSI GS MEC 021 2.0.10, clause 8.4.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get specific AMS service ${APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 200 @@ -262,21 +338,47 @@ TC_MEC_MEC021_SRV_AMS_012_NF [Documentation] Request a specific AMS Service using non existent identifier ... Check that the AMS service sends an error when receives a query about a not existing individual application mobility service ... ETSI GS MEC 021 2.0.10, clause 8.4.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get specific AMS service ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 404 - +# Put ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId} TC_MEC_MEC021_SRV_AMS_013_OK [Documentation] Modify a specific AMS service ... Check that the AMS service modifies the individual application mobility service when requested ... ETSI GS MEC 021 2.0.10, clause 8.4.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Modify a specific AMS service ${APP_MOBILITY_SERVICE_ID} RegistrationInfo Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppMobilityServiceInfo - Check Result Contains ${response['registeredAppMobilityService']['serviceConsumerId']} appInstanceId ${APP_INS_ID} + Should Be Equal As Strings ${response['body']['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + Should Be Equal As Strings ${response['body']['serviceConsumerId']['appInstanceId']} ${APP_MOBILITY_SERVICE_ID} # from req + #Check Result Contains ${response['registeredAppMobilityService']['serviceConsumerId']} appInstanceId ${APP_INS_ID} + +#ensure that { +# when { +# the IUT entity receives a vPUT containing +# uri indicating value "/amsi/v1/app_mobility_services/{APP_MOBILITY_SERVICE_ID_1}", +# body containing +# RegistrationInfo containing +# serviceConsumerId containing +# appInstanceId indicating value NEW_APP_INS_ID_NEW_1;;;; +# from the AMS_CLIENT entity +# } +# then { +# the IUT entity sends a HTTP_RESPONSE containing +# status set to "200 OK", +# body containing +# RegistrationInfo containing +# appMobilityServiceId indicating value APP_MOBILITY_SERVICE_ID_1, +# serviceConsumerId containing +# appInstanceId indicating value NEW_APP_INS_ID_NEW_1;;;; +# to the AMS_CLIENT entity +# } +#} @@ -284,6 +386,7 @@ TC_MEC_MEC021_SRV_AMS_013_NF [Documentation] Modify a specific AMS Service using non existent identifier ... Check that the AMS service sends an error when receives a request to modify a not existing individual application mobility service ... ETSI GS MEC 021 2.0.10, clause 8.4.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Modify a specific AMS service ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} RegistrationInfo Check HTTP Response Status Code Is 404 @@ -293,16 +396,19 @@ TC_MEC_MEC021_SRV_AMS_013_BR [Documentation] Modify a specific AMS Service using bad parameters ... Check that the AMS service sends an error when receives a request to modify a individual application mobility service using bad parameters ... ETSI GS MEC 021 2.0.10, clause 8.4.3.2 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Modify a specific AMS service ${APP_MOBILITY_SERVICE_ID} RegistrationInfoWithError Check HTTP Response Status Code Is 400 +# Delete ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId} TC_MEC_MEC021_SRV_AMS_014_OK [Documentation] Remove a specific AMS service ... Check that the AMS service de-register the individual application mobility service and delete the resource ... that represents the individual application mobility service ... ETSI GS MEC 021 2.0.10, clause 8.4.3.5 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Delete specific AMS service ${APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 204 @@ -313,16 +419,18 @@ TC_MEC_MEC021_SRV_AMS_014_NF ... Check that the AMS service sends an error when is requested to delete the resource ... that represents the individual application mobility service ... ETSI GS MEC 021 2.0.10, clause 8.4.3.5 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Delete specific AMS service ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 404 - +# POST ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices/${amsId}/deregisterTask TC_MEC_MEC021_SRV_AMS_015_OK [Documentation] Request to deregister a specific AMS service ... Check that the AMS service deregister an individual application mobility service on expiry of the timer associated with the service ... ETSI GS MEC 021 2.0.10, clause 8.5.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Deregister specific AMS service ${APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 204 @@ -333,6 +441,7 @@ TC_MEC_MEC021_SRV_AMS_015_NF [Documentation] Request to deregister a specific AMS service using non existent identifier ... Check that the AMS service send an error when is requested to deregister a not existent individual application mobility service ... ETSI GS MEC 021 2.0.10, clause 8.5.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Deregister specific AMS service ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 404 @@ -341,7 +450,7 @@ TC_MEC_MEC021_SRV_AMS_015_NF Get Registered AMS information Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices + Get ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services ${output}= Output response Set Suite Variable ${response} ${output} @@ -349,7 +458,7 @@ Get Registered AMS information using attribute-selector [Arguments] ${key} ${value} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices?${key}=${value} + Get ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services?${key}=${value} ${output}= Output response Set Suite Variable ${response} ${output} @@ -357,7 +466,7 @@ Get specific AMS service [Arguments] ${amsId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices/${amsId} + Get ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId} ${output}= Output response Set Suite Variable ${response} ${output} @@ -365,7 +474,7 @@ Get specific AMS service Get Registered AMS information using bad parameters Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices?appMobilityService=${APP_MOBILITY_SERVICE_ID} //param should be appMobilityServiceId + Get ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services?appMobilityService=${APP_MOBILITY_SERVICE_ID} #param should be appMobilityServiceId ${output}= Output response Set Suite Variable ${response} ${output} @@ -375,17 +484,29 @@ Modify a specific AMS service Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Put ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices/${amsId} ${content} + Put ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId} ${content} ${output}= Output response Set Suite Variable ${response} ${output} - Delete specific AMS service [Arguments] ${amsId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices/${amsId} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Delete two specific AMS services + [Arguments] ${amsId} ${amsId2} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId2} ${output}= Output response Set Suite Variable ${response} ${output} @@ -395,22 +516,54 @@ Deregister specific AMS service Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - POST ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices/${amsId}/deregisterTask + POST ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services/${amsId}/deregisterTask ${output}= Output response Set Suite Variable ${response} ${output} Create a new application mobility service - [Arguments] ${content} + [Arguments] ${appMobilityServiceId} ${appInstanceId} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= json/ ${content} .json + ${file}= Catenate SEPARATOR= json/ RegistrationInfo .json ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices ${body} + ${json_data}= Evaluate json.loads('''${body}''') json + Set To Dictionary ${json_data} appMobilityServiceId=${appMobilityServiceId} + Set To Dictionary ${json_data['serviceConsumerId']} appInstanceId=${appInstanceId} + ${modified_json_string}= Evaluate json.dumps(${json_data}) + Post ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services ${modified_json_string} ${output}= Output response Set Suite Variable ${response} ${output} - + +Create two new application mobility service + [Arguments] ${appMobilityServiceId} ${appInstanceId} ${appMobilityServiceId2} ${appInstanceId2} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= json/ RegistrationInfo .json + ${body}= Get File ${file} + ${json_data}= Evaluate json.loads('''${body}''') json + Set To Dictionary ${json_data} appMobilityServiceId=${appMobilityServiceId} + Set To Dictionary ${json_data['serviceConsumerId']} appInstanceId=${appInstanceId} + ${modified_json_string}= Evaluate json.dumps(${json_data}) + Post ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services ${modified_json_string} + ${output}= Output response + Set Suite Variable ${response} ${output} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= json/ RegistrationInfo .json + ${body}= Get File ${file} + ${json_data}= Evaluate json.loads('''${body}''') json + Set To Dictionary ${json_data} appMobilityServiceId=${appMobilityServiceId2} + Set To Dictionary ${json_data['serviceConsumerId']} appInstanceId=${appInstanceId2} + ${modified_json_string}= Evaluate json.dumps(${json_data}) + Post ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services ${modified_json_string} + ${output}= Output response + Set Suite Variable ${response} ${output} + + Get Subscriptions for registered AMS Set Headers {"Accept":"application/json"} @@ -456,7 +609,7 @@ Delete individual subscription for AMS services [Arguments] ${content} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${content} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${content} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC021/SRV/AMS/environment/variables.txt b/MEC021/SRV/AMS/environment/variables.txt index ce533f3..51c7216 100644 --- a/MEC021/SRV/AMS/environment/variables.txt +++ b/MEC021/SRV/AMS/environment/variables.txt @@ -6,11 +6,14 @@ ${AMS_PORT} 3006 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} -${apiName} +${apiName} amsi ${apiVersion} v1 # Specific variables -${APP_MOBILITY_SERVICE_ID} KtRGymNQ84dG3mQfRepa +${APP_MOBILITY_SERVICE_ID} APP_MOBILITY_SERVICE_ID +${APP_MOBILITY_SERVICE_ID2} APP_MOBILITY_SERVICE_ID2 +${MALFORMED_APP_MOBILITY_SERVICE_ID} MALFORMED_APP_MOBILITY_SERVICE_ID +${APP_MOBILITY_SERVICE_FILTER} (eq,appMobilityServiceId,APP_MOBILITY_SERVICE) ${APP_INS_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 diff --git a/MEC021/SRV/AMS/json/NotificationSubscription.json b/MEC021/SRV/AMS/json/NotificationSubscription.json new file mode 100644 index 0000000..9c2ed02 --- /dev/null +++ b/MEC021/SRV/AMS/json/NotificationSubscription.json @@ -0,0 +1,16 @@ +{ + "callbackReference": "http://example.com/callback", + "requestTestNotification": true, + "websockNotifConfig": { + "websocketUri": "ws://example.com/websocket", + "requestWebsocketUri": true + }, + "expiryDeadline": { + "seconds": 1644691200, + "nanoSeconds": 0 + }, + "filterCriteria": { + "appInstanceId": "app-123" + }, + "subscriptionType": "AdjacentAppInfoSubscription" +} \ No newline at end of file diff --git a/MEC021/SRV/AMS/json/NotificationSubscriptionError.json b/MEC021/SRV/AMS/json/NotificationSubscriptionError.json new file mode 100644 index 0000000..3c78fc9 --- /dev/null +++ b/MEC021/SRV/AMS/json/NotificationSubscriptionError.json @@ -0,0 +1,16 @@ +{ + "callbackReference": "http://example.com/callback", + "requestTestNotification": true, + "websockNotifConfig": { + "websocketUri": "ws://example.com/websocket", + "requestWebsocketUri": true + }, + "expiryDeadline": { + "seconds": 1644691200, + "nanoSeconds": 0 + }, + "filterCriteria": { + "appInstanceId": "app-123" + }, + "subscriptionType": "INVALID_SUBSCRIPTION_TYPE" +} \ No newline at end of file diff --git a/MEC021/SRV/AMS/json/RegistrationInfo.json b/MEC021/SRV/AMS/json/RegistrationInfo.json new file mode 100644 index 0000000..ac38cbf --- /dev/null +++ b/MEC021/SRV/AMS/json/RegistrationInfo.json @@ -0,0 +1,26 @@ +{ + "serviceConsumerId": { + "appInstanceId": "exampleAppInstanceId", + "mepId": "exampleMepId" + }, + "appMobilityServiceId": "exampleAppMobilityServiceId", + "deviceInformation": [ + { + "associateId": { + "type": "UE_IPv4_ADDRESS", + "value": "192.168.1.100" + }, + "appMobilityServiceLevel": "APP_MOBILITY_NOT_ALLOWED", + "contextTransferState": "NOT_TRANSFERRED" + }, + { + "associateId": { + "type": "UE_IPV6_ADDRESS", + "value": "2001:0db8:85a3:0000:0000:8a2e:0370:7334" + }, + "appMobilityServiceLevel": "APP_MOBILITY_WITH_CONFIRMATION", + "contextTransferState": "USER_CONTEXT_TRANSFER_COMPLETED" + } + ], + "expiryTime": 3600 +} \ No newline at end of file diff --git a/MEC021/SRV/AMS/schemas/AppMobilityServiceInfo.schema.json b/MEC021/SRV/AMS/schemas/AppMobilityServiceInfo.schema.json new file mode 100644 index 0000000..2af27c6 --- /dev/null +++ b/MEC021/SRV/AMS/schemas/AppMobilityServiceInfo.schema.json @@ -0,0 +1,99 @@ +{ + "title": "RegistrationInfo", + "required": [ + "serviceConsumerId" + ], + "type": "object", + "properties": { + "appMobilityServiceId": { + "type": "string", + "description": "The identifier of registered application mobility service. Shall be absent in POST requests, and present otherwise." + }, + "deviceInformation": { + "type": "array", + "items": { + "title": "RegistrationInfo.deviceInformation", + "required": [ + "associateId" + ], + "type": "object", + "properties": { + "associateId": { + "title": "AssociateId", + "required": [ + "type", + "value" + ], + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "UE_IPv4_ADDRESS", + "UE_IPV6_ADDRESS", + "NATED_IP_ADDRESS", + "GTP_TEID" + ], + "type": "string", + "description": "Numeric value (0-255) corresponding to specified type of identifier", + "examples": [ + "UE_IPv4_ADDRESS" + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "appMobilityServiceLevel": { + "title": "AppMobilityServiceLevel", + "enum": [ + "APP_MOBILITY_NOT_ALLOWED", + "APP_MOBILITY_WITH_CONFIRMATION", + "APP_MOBILITY_WITHOUT_CONFIRMATION" + ], + "type": "string", + "description": "This attribute provides an option for the application instance (server) to communicate with the application client before relocating this application instance to another MEC host.", + "examples": [ + "APP_MOBILITY_NOT_ALLOWED" + ] + }, + "contextTransferState": { + "title": "contextTransferState", + "enum": [ + "NOT_TRANSFERRED", + "USER_CONTEXT_TRANSFER_COMPLETED" + ], + "type": "string", + "description": "If present, it represents the state of transferring the user context to another application instance.", + "examples": [ + "NOT_TRANSFERRED" + ] + } + } + }, + "description": "If present, it specifies the device served by the application instance which is registering is registering the Application Mobility Service." + }, + "expiryTime": { + "type": "integer", + "description": "If present, it indicates the time of Application Mobility Service expiration from the time of registration accepted.The value \"0\" means infinite time, i.e. no expiration.The unit of expiry time is one second.", + "contentEncoding": "int32" + }, + "serviceConsumerId": { + "title": "RegistrationInfo.serviceConsumerId", + "type": "object", + "properties": { + "appInstanceId": { + "type": "string", + "description": "If present, it represents the identifier of the application instance registering the Application Mobility Service." + }, + "mepId": { + "type": "string", + "description": "If present, it represents the identifier of the MEC platform registering the Application Mobility Service." + } + }, + "description": "The identifier of service consumer requesting the application mobility service, i.e. either the application instance ID or the MEC platform ID." + } + } + } \ No newline at end of file diff --git a/MEC021/SRV/AMS/schemas/AppMobilityServiceInfos.schema.json b/MEC021/SRV/AMS/schemas/AppMobilityServiceInfos.schema.json new file mode 100644 index 0000000..5a64a8e --- /dev/null +++ b/MEC021/SRV/AMS/schemas/AppMobilityServiceInfos.schema.json @@ -0,0 +1,104 @@ +{ + "type": "array", + "items": { + "title": "RegistrationInfo", + "required": [ + "serviceConsumerId" + ], + "type": "object", + "properties": { + "appMobilityServiceId": { + "type": "string", + "description": "The identifier of registered application mobility service. Shall be absent in POST requests, and present otherwise." + }, + "deviceInformation": { + "type": "array", + "items": { + "title": "RegistrationInfo.deviceInformation", + "required": [ + "associateId" + ], + "type": "object", + "properties": { + "associateId": { + "title": "AssociateId", + "required": [ + "type", + "value" + ], + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "UE_IPv4_ADDRESS", + "UE_IPV6_ADDRESS", + "NATED_IP_ADDRESS", + "GTP_TEID" + ], + "type": "string", + "description": "Numeric value (0-255) corresponding to specified type of identifier", + "examples": [ + "UE_IPv4_ADDRESS" + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "appMobilityServiceLevel": { + "title": "AppMobilityServiceLevel", + "enum": [ + "APP_MOBILITY_NOT_ALLOWED", + "APP_MOBILITY_WITH_CONFIRMATION", + "APP_MOBILITY_WITHOUT_CONFIRMATION" + ], + "type": "string", + "description": "This attribute provides an option for the application instance (server) to communicate with the application client before relocating this application instance to another MEC host.", + "examples": [ + "APP_MOBILITY_NOT_ALLOWED" + ] + }, + "contextTransferState": { + "title": "contextTransferState", + "enum": [ + "NOT_TRANSFERRED", + "USER_CONTEXT_TRANSFER_COMPLETED" + ], + "type": "string", + "description": "If present, it represents the state of transferring the user context to another application instance.", + "examples": [ + "NOT_TRANSFERRED" + ] + } + } + }, + "description": "If present, it specifies the device served by the application instance which is registering is registering the Application Mobility Service." + }, + "expiryTime": { + "type": "integer", + "description": "If present, it indicates the time of Application Mobility Service expiration from the time of registration accepted.The value \"0\" means infinite time, i.e. no expiration.The unit of expiry time is one second.", + "contentEncoding": "int32" + }, + "serviceConsumerId": { + "title": "RegistrationInfo.serviceConsumerId", + "type": "object", + "properties": { + "appInstanceId": { + "type": "string", + "description": "If present, it represents the identifier of the application instance registering the Application Mobility Service." + }, + "mepId": { + "type": "string", + "description": "If present, it represents the identifier of the MEC platform registering the Application Mobility Service." + } + }, + "description": "The identifier of service consumer requesting the application mobility service, i.e. either the application instance ID or the MEC platform ID." + } + } + }, + "description": "", + "contentMediaType": "application/json" + } \ No newline at end of file diff --git a/MEC021/SRV/AMS/schemas/MobilityProcedureNotification.schema.json b/MEC021/SRV/AMS/schemas/MobilityProcedureNotification.schema.json new file mode 100644 index 0000000..e69de29 diff --git a/MEC021/SRV/AMS/schemas/NotificationSubscription.schema.json b/MEC021/SRV/AMS/schemas/NotificationSubscription.schema.json new file mode 100644 index 0000000..59a8198 --- /dev/null +++ b/MEC021/SRV/AMS/schemas/NotificationSubscription.schema.json @@ -0,0 +1,248 @@ +{ + "oneOf": [ + { + "title": "MobilityProcedureSubscription", + "required": [ + "filterCriteria", + "subscriptionType" + ], + "type": "object", + "properties": { + "_links": { + "title": "MobilityProcedureSubscription.links", + "required": [ + "self" + ], + "type": "object", + "properties": { + "self": { + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "The URI referring to the subscription." + } + }, + "description": "'This data type represents a type of link'" + } + } + }, + "callbackReference": { + "type": "string", + "format": "uri", + "description": "URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service. This shall be included both in the request and in response." + }, + "requestTestNotification": { + "type": "boolean", + "description": "Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, specified in ETSI GS MEC 009, as described in clause 6.12a." + }, + "websockNotifConfig": { + "description": "Provides details to negotiate and signal the use of a Websocket connection between AMS and the service consumer for notifications.", + "type": "object", + "properties": { + "websocketUri": { + "description": "Set by AMS to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "type": "string", + "format": "uri" + }, + "requestWebsocketUri": { + "type": "boolean", + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested." + } + } + }, + "expiryDeadline": { + "description": "Identifies a boundary after which the subscription will expire.", + "title": "TimeStamp", + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "properties": { + "seconds": { + "type": "integer", + "description": "'The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.'", + "contentEncoding": "int32" + }, + "nanoSeconds": { + "type": "integer", + "description": "'The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.'", + "contentEncoding": "int32" + } + } + }, + "filterCriteria": { + "title": "MobilityProcedureSubscription.filterCriteria", + "type": "object", + "properties": { + "appInstanceId": { + "type": "string", + "description": "Identifier of the application instance that registers the Application Mobility Service." + }, + "associateId": { + "type": "array", + "items": { + "title": "AssociateId", + "required": [ + "type", + "value" + ], + "type": "object", + "properties": { + "type": { + "title": "Type", + "enum": [ + "UE_IPv4_ADDRESS", + "UE_IPV6_ADDRESS", + "NATED_IP_ADDRESS", + "GTP_TEID" + ], + "type": "string", + "description": "Numeric value (0-255) corresponding to specified type of identifier", + "examples": [ + "UE_IPv4_ADDRESS" + ] + }, + "value": { + "type": "string", + "description": "Value for the identifier." + } + } + }, + "description": "0 to N identifiers to associate the information for specific UE(s) and flow(s)." + }, + "mobilityStatus": { + "type": "array", + "items": { + "title": "MobilityStatus", + "enum": [ + "INTERHOST_MOVEOUT_TRIGGERED", + "INTERHOST_MOVEOUT_COMPLETED", + "INTERHOST_MOVEOUT_FAILED" + ], + "type": "string", + "description": "Indicate the status of the UE mobility", + "examples": [ + "INTERHOST_MOVEOUT_TRIGGERED" + ] + }, + "description": "In case mobilityStatus is not included in the subscription request, the default value 1 = INTER_HOST_MOBILITY_TRIGGERED shall be used and included in the response." + } + }, + "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response." + }, + "subscriptionType": { + "const": "MobilityProcedureSubscription", + "type": "string", + "description": "Shall be set to \"MobilityProcedureSubscription\".", + "examples": [ + "MobilityProcedureSubscription" + ] + } + } + }, + { + "title": "AdjacentAppInfoSubscription", + "required": [ + "callbackReference", + "filterCriteria", + "subscriptionType" + ], + "type": "object", + "properties": { + "_links": { + "title": "AdjacentAppInfoSubscription.links", + "required": [ + "self" + ], + "type": "object", + "properties": { + "self": { + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "The URI referring to the subscription." + } + }, + "description": "'This data type represents a type of link'" + } + }, + "description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests." + }, + "callbackReference": { + "type": "string", + "format": "uri", + "description": "URI selected by the service consumer to receive notifications on the subscribed Application Mobility Service. This shall be included both in the request and in response." + }, + "requestTestNotification": { + "type": "boolean", + "description": "Shall be set to TRUE by the service consumer to request a test notification via HTTP on the callbackReference URI, specified in ETSI GS MEC 009, as described in clause 6.12a." + }, + "websockNotifConfig": { + "type": "object", + "properties": { + "websocketUri": { + "description": "Set by AMS to indicate to the service consumer the Websocket URI to be used for delivering notifications.", + "type": "string", + "format": "uri" + }, + "requestWebsocketUri": { + "type": "boolean", + "description": "Set to true by the service consumer to indicate that Websocket delivery is requested." + } + } + }, + "expiryDeadline": { + "description": "Identifies a boundary after which the subscription will expire.", + "title": "TimeStamp", + "required": [ + "seconds", + "nanoSeconds" + ], + "type": "object", + "properties": { + "seconds": { + "type": "integer", + "description": "'The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.'", + "contentEncoding": "int32" + }, + "nanoSeconds": { + "type": "integer", + "description": "'The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.'", + "contentEncoding": "int32" + } + } + }, + "filterCriteria": { + "title": "AdjacentAppInfoSubscription.filterCriteria", + "type": "object", + "properties": { + "appInstanceId": { + "type": "string" + } + }, + "description": "List of filtering criteria for the subscription. Any filtering criteria from below, which is included in the request, shall also be included in the response." + }, + "subscriptionType": { + "const": "AdjacentAppInfoSubscription", + "type": "string", + "description": "Shall be set to \"AdjacentAppInfoSubscription\".", + "examples": [ + "AdjacentAppInfoSubscription" + ] + } + } + } + ], + "contentMediaType": "application/json" +} \ No newline at end of file diff --git a/MEC021/SRV/AMS/schemas/SubscriptionLinkList.schema.json b/MEC021/SRV/AMS/schemas/SubscriptionLinkList.schema.json new file mode 100644 index 0000000..6c29b44 --- /dev/null +++ b/MEC021/SRV/AMS/schemas/SubscriptionLinkList.schema.json @@ -0,0 +1,64 @@ +{ + "title": "SubscriptionLinkList", + "required": [ + "_links" + ], + "type": "object", + "properties": { + "_links": { + "description": "Hyperlinks related to the resource.", + "title": "SubscriptionLinkList.links", + "required": [ + "self" + ], + "type": "object", + "properties": { + "self": { + "description": "URI of this resource.", + "title": "LinkType", + "required": [ + "href" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "The URI referring to the subscription." + } + } + }, + "subscription": { + "type": "array", + "description": "The service consumer’s subscriptions.", + "items": { + "title": "SubscriptionLinkList.subscription", + "required": [ + "href", + "subscriptionType" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "The URI referring to the subscription." + }, + "subscriptionType": { + "description": "The Subscription Type", + "title": "subscriptionType", + "enum": [ + 0, + 1, + 2 + ], + "type": "integer", + "examples": [ + 0 + ] + } + } + } + } + } + } + } +} \ No newline at end of file -- GitLab From c3a387cdb19e2dd69027f26db06b6f8c7edbbcbd Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Fri, 16 Feb 2024 17:37:16 +0100 Subject: [PATCH 56/94] fixed some bugs in MEC028 (bad filters) --- MEC021/SRV/AMS/AMSService.robot | 74 ++++++++++++++++---- MEC021/SRV/AMS/environment/variables.txt | 4 +- MEC028/WAI/AP_INFO/WaiApInfo.robot | 4 +- MEC028/WAI/AP_INFO/environment/variables.txt | 6 +- 4 files changed, 70 insertions(+), 18 deletions(-) diff --git a/MEC021/SRV/AMS/AMSService.robot b/MEC021/SRV/AMS/AMSService.robot index f37cd12..27a88f5 100644 --- a/MEC021/SRV/AMS/AMSService.robot +++ b/MEC021/SRV/AMS/AMSService.robot @@ -57,7 +57,7 @@ TC_MEC_MEC021_SRV_AMS_001_OK_02 [Setup] Create two new application mobility service ${APP_MOBILITY_SERVICE_ID} ${APP_INS_ID} ${APP_MOBILITY_SERVICE_ID2} ${APP_INS_ID} - Get Registered AMS information using attribute-selector filter ${APP_MOBILITY_SERVICE_FILTER} + Get Registered AMS information using attribute-selector filter ${APP_MOBILITY_SERVICE_FILTER_APP_MOBILITY_SERVICE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppMobilityServiceInfos @@ -73,40 +73,90 @@ TC_MEC_MEC021_SRV_AMS_001_OK_02 [TearDown] Delete two specific AMS services ${APP_MOBILITY_SERVICE_ID} ${APP_MOBILITY_SERVICE_ID2} -TC_MEC_MEC021_SRV_AMS_002_OK - [Documentation] Request Registered AMS information using attribute-selector - ... Check that the AMS service returns information about the registered application mobility services when requested +TC_MEC_MEC021_SRV_AMS_001_OK_03 + [Documentation] Request Registered AMS information + ... Check that the AMS service returns information about the a specific registered application mobility service when requested - filter ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - Get Registered AMS information using attribute-selector appMobilityServiceId ${APP_MOBILITY_SERVICE_ID} + + [Setup] Create two new application mobility service ${APP_MOBILITY_SERVICE_ID} ${APP_INS_ID} ${APP_MOBILITY_SERVICE_ID2} ${APP_INS_ID} + + Get Registered AMS information using attribute-selector filter ${APP_MOBILITY_SERVICE_FILTER_SERVICE_CONSUMER_ID} Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppMobilityServiceInfos + Check HTTP Response Body Json Schema Is AppMobilityServiceInfos + FOR ${app} IN @{response['body']} - ${passed} Run Keyword And Return Status Should Be Equal As Strings ${app['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} - Exit For Loop If ${passed} + ${passed_appMobilityServiceId} Run Keyword And Return Status Should Be Equal As Strings ${app['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + ${passed_appInstanceId} Run Keyword And Return Status Should Be Equal As Strings ${app['serviceConsumerId']['appInstanceId']} ${APP_INS_ID} + Exit For Loop If ${passed_appMobilityServiceId} and ${passed_appInstanceId} END - + + [TearDown] Delete two specific AMS services ${APP_MOBILITY_SERVICE_ID} ${APP_MOBILITY_SERVICE_ID2} + + +TC_MEC_MEC021_SRV_AMS_001_OK_04 + [Documentation] Request Registered AMS information + ... Check that the AMS service returns information about the a specific registered application mobility service when requested - filter + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml + [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS + + [Setup] Create two new application mobility service ${APP_MOBILITY_SERVICE_ID} ${APP_INS_ID} ${APP_MOBILITY_SERVICE_ID2} ${APP_INS_ID} + + Get Registered AMS information using attribute-selector filter ${APP_MOBILITY_SERVICE_FILTER_EXCLUDE_FIELDS} + Check HTTP Response Status Code Is 200 + #Check HTTP Response Body Json Schema Is AppMobilityServiceInfos + + FOR ${app} IN @{response['body']} + Should Be Equal As Strings ${app['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + Should Not Contain ${app} serviceConsumerId + END + + [TearDown] Delete two specific AMS services ${APP_MOBILITY_SERVICE_ID} ${APP_MOBILITY_SERVICE_ID2} + +#TC_MEC_MEC021_SRV_AMS_001_OK_05 +# [Documentation] Request Registered AMS information +# ... Check that the AMS service returns information about the registered application mobility services when requested - No registered application mobility service +# ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 +# ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml +# [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS + + TC_MEC_MEC021_SRV_AMS_001_BR [Documentation] Request Registered AMS information using bad parameters ... Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters ... ETSI GS MEC 021 3.3.1, clause 8.3.3.1 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get Registered AMS information using bad parameters Check HTTP Response Status Code Is 400 + # Post ${apiRoot}/${apiName}/${apiVersion}/app_mobility_services -TC_MEC_MEC021_SRV_AMS_003_OK +TC_MEC_MEC021_SRV_AMS_002_OK [Documentation] Register a new application mobility services ... Check that the AMS service creates a new application mobility services when requested ... ETSI GS MEC 021 3.3.1, clause 8.3.3.4 ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - Create a new application mobility service ${APP_MOBILITY_SERVICE_ID} + Create a new application mobility service ${APP_MOBILITY_SERVICE_ID} ${APP_INS_ID} Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is AppMobilityServiceInfo - Should Be Equal As Strings ${response['body']['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + Should Be Equal As Strings ${response['body']['appMobilityServiceId']} ${APP_MOBILITY_SERVICE_ID} + Should Be Equal As Strings ${response['body']['serviceConsumerId']['appInstanceId']} ${APP_INS_ID} + + +TC_MEC_MEC021_SRV_AMS_002_BR + [Documentation] Request Registered AMS information using bad parameters + ... Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters + ... ETSI GS MEC 021 3.3.1, clause 8.3.3.4 + ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml + [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS + + + TC_MEC_MEC021_SRV_AMS_003_BR [Documentation] Register an UE Identity Tag using invalid parameter diff --git a/MEC021/SRV/AMS/environment/variables.txt b/MEC021/SRV/AMS/environment/variables.txt index 51c7216..045ce68 100644 --- a/MEC021/SRV/AMS/environment/variables.txt +++ b/MEC021/SRV/AMS/environment/variables.txt @@ -13,7 +13,9 @@ ${apiVersion} v1 ${APP_MOBILITY_SERVICE_ID} APP_MOBILITY_SERVICE_ID ${APP_MOBILITY_SERVICE_ID2} APP_MOBILITY_SERVICE_ID2 ${MALFORMED_APP_MOBILITY_SERVICE_ID} MALFORMED_APP_MOBILITY_SERVICE_ID -${APP_MOBILITY_SERVICE_FILTER} (eq,appMobilityServiceId,APP_MOBILITY_SERVICE) +${APP_MOBILITY_SERVICE_FILTER_APP_MOBILITY_SERVICE_ID} (eq,appMobilityServiceId,APP_MOBILITY_SERVICE_ID) +${APP_MOBILITY_SERVICE_FILTER_SERVICE_CONSUMER_ID} (eq,serviceConsumerId[appInstanceId],5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f) +${APP_MOBILITY_SERVICE_FILTER_EXCLUDE_FIELDS} (eq,appMobilityServiceId,APP_MOBILITY_SERVICE_ID)&exclude_fields=[serviceConsumerId] ${APP_INS_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 diff --git a/MEC028/WAI/AP_INFO/WaiApInfo.robot b/MEC028/WAI/AP_INFO/WaiApInfo.robot index 39b43c5..a6a94ab 100644 --- a/MEC028/WAI/AP_INFO/WaiApInfo.robot +++ b/MEC028/WAI/AP_INFO/WaiApInfo.robot @@ -22,7 +22,7 @@ TC_MEC_MEC028_SRV_WAI_001_OK Check HTTP Response Body Json Schema Is ApInfo ## Post condition FOR ${apInfo} IN @{response['body']} - ${passed} Run Keyword And Return Status Should Be Equal As Strings ${apInfo['apId']['macId']} ${MAC_ID} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${apInfo['apId']['bssid']} ${BSS_ID} Exit For Loop If ${passed} END Should Be True ${passed} @@ -39,7 +39,7 @@ TC_MEC_MEC028_SRV_WAI_002_OK Check HTTP Response Body Json Schema Is ApInfo ## Post condition FOR ${apInfo} IN @{response['body']} - ${passed} Run Keyword And Return Status Should Be Equal As Strings ${apInfo['apId']['macId']} ${MAC_ID} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${apInfo['apId']['bssid']} ${BSS_ID} Exit For Loop If ${passed} END Should Be True ${passed} diff --git a/MEC028/WAI/AP_INFO/environment/variables.txt b/MEC028/WAI/AP_INFO/environment/variables.txt index b368c61..c19b668 100644 --- a/MEC028/WAI/AP_INFO/environment/variables.txt +++ b/MEC028/WAI/AP_INFO/environment/variables.txt @@ -9,9 +9,9 @@ ${MEC-APP_PORT} 3001 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${MAC_ID} macId01 -${filter} macId01 -${bad_filter} badMacId +${BSS_ID} bssId01 +${filter} (eq,bssid,bssId01) +${bad_filter} (eq,bss_id,bssId01) ${REGISTER_ACTION} REGISTER ${REMOVE_ACTION} REMOVE -- GitLab From a8ac0b59e19d2f90636a2b546b13baa2aaea42e1 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 13:04:31 +0100 Subject: [PATCH 57/94] Review of APPSAQ TCs of MEC011v3.2.1 --- MEC011/SRV/APPSAQ/PlatAppServices.robot | 75 +++++---- MEC011/SRV/APPSAQ/environment/variables.txt | 16 +- .../APPSAQ/environment/variables_sandbox.txt | 28 ++++ .../jsons/SerAvailabilityNotification.json | 9 ++ MEC011/SRV/APPSAQ/jsons/ServiceInfo.json | 1 - MEC011/SRV/APPSAQ/libraries/Server.py | 148 ++++++++++++++++++ ...bilityNotificationSubscription.schema.json | 136 ++++++++++++++++ 7 files changed, 376 insertions(+), 37 deletions(-) create mode 100644 MEC011/SRV/APPSAQ/environment/variables_sandbox.txt create mode 100644 MEC011/SRV/APPSAQ/jsons/SerAvailabilityNotification.json create mode 100644 MEC011/SRV/APPSAQ/libraries/Server.py create mode 100644 MEC011/SRV/APPSAQ/schemas/SerAvailabilityNotificationSubscription.schema.json diff --git a/MEC011/SRV/APPSAQ/PlatAppServices.robot b/MEC011/SRV/APPSAQ/PlatAppServices.robot index 2daddf9..7781340 100644 --- a/MEC011/SRV/APPSAQ/PlatAppServices.robot +++ b/MEC011/SRV/APPSAQ/PlatAppServices.robot @@ -4,8 +4,10 @@ Documentation ... A test suite for validating Application Service Availability Query (APPSAQ) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +#Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library libraries/Server.py Default Tags TC_MEC_SRV_APPSAQ @@ -22,6 +24,7 @@ TC_MEC_MEC011_SRV_APPSAQ_001_OK ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + Set Suite Variable ${SERVICE_ID} ${response['body']['serInstanceId']} Get a list of mecService of an application instance ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfoList @@ -33,7 +36,7 @@ TC_MEC_MEC011_SRV_APPSAQ_001_BR ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application ... - ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.5, + ... Reference ETSI G3.2.1 011 3.2.1, clause 5.2.5, ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -51,13 +54,16 @@ TC_MEC_MEC011_SRV_APPSAQ_002_OK ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, ... ETSI GS MEC 011 3.2.1, clause 8.2.6.3.4 [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is ServiceInfo Check HTTP Response Header Contains Location Check Response Contains ${response['body']} serName ${NEW_SERVICE_NAME} - ##TODO add notification server - + Spawn Notification Server SerAvailabilityNotificationSubscription + Validate Json SerAvailabilityNotificationSubscription.schema.json ${payload_notification} + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} + TC_MEC_MEC011_SRV_APPSAQ_002_BR [Documentation] @@ -96,6 +102,7 @@ TC_MEC_MEC011_SRV_APPSAQ_003_OK ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + Set Suite Variable ${SERVICE_ID} ${response['body']['serInstanceId']} Get individual service ${APP_INSTANCE_ID} ${SERVICE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfo @@ -127,6 +134,7 @@ TC_MEC_MEC011_SRV_APPSAQ_004_OK ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + Set Suite Variable ${SERVICE_ID} ${response['body']['serInstanceId']} Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfo @@ -143,7 +151,8 @@ TC_MEC_MEC011_SRV_APPSAQ_004_BR ... ETSI GS MEC 011 3.2.1, clause 8.1.2.2, ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES - [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + Set Suite Variable ${SERVICE_ID} ${response['body']['serInstanceId']} Update service ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdatedError Check HTTP Response Status Code Is 400 [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} @@ -173,6 +182,7 @@ TC_MEC_MEC011_SRV_APPSAQ_004_PF ... ETSI GS MEC 011 3.2.1, clause 8.2.7.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + Set Suite Variable ${SERVICE_ID} ${response['body']['serInstanceId']} Update service with etag ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated ${INVALID_ETAG} Check HTTP Response Status Code Is 412 [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} @@ -186,6 +196,7 @@ TC_MEC_MEC011_SRV_APPSAQ_005_OK ... Reference ETSI GS MEC 011 3.2.1, clause 8.2.7.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} + Set Suite Variable ${SERVICE_ID} ${response['body']['serInstanceId']} Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} Check HTTP Response Status Code Is 204 @@ -207,7 +218,7 @@ TC_MEC_MEC011_SRV_APPSAQ_005_NF Get a list of mecService of an application instance with parameters [Arguments] ${appInstanceId} ${key}=None ${value}=None Set Headers {"Accept":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services?${key}=${value} ${output}= Output response @@ -217,7 +228,7 @@ Get a list of mecService of an application instance [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Authorization":"${TOKEN}"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services ${output}= Output response Set Suite Variable ${response} ${output} @@ -228,11 +239,11 @@ Create new service Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} #Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - Log ${appInstanceId} Post ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services ${body} + Log ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services ${output}= Output response Set Suite Variable ${response} ${output} @@ -240,7 +251,7 @@ Create new service Get individual service [Arguments] ${appInstanceId} ${serviceName} Set Headers {"Accept":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services/${serviceName} ${output}= Output response @@ -250,7 +261,7 @@ Update service [Arguments] ${appInstanceId} ${serviceId} ${content} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Authorization":"${TOKEN}"} #Set Headers {"Content-Type":"*/*"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} @@ -262,7 +273,7 @@ Update service with etag [Arguments] ${appInstanceId} ${serviceId} ${content} ${etag} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Authorization":"${TOKEN}"} Set Headers {"If-Match":"${etag}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} @@ -274,31 +285,29 @@ Update service with etag Remove individual service [Arguments] ${appInstanceId} ${serviceName} Set Headers {"Accept":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Type":"*/*"} Delete ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services/${serviceName} ${output}= Output response Set Suite Variable ${response} ${output} - - -# Check Plaform IUT notifies the MEC Application instances - # [Documentation] - # ... + - # [Arguments] ${instance_id} ${content} +Create a new subscription + [Arguments] ${appInstanceId} ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ${content} .json + ${body}= Get File ${file} + Post ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + - # TODO check how to send the message (isn't defined). Does it need to be tested as it's not defined? +Spawn Notification Server + [Arguments] ${payload_notification} - # // MEC 011, clause 6.4.2 - # the IUT entity sends a notification_message containing - # body containing - # notificationType set to "SerAvailabilityNotification", - # services containing - # serName set to SERVICE_NAME - # _links containing - # subscription set to MP1_SUBSCRIPTION_A - # ; - # ; - # ; - # ; - # to the MEC_APP_Subscriber entity + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + ${length} = Get Length ${output} + Set Suite Variable ${payload_notification} ${output} + Run Keyword If ${length} == 0 Skip \ No newline at end of file diff --git a/MEC011/SRV/APPSAQ/environment/variables.txt b/MEC011/SRV/APPSAQ/environment/variables.txt index 2a6d207..198d3b0 100644 --- a/MEC011/SRV/APPSAQ/environment/variables.txt +++ b/MEC011/SRV/APPSAQ/environment/variables.txt @@ -1,16 +1,26 @@ *** Variables *** # Generic variables + +${response} {} +#########Env variable for validating TCs locally with Mockoon ${SCHEMA} http ${HOST} 127.0.0.1 -${PORT} 8081 -${response} {} +${PORT} 8082 ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} mec_service_mgmt ${apiVersion} v1 +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 + + # Specific variables -${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APP_INSTANCE_ID} f1e4d448-e277-496b-bf63-98391cfd20fb ${INSTANCE_ID} instance_id ${FAKE_INSTANCE_ID_VALUE} 5 ${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID diff --git a/MEC011/SRV/APPSAQ/environment/variables_sandbox.txt b/MEC011/SRV/APPSAQ/environment/variables_sandbox.txt new file mode 100644 index 0000000..3005fa3 --- /dev/null +++ b/MEC011/SRV/APPSAQ/environment/variables_sandbox.txt @@ -0,0 +1,28 @@ +*** Variables *** +# Generic variables + +${response} {} +####Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +#${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<replace_with_what_provided_by_sandbox>/mep1 +${apiName} mec_service_mgmt +${apiVersion} v1 + + +# Specific variables +${APP_INSTANCE_ID} f1e4d448-e277-496b-bf63-98391cfd20fb +${INSTANCE_ID} instance_id +${FAKE_INSTANCE_ID_VALUE} 5 +${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID +${SERVICE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_EXISTENT_SERVICE_ID} NON_EXISTENT_SERVICE_ID + +## this parameter should be the same as in jsons/ServiceInfo.json on param serName +${NEW_SERVICE_NAME} NEW_SERVICE_NAME + +## this parameter should be the same as in jsons/ServiceInfoUpdated.json on param sversion +${SVC_NEW_VERSION} v2.0 +${INVALID_ETAG} INVALID_ETAG \ No newline at end of file diff --git a/MEC011/SRV/APPSAQ/jsons/SerAvailabilityNotification.json b/MEC011/SRV/APPSAQ/jsons/SerAvailabilityNotification.json new file mode 100644 index 0000000..fbdcc23 --- /dev/null +++ b/MEC011/SRV/APPSAQ/jsons/SerAvailabilityNotification.json @@ -0,0 +1,9 @@ +{ + "subscriptionType": "SerAvailabilityNotificationSubscription", + "callbackReference": "http://127.0.0.1:8888/someendpoint", + "_links": { + "self": { + "href": "http://127.0.0.1:8888/someendpoint" + } + } +} \ No newline at end of file diff --git a/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json index 1cc5adf..74c6770 100644 --- a/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json +++ b/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json @@ -3,6 +3,5 @@ "version": "0.1", "state": "INACTIVE", "serializer": "XML", - "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", "transportId": "transportId" } \ No newline at end of file diff --git a/MEC011/SRV/APPSAQ/libraries/Server.py b/MEC011/SRV/APPSAQ/libraries/Server.py new file mode 100644 index 0000000..fb64670 --- /dev/null +++ b/MEC011/SRV/APPSAQ/libraries/Server.py @@ -0,0 +1,148 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + ## If a notification is received, then is returned. Otherwise an empty dictionary. + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + + ##OLD mechanism commented: if no response is received, then read the Notification JSON file and return it. + notification_json= import_notification_json(self.handler.get_resp_body()) + #return notification_json ##Decomment if you want to use the notification read from file + return {} + diff --git a/MEC011/SRV/APPSAQ/schemas/SerAvailabilityNotificationSubscription.schema.json b/MEC011/SRV/APPSAQ/schemas/SerAvailabilityNotificationSubscription.schema.json new file mode 100644 index 0000000..f779ccc --- /dev/null +++ b/MEC011/SRV/APPSAQ/schemas/SerAvailabilityNotificationSubscription.schema.json @@ -0,0 +1,136 @@ +{ + "title": "SerAvailabilityNotificationSubscription", + "required": [ + "subscriptionType", + "callbackReference", + "_links" + ], + "type": "object", + "properties": { + "subscriptionType": { + "type": "string", + "description": "Shall be set to SerAvailabilityNotificationSubscription.", + "examples": [ + "SerAvailabilityNotificationSubscription" + ] + }, + "callbackReference": { + "type": "string", + "description": "URI selected by the MEC application instance to receive notifications on the subscribed MEC service availability information. This shall be included in both the request and the response." + }, + "_links": { + "title": "Self", + "required": [ + "self" + ], + "type": "object", + "properties": { + "self": { + "title": "LinkType", + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "URI referring to a resource", + "examples": [ + "/mecSerMgmtApi/example" + ] + } + }, + "description": "This type represents a type of link and may be referenced from data structures" + } + }, + "description": "Self-referring URI." + }, + "filteringCriteria": { + "title": "SerAvailabilityNotificationSubscription.FilteringCriteria", + "type": "object", + "properties": { + "serInstanceIds": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Identifiers of service instances about which to report events." + }, + "serNames": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Names of services about which to report events." + }, + "serCategories": { + "type": "array", + "items": { + "title": "CategoryRef", + "required": [ + "href", + "id", + "name", + "version" + ], + "type": "object", + "properties": { + "href": { + "type": "string", + "description": "Reference of the catalogue", + "examples": [ + "/example/catalogue1" + ] + }, + "id": { + "type": "string", + "description": "Unique identifier of the category", + "examples": [ + "id12345" + ] + }, + "name": { + "type": "string", + "description": "Name of the category, example values include RNI, Location & Bandwidth Management", + "examples": [ + "RNI" + ] + }, + "version": { + "type": "string", + "description": "Category version", + "examples": [ + "version1" + ] + } + }, + "description": "This type represents the category reference" + }, + "description": "Categories of services about which to report events." + }, + "states": { + "type": "array", + "items": { + "title": "ServiceState", + "enum": [ + "ACTIVE", + "INACTIVE", + "SUSPENDED" + ], + "type": "string", + "description": "This enumeration defines the possible states of a service.", + "examples": [ + "ACTIVE" + ] + }, + "description": "States of the services about which to report events. If the event is a state change, this filter represents the state after the change." + }, + "isLocal": { + "type": "boolean", + "description": "Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application.", + "examples": [ + true + ] + } + }, + "description": "Filtering criteria to match services for which events are requested to be reported. If absent, matches all services. All child attributes are combined with the logical \"AND\" operation." + } + } + } \ No newline at end of file -- GitLab From 63bee5d5dfcd3667bd57b9c1e1284b930beecc53 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 14:38:10 +0100 Subject: [PATCH 58/94] Review of APPSUB TCs of MEC011v3.2.1 --- MEC011/SRV/APPSUB/PlatAppSubscriptions.robot | 19 +++++---- MEC011/SRV/APPSUB/environment/variables.txt | 5 ++- .../APPSUB/environment/variables_sandbox.txt | 40 +++++++++++++++++++ ...ppTerminationNotificationSubscription.json | 2 +- 4 files changed, 56 insertions(+), 10 deletions(-) create mode 100644 MEC011/SRV/APPSUB/environment/variables_sandbox.txt diff --git a/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot index 4a2edb7..80e7e90 100644 --- a/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot +++ b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot @@ -4,7 +4,7 @@ Documentation ... A test suite for validating Application Subscriptions (APPSUB) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem Library String @@ -23,7 +23,7 @@ TC_MEC_MEC011_SRV_APPSUB_001_OK [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription ${elements} = Split String ${response['body']['_links']['self']['href']} / - Set Suite Variable ${SUB_ID} ${elements[3]} + Set Suite Variable ${SUB_ID} ${elements[-1]} Get Subscriptions list ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SubscriptionsLinkList @@ -38,7 +38,7 @@ TC_MEC_MEC011_SRV_APPSUB_001_NF ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - [TearDown] Remove subscription ${NON_EXISTENT_APP_INSTANCE_ID} ${SUB_ID} + [Setup] Remove subscription ${NON_EXISTENT_APP_INSTANCE_ID} ${SUB_ID} Get Subscriptions list ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 @@ -51,15 +51,16 @@ TC_MEC_MEC011_SRV_APPSUB_002_OK ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.6", ... "ETSI GS MEC 011 3.2.1, clause 7.2.3.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES + Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription + ${CALLBACK_REF} Get value entry from JSON file AppTerminationNotificationSubscription callbackReference ${elements} = Split String ${response['body']['_links']['self']['href']} / - Set Suite Variable ${SUB_ID} ${elements[3]} - + Set Suite Variable ${SUB_ID} ${elements[-1]} Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is AppTerminationNotificationSubscription Check HTTP Response Header Contains Location Check Response Contains ${response['body']} subscriptionType AppTerminationNotificationSubscription - Check Response Contains ${response['body']} callbackReference ${APP_TERM_NOTIF_CALLBACK_URI} + Check Response Contains ${response['body']} callbackReference ${CALLBACK_REF} [TearDown] Remove subscription ${APP_INSTANCE_ID} ${SUB_ID} @@ -85,7 +86,7 @@ TC_MEC_MEC011_SRV_APPSUB_003_OK [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription ${elements} = Split String ${response['body']['_links']['self']['href']} / - Set Suite Variable ${SUB_ID} ${elements[3]} + Set Suite Variable ${SUB_ID} ${elements[-1]} Get individual subscription ${APP_INSTANCE_ID} ${SUB_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is AppTerminationNotificationSubscription @@ -114,7 +115,9 @@ TC_MEC_MEC011_SRV_APPSUB_004_OK ... "ETSI GS MEC 011 3.2.1, clause 7.2.4.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new subscription ${APP_INSTANCE_ID} AppTerminationNotificationSubscription - Remove subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} + ${elements} = Split String ${response['body']['_links']['self']['href']} / + Set Suite Variable ${SUB_ID} ${elements[-1]} + Remove subscription ${APP_INSTANCE_ID} ${SUB_ID} Check HTTP Response Status Code Is 204 diff --git a/MEC011/SRV/APPSUB/environment/variables.txt b/MEC011/SRV/APPSUB/environment/variables.txt index aa73f74..f983b98 100644 --- a/MEC011/SRV/APPSUB/environment/variables.txt +++ b/MEC011/SRV/APPSUB/environment/variables.txt @@ -10,7 +10,10 @@ ${apiName} mec_app_support ${apiVersion} v1 # Specific variables -${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f + +# Specific variables +#${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APP_INSTANCE_ID} f1e4d448-e277-496b-bf63-98391cfd20fb ${NON_EXISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID diff --git a/MEC011/SRV/APPSUB/environment/variables_sandbox.txt b/MEC011/SRV/APPSUB/environment/variables_sandbox.txt new file mode 100644 index 0000000..3c8c9ab --- /dev/null +++ b/MEC011/SRV/APPSUB/environment/variables_sandbox.txt @@ -0,0 +1,40 @@ +*** Variables *** +####Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<identifier_provided_by_the_sandbox>/mep1 +${apiName} mec_app_support +${apiVersion} v1 + + +# Specific variables + +# Specific variables +#${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APP_INSTANCE_ID} f1e4d448-e277-496b-bf63-98391cfd20fb +${NON_EXISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID + + +${APP_TERM_NOTIF_CALLBACK_URI} http://127.0.0.1/subscribe + +${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID +${SUB_ID} + + +# ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription +# ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +# +# ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} NON_EXISTENT_APP_MOBILITY_SERVICE_ID + +# # Notifications variables +# ${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar + +# ${callback_port} 9091 +# ${callback_uri} http://172.22.1.7:${callback_port} +# ${callback_endpoint} /amsi/subscriptions +# ${callback_endpoint_error} /subs_404 +# ${total_polling_time} 2 min +# ${polling_interval} 10 sec diff --git a/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json b/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json index eb61a28..2975227 100644 --- a/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json +++ b/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json @@ -6,5 +6,5 @@ "href": "https://somewhere.com/mecAppSuptApi/example" } }, - "appInstanceId": "appIntanceId" + "appInstanceId": "f1e4d448-e277-496b-bf63-98391cfd20fb" } \ No newline at end of file -- GitLab From e9e1ead8a91898c93ac7e274173f826477cffea3 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 14:52:23 +0100 Subject: [PATCH 59/94] Review of CONFTASK TCs of MEC011v3.2.1 --- MEC011/SRV/CONFTASK/PlatConfirmation.robot | 19 +++++++--------- .../environment/variables_sandbox.txt | 22 +++++++++++++++++++ 2 files changed, 30 insertions(+), 11 deletions(-) create mode 100644 MEC011/SRV/CONFTASK/environment/variables_sandbox.txt diff --git a/MEC011/SRV/CONFTASK/PlatConfirmation.robot b/MEC011/SRV/CONFTASK/PlatConfirmation.robot index 32f4ff7..cc52e8b 100644 --- a/MEC011/SRV/CONFTASK/PlatConfirmation.robot +++ b/MEC011/SRV/CONFTASK/PlatConfirmation.robot @@ -4,18 +4,15 @@ Documentation ... A test suite for validating Platform Configuration (CONF) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt -Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +#Resource environment/variables.txt +Resource environment/variables_sandbox.txt +Library REST ${SCHEMA}://${HOST}:${PORT} Library OperatingSystem Default Tags TC_MEC_SRV_CONF -*** Variables *** - - *** Test Cases *** - TC_MEC_MEC011_SRV_CONFTASK_001_OK [Documentation] ... Check that the IUT responds that it has completed @@ -71,7 +68,7 @@ TC_MEC_MEC011_SRV_CONFTASK_002_NF ... "ETSI GS MEC 011 3.2.1, clause 7.1.4.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.11.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES - [Teardown] Delete MEC application instance profile ${NON_EXISTING_APP_INSTANCE_ID} + [Setup] Delete MEC application instance profile ${NON_EXISTING_APP_INSTANCE_ID} Request readiness status of MEC Application ${NON_EXISTING_APP_INSTANCE_ID} AppReadyConfirmation Check HTTP Response Status Code Is 404 @@ -85,7 +82,7 @@ Create a new MEC application instance profile Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - POST http://${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations ${body} + Post ${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations ${body} ${output}= Output response Set Suite Variable ${response} ${output} Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['appInstanceId']} @@ -98,7 +95,7 @@ Delete MEC application instance profile Set Headers {"Content-Type":"application/json"} #Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Delete http://${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations/${app_instance_id} + Delete ${HOST_REG_APP}:${PORT_REG_APP}/${apiRoot_REG_APP}${apiName_REG_APP}/${apiVersion_REG_APP}/registrations/${app_instance_id} ${output}= Output response Set Suite Variable ${response} ${output} @@ -109,7 +106,7 @@ Request termination of MEC Application Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - POST ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/confirm_termination ${body} + Post ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/confirm_termination ${body} ${output}= Output response Set Suite Variable ${response} ${output} @@ -121,6 +118,6 @@ Request readiness status of MEC Application Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - POST ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/confirm_ready ${body} + Post ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/confirm_ready ${body} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC011/SRV/CONFTASK/environment/variables_sandbox.txt b/MEC011/SRV/CONFTASK/environment/variables_sandbox.txt new file mode 100644 index 0000000..221c7b7 --- /dev/null +++ b/MEC011/SRV/CONFTASK/environment/variables_sandbox.txt @@ -0,0 +1,22 @@ +*** Variables *** +# Generic variables +####Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} <your_id_from_sandbox>/mep1 +${apiName} mec_app_support +${apiVersion} v1 + +${HOST_REG_APP} try-mec.etsi.org +${PORT_REG_APP} 443 +${apiRoot_REG_APP} /sbxjbxjt4s/mep1 +${apiName_REG_APP} mec_app_support +${apiVersion_REG_APP} v1 + + +# Specific variables +#${APP_INSTANCE_ID} +${APP_INSTANCE_ID} 298b2c0c-7efa-45d3-8b47-8ab3c009b845 +${NON_EXISTING_APP_INSTANCE_ID} NON_EXISTING_APP_INSTANCE_ID \ No newline at end of file -- GitLab From 47725eb1906f761521e5edd21d0bfc4f8ea232df Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 15:02:07 +0100 Subject: [PATCH 60/94] Review of DNS TCs of MEC011v3.2.1 --- MEC011/SRV/DNS/PlatDnsRules.robot | 23 ++++------ .../SRV/DNS/environment/variables_sandbox.txt | 46 +++++++++++++++++++ 2 files changed, 55 insertions(+), 14 deletions(-) create mode 100644 MEC011/SRV/DNS/environment/variables_sandbox.txt diff --git a/MEC011/SRV/DNS/PlatDnsRules.robot b/MEC011/SRV/DNS/PlatDnsRules.robot index b5c29f4..6776a15 100644 --- a/MEC011/SRV/DNS/PlatDnsRules.robot +++ b/MEC011/SRV/DNS/PlatDnsRules.robot @@ -4,18 +4,15 @@ Documentation ... A test suite for validating DNS rules (DNS) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +#Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem Default Tags TC_MEC_SRV_DNS -*** Variables *** - - *** Test Cases *** - TC_MEC_MEC011_SRV_DNS_001_OK [Documentation] ... Check that the IUT responds with a list of active DNS rules @@ -40,7 +37,7 @@ TC_MEC_MEC011_SRV_DNS_001_NF ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.9.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - [Teardown] Delete MEC application instance profile ${NOT_EXISTENT_APP_INSTANCE_ID} + [Setup] Delete MEC application instance profile ${NOT_EXISTENT_APP_INSTANCE_ID} Get list of active DNS rules ${NOT_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 @@ -57,7 +54,6 @@ TC_MEC_MEC011_SRV_DNS_002_OK ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo - Get individual DNS rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is DnsRule @@ -74,7 +70,6 @@ TC_MEC_MEC011_SRV_DNS_002_NF ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - Get individual DNS rule ${APP_INSTANCE_ID} ${NON_ESISTENT_DNS_RULE_ID} Check HTTP Response Status Code Is 404 @@ -86,7 +81,7 @@ TC_MEC_MEC011_SRV_DNS_003_OK ... ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", - ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo Update a DNS Rule ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdate @@ -104,7 +99,7 @@ TC_MEC_MEC011_SRV_DNS_003_BR ... ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", - ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo @@ -120,7 +115,7 @@ TC_MEC_MEC011_SRV_DNS_003_NF ... ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", - ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo @@ -137,7 +132,7 @@ TC_MEC_MEC011_SRV_DNS_003_PF ... ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.8", ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.3", - ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.1" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.10.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo Update a DNS Rule with invalid etag ${APP_INSTANCE_ID} ${DNS_RULE_ID} DnsRuleUpdate @@ -200,7 +195,7 @@ Update a DNS Rule Set Headers {"If-Match": "${VALID_ETAG}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - PUT ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules/${dnsRuleId} ${body} + Put ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules/${dnsRuleId} ${body} ${output}= Output response Set Suite Variable ${response} ${output} @@ -213,6 +208,6 @@ Update a DNS Rule with invalid etag Set Headers {"If-Match": "${INVALID_ETAG}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - PUT ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules/${dnsRuleId} ${body} + Put ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules/${dnsRuleId} ${body} ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC011/SRV/DNS/environment/variables_sandbox.txt b/MEC011/SRV/DNS/environment/variables_sandbox.txt new file mode 100644 index 0000000..b4dc4ef --- /dev/null +++ b/MEC011/SRV/DNS/environment/variables_sandbox.txt @@ -0,0 +1,46 @@ +*** Variables *** + +#### Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} mec_app_support +${apiVersion} v1 +${APP_INSTANCE_ID} f1e4d448-e277-496b-bf63-98391cfd20fb + +# Specific variables +${HOST_REG_APP} 127.0.0.1 +${PORT_REG_APP} 8082 +${apiRoot_REG_APP} +${apiName_REG_APP} mec_app_support +${apiVersion_REG_APP} v2 +${response} {} + + + + +#${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${NOT_EXISTENT_APP_INSTANCE_ID} NOT_EXISTENT_APP_INSTANCE_ID +${DNS_RULE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_ESISTENT_DNS_RULE_ID} NON_ESISTENT_DNS_RULE_ID +${INVALID_ETAG} INVALID_ETAG +${VALID_ETAG} abcdef + +${SOME_IP_ADDRESS} 146.241.7.3 + +# ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription +# ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +# ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID +# ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} NON_EXISTENT_APP_MOBILITY_SERVICE_ID + +# # Notifications variables +# ${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar + +# ${callback_port} 9091 +# ${callback_uri} http://172.22.1.7:${callback_port} +# ${callback_endpoint} /amsi/subscriptions +# ${callback_endpoint_error} /subs_404 +# ${total_polling_time} 2 min +# ${polling_interval} 10 sec \ No newline at end of file -- GitLab From 04a7259eb759f971ef9e68d681484d41f193fd30 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 15:41:27 +0100 Subject: [PATCH 61/94] Review of MLS TCs of MEC011v3.2.1 --- MEC011/SRV/MLS/Liveness.robot | 29 +++++++++++---- MEC011/SRV/MLS/environment/variables.txt | 3 +- .../SRV/MLS/environment/variables_sandbox.txt | 35 +++++++++++++++++++ MEC011/SRV/MLS/jsons/ServiceInfo.json | 4 +-- 4 files changed, 61 insertions(+), 10 deletions(-) create mode 100644 MEC011/SRV/MLS/environment/variables_sandbox.txt diff --git a/MEC011/SRV/MLS/Liveness.robot b/MEC011/SRV/MLS/Liveness.robot index 7dbf1ad..6f3906f 100644 --- a/MEC011/SRV/MLS/Liveness.robot +++ b/MEC011/SRV/MLS/Liveness.robot @@ -4,7 +4,7 @@ Documentation ... A test suite for validating MEC Liveness Service (MLS) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -34,7 +34,7 @@ TC_MEC_MEC011_SRV_MSL_001_NF ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.4", ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES - Individual MEC service liveness ${NOT_EXISING_URL_SERVICE_MEC_LIVENESS} + Individual MEC service liveness ${NOT_EXISTING_URL_SERVICE_MEC_LIVENESS} Check HTTP Response Status Code Is 404 @@ -66,7 +66,6 @@ TC_MEC_MEC011_SRV_MSL_002_OK_02 ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3" [Tags] PIC_MEC_PLAT PIC_SERVICES Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ServiceLivenessUpdate .json ${body}= Get File ${file} Update MEC service liveness ${URL_SERVICE_MEC_LIVENESS} ${body} @@ -77,8 +76,8 @@ TC_MEC_MEC011_SRV_MSL_002_BR [Documentation] ... Check that the IUT responds with an error when ... incorrect parameters were sent by a MEC Application - ... Reference "ETSI GS MEC 011 3.2.1, clause 8.1.2.5", - ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3", + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.12", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.5", ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3" [Tags] PIC_MEC_PLAT PIC_SERVICES Set Headers {"Authorization":"${TOKEN}"} @@ -89,6 +88,21 @@ TC_MEC_MEC011_SRV_MSL_002_BR Check HTTP Response Status Code Is 400 +TC_MEC_MEC011_SRV_MSL_002_NF + [Documentation] + ... Check that the IUT responds with an error when + ... a request for an URI that cannot be mapped to a valid + ... resource URI is sent by a MEC Application + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.12", + ... "ETSI GS MEC 011 3.2.1, clause 8.1.2.5", + ... "ETSI GS MEC 011 3.2.1, clause 8.2.10.3.3" + [Tags] PIC_MEC_PLAT PIC_SERVICES + Set Headers {"Authorization":"${TOKEN}"} + ${file}= Catenate SEPARATOR= jsons/ ServiceLivenessUpdateError .json + ${body}= Get File ${file} + Update MEC service liveness ${NOT_EXISTING_URL_SERVICE_MEC_LIVENESS} ${body} + Check HTTP Response Status Code Is 404 + *** Keywords *** Create new service [Arguments] ${content} ${appInstanceId} @@ -98,7 +112,8 @@ Create new service Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - POST http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services ${body} + POST ${SCHEMA_APP_SAQ}://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services ${body} + Log ${SCHEMA_APP_SAQ}://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services ${output}= Output response Set Suite Variable ${response} ${output} Set Suite Variable ${LIVENESS_URI} ${response['body']['_links']['liveness']['href']} @@ -111,7 +126,7 @@ Remove individual service Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Type":"*/*"} - DELETE http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services/${serviceName} + DELETE ${SCHEMA_APP_SAQ}://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services/${serviceName} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC011/SRV/MLS/environment/variables.txt b/MEC011/SRV/MLS/environment/variables.txt index c421169..53aa16a 100644 --- a/MEC011/SRV/MLS/environment/variables.txt +++ b/MEC011/SRV/MLS/environment/variables.txt @@ -9,10 +9,11 @@ ${apiRoot} # Specific variables ${URL_SERVICE_MEC_LIVENESS} /link/to/individual/mecServiceLiveness -${NOT_EXISING_URL_SERVICE_MEC_LIVENESS} /not_existing_link/to/individual/mecServiceLiveness +${NOT_EXISTING_URL_SERVICE_MEC_LIVENESS} /not_existing_link/to/individual/mecServiceLiveness #Variables for test setups and teardowns +${SCHEMA_APP_SAQ} http ${HOST_APP_SAQ} 127.0.0.1 ${PORT_APP_SAQ} 8082 ${apiRoot_APP_SAQ} diff --git a/MEC011/SRV/MLS/environment/variables_sandbox.txt b/MEC011/SRV/MLS/environment/variables_sandbox.txt new file mode 100644 index 0000000..0c4a2a2 --- /dev/null +++ b/MEC011/SRV/MLS/environment/variables_sandbox.txt @@ -0,0 +1,35 @@ +*** Variables *** +#### Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} mec_app_support +${apiVersion} v1 +${APP_INSTANCE_ID} b8ae165a-a1e3-4d6c-86d9-52c59ad314b6 + +${SCHEMA_APP_SAQ} https +${HOST_APP_SAQ} try-mec.etsi.org +${PORT_APP_SAQ} 443 +${apiRoot_APP_SAQ} sbxjbxjt4s/mep1/ +${apiName_APP_SAQ} mec_service_mgmt +${apiVersion_APP_SAQ} v1 +${APP_INSTANCE_ID} appInstanceId +${SERVICE_NAME} + +#### + +# Specific variables +${URL_SERVICE_MEC_LIVENESS} /link/to/individual/mecServiceLiveness +${NOT_EXISTING_URL_SERVICE_MEC_LIVENESS} /not_existing_link/to/individual/mecServiceLiveness + + +#Variables for test setups and teardowns +#${HOST_APP_SAQ} 127.0.0.1 +#${PORT_APP_SAQ} 8082 +#${apiRoot_APP_SAQ} +#${apiName_APP_SAQ} mec_service_mgmt +#${apiVersion_APP_SAQ} v1 +#${APP_INSTANCE_ID} appInstanceId +#${SERVICE_NAME} diff --git a/MEC011/SRV/MLS/jsons/ServiceInfo.json b/MEC011/SRV/MLS/jsons/ServiceInfo.json index 1cc5adf..135d02e 100644 --- a/MEC011/SRV/MLS/jsons/ServiceInfo.json +++ b/MEC011/SRV/MLS/jsons/ServiceInfo.json @@ -3,6 +3,6 @@ "version": "0.1", "state": "INACTIVE", "serializer": "XML", - "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", - "transportId": "transportId" + "transportId": "transportId", + "livenessInterval":10 } \ No newline at end of file -- GitLab From 95362822a0d5f6f05beba12e2c7c9427406875a9 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 16:01:41 +0100 Subject: [PATCH 62/94] Review of REGAPPS TCs of MEC011v3.2.1 --- MEC011/SRV/REGAPPS/RegApps.robot | 64 +++++++++++++------ MEC011/SRV/REGAPPS/environment/variables.txt | 2 +- .../REGAPPS/environment/variables_sandbox.txt | 17 +++++ 3 files changed, 61 insertions(+), 22 deletions(-) create mode 100644 MEC011/SRV/REGAPPS/environment/variables_sandbox.txt diff --git a/MEC011/SRV/REGAPPS/RegApps.robot b/MEC011/SRV/REGAPPS/RegApps.robot index a7e64dd..f6fcace 100644 --- a/MEC011/SRV/REGAPPS/RegApps.robot +++ b/MEC011/SRV/REGAPPS/RegApps.robot @@ -5,6 +5,7 @@ Documentation Resource ../../../GenericKeywords.robot Resource environment/variables.txt +#Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Default Tags TC_MEC_SRV_REGAPPS @@ -17,8 +18,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_OK_01 ... Check that the IUT acknowledges the registration ... by a MEC Application to the MEC platform ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfo Check HTTP Response Status Code Is 201 @@ -33,8 +35,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_OK_02 ... Check that the IUT acknowledges the registration ... by a MEC Application to the MEC platform ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfo2 ${APP_INSTANCE_ID_REQ} Get value entry from JSON file AppInfo2 appInstanceId @@ -52,8 +55,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_OK_03 ... Check that the IUT acknowledges the registration ... by a MEC Application to the MEC platform ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfo3 ${APP_INSTANCE_ID_REQ} Get value entry from JSON file AppInfo3 appInstanceId @@ -74,8 +78,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_BR_01 ... Check that the IUT responds with an error message when the IUT received a registration with ... missing fields from a MEC Application instantiated by the MEC platform ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR1 Check HTTP Response Status Code Is 400 @@ -86,8 +91,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_BR_02 ... Check that the IUT responds with an error message ... when the IUT received by a MEC Application registration with missing endpoint ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR2 Check HTTP Response Status Code Is 400 @@ -98,8 +104,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_BR_03 ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appServiceRequired ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR3 Check HTTP Response Status Code Is 400 @@ -110,8 +117,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_BR_04 ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appServiceRequired ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 - + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR4 Check HTTP Response Status Code Is 400 @@ -122,7 +130,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_BR_05 ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appFeatureRequired ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR5 @@ -134,7 +144,9 @@ TC_MEC_MEC011_SRV_REGAPPS_001_BR_06 ... Check that the IUT responds with an error message when the IUT received by a ... MEC Application registration with unexpected appFeatureOptional ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6" + ... "ETSI GS MEC 011 3.2.1, clause 7.2.13.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES Create a new MEC application instance profile AppInfoBR6 @@ -147,7 +159,9 @@ TC_MEC_MEC011_SRV_REGAPPS_002_OK ... Check that the IUT responds with the AppInfo description ... when queried by a MEC Application ... - ... ETSI GS MEC 011 3.2.1, clause 7.2.14.3.1 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.14.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo @@ -163,7 +177,9 @@ TC_MEC_MEC011_SRV_REGAPPS_002_NF ... Check that the IUT responds with an error ... when it receives a request for returning an AppInfo with a wrong ID ... - ... ETSI GS MEC 011 3.2.1, clause 7.2.14.3.1 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.14.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Delete MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} @@ -177,7 +193,9 @@ TC_MEC_MEC011_SRV_REGAPPS_003_OK ... Check that the IUT responds with 204 No Content ... when queried to update MEC Application registration ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.14.3.2 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.14.3.2" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo @@ -207,7 +225,9 @@ TC_MEC_MEC011_SRV_REGAPPS_004_OK ... Check that the IUT responds with 204 No Content ... when queried to delete an existing MEC Application registration ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.14.3.5 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.14.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile AppInfo @@ -222,7 +242,9 @@ TC_MEC_MEC011_SRV_REGAPPS_004_NF ... Check that the IUT responds with an error when queried to ... delete an unknown MEC Application registration ... - ... Reference ETSI GS MEC 011 3.2.1, clause 7.2.14.3.5 + ... Reference "ETSI GS MEC 011 3.2.1, clause 5.2.13", + ... "ETSI GS MEC 011 3.2.1, clause 7.1.2.6", + ... "ETSI GS MEC 011 3.2.1, clause 7.2.14.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Delete MEC application instance profile ${NOT_EXISTING_APP_INSTANCE_ID} diff --git a/MEC011/SRV/REGAPPS/environment/variables.txt b/MEC011/SRV/REGAPPS/environment/variables.txt index 27fe68f..a8fd69d 100644 --- a/MEC011/SRV/REGAPPS/environment/variables.txt +++ b/MEC011/SRV/REGAPPS/environment/variables.txt @@ -2,7 +2,7 @@ # Generic variables ${SCHEMA} http ${HOST} 127.0.0.1 -${PORT} 8081 +${PORT} 8082 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} diff --git a/MEC011/SRV/REGAPPS/environment/variables_sandbox.txt b/MEC011/SRV/REGAPPS/environment/variables_sandbox.txt new file mode 100644 index 0000000..7bc42f9 --- /dev/null +++ b/MEC011/SRV/REGAPPS/environment/variables_sandbox.txt @@ -0,0 +1,17 @@ +*** Variables *** +# Generic variables +#### Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} mec_app_support +${apiVersion} v1 +${APP_INSTANCE_ID} f1e4d448-e277-496b-bf63-98391cfd20fb + +# Specific variables +${APP_NAME} appName +#${APP_INSTANCE_ID} appInstanceId +${NOT_EXISTING_APP_INSTANCE_ID} notExistingAppInstanceId +${APPD_ID} appDId \ No newline at end of file -- GitLab From 0afd85045b7e5930524e40e0028b6145fd8a9bdb Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 16:26:07 +0100 Subject: [PATCH 63/94] Review of SAQ TCs of MEC011v3.2.1 --- MEC011/SRV/SAQ/PlatServices.robot | 15 ++--- MEC011/SRV/SAQ/environment/variables.txt | 6 +- .../SRV/SAQ/environment/variables_sandbox.txt | 58 +++++++++++++++++++ MEC011/SRV/SAQ/jsons/ServiceInfo.json | 1 - 4 files changed, 65 insertions(+), 15 deletions(-) create mode 100644 MEC011/SRV/SAQ/environment/variables_sandbox.txt diff --git a/MEC011/SRV/SAQ/PlatServices.robot b/MEC011/SRV/SAQ/PlatServices.robot index 72142b6..afe9b9f 100644 --- a/MEC011/SRV/SAQ/PlatServices.robot +++ b/MEC011/SRV/SAQ/PlatServices.robot @@ -4,14 +4,12 @@ Documentation ... A test suite for validating Service Availability Query (SAQ) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem Default Tags TC_MEC_SRV_SAQ - - *** Test Cases *** TC_MEC_MEC011_SRV_SAQ_001_OK [Documentation] @@ -24,11 +22,10 @@ TC_MEC_MEC011_SRV_SAQ_001_OK [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create new service ServiceInfo ${APP_INSTANCE_ID} - ${SER_NAME} Get value entry from JSON file ServiceInfo serName Get list of available MEC services Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is ServiceInfoList - [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SER_NAME} + [TearDown] Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} TC_MEC_MEC011_SRV_SAQ_001_BR @@ -88,17 +85,17 @@ Create new service Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - POST http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services ${body} + POST ${SCHEMA_APP_SAQ}://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services ${body} ${output}= Output response Set Suite Variable ${response} ${output} - Set Suite Variable ${SERVICE_NAME} ${response['body']['serName']} + Set Suite Variable ${SERVICE_ID} ${response['body']['serInstanceId']} Remove individual service [Arguments] ${appInstanceId} ${serviceName} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Type":"*/*"} - DELETE http://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services/${serviceName} + DELETE ${SCHEMA_APP_SAQ}://${HOST_APP_SAQ}:${PORT_APP_SAQ}/${apiRoot_APP_SAQ}${apiName_APP_SAQ}/${apiVersion_APP_SAQ}/applications/${appInstanceId}/services/${serviceName} ${output}= Output response Set Suite Variable ${response} ${output} @@ -116,7 +113,7 @@ Get list of available MEC services Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Type":"*/*"} - Get ${apiRoot}/${apiName}/${apiVersion}/services + Get ${apiRoot}/${apiName}/${apiVersion}/services ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC011/SRV/SAQ/environment/variables.txt b/MEC011/SRV/SAQ/environment/variables.txt index 633b86c..c71ddd3 100644 --- a/MEC011/SRV/SAQ/environment/variables.txt +++ b/MEC011/SRV/SAQ/environment/variables.txt @@ -13,11 +13,7 @@ ${apiVersion} v1 ${INVALID_VALUE} INVALID_VALUE ${SERVICE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NON_EXISTENT_SERVICE_ID} NON_EXISTENT_SERVICE_ID - - - - - +${SER_NAME} ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${INSTANCE_ID} instance_id diff --git a/MEC011/SRV/SAQ/environment/variables_sandbox.txt b/MEC011/SRV/SAQ/environment/variables_sandbox.txt new file mode 100644 index 0000000..abd83b1 --- /dev/null +++ b/MEC011/SRV/SAQ/environment/variables_sandbox.txt @@ -0,0 +1,58 @@ +*** Variables *** +#### Env variable< for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} /mec_service_mgmt +${apiVersion} v1 +${APP_INSTANCE_ID} b8ae165a-a1e3-4d6c-86d9-52c59ad314b6 +${SER_NAME} + + +#Variables for test setups and teardowns +${SCHEMA_APP_SAQ} https +${HOST_APP_SAQ} try-mec.etsi.org +${PORT_APP_SAQ} 443 +${apiRoot_APP_SAQ} sbxjbxjt4s/mep1/ +${apiName_APP_SAQ} mec_service_mgmt +${apiVersion_APP_SAQ} v1 +${SERVICE_NAME} +#### + + + +# Specific variables +${INVALID_VALUE} INVALID_VALUE +${SERVICE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_EXISTENT_SERVICE_ID} NON_EXISTENT_SERVICE_ID +#${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${INSTANCE_ID} instance_id +${FAKE_INSTANCE_ID_VALUE} 5 +${NON_EXISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID +${INVALID_ETAG} INVALID_ETAG + +# ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription +# ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +# ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID +# ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} NON_EXISTENT_APP_MOBILITY_SERVICE_ID + +# # Notifications variables +# ${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar + +# ${callback_port} 9091 +# ${callback_uri} http://172.22.1.7:${callback_port} +# ${callback_endpoint} /amsi/subscriptions +# ${callback_endpoint_error} /subs_404 +# ${total_polling_time} 2 min +# ${polling_interval} 10 sec + +#Variables for test setups and teardowns +#${HOST_APP_SAQ} 127.0.0.1 +#${PORT_APP_SAQ} 8082 +#${apiRoot_APP_SAQ} +#${apiName_APP_SAQ} mec_service_mgmt +#${apiVersion_APP_SAQ} v1 +#${APP_INSTANCE_ID} appInstanceId +#${SERVICE_NAME} \ No newline at end of file diff --git a/MEC011/SRV/SAQ/jsons/ServiceInfo.json b/MEC011/SRV/SAQ/jsons/ServiceInfo.json index 1cc5adf..74c6770 100644 --- a/MEC011/SRV/SAQ/jsons/ServiceInfo.json +++ b/MEC011/SRV/SAQ/jsons/ServiceInfo.json @@ -3,6 +3,5 @@ "version": "0.1", "state": "INACTIVE", "serializer": "XML", - "serInstanceId": "3F897E85-ABCD-FFFF-A957-FCF0CCE649FD", "transportId": "transportId" } \ No newline at end of file -- GitLab From e604c7cb2e556600f81985cf0e8750fd3accbd36 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 16:45:35 +0100 Subject: [PATCH 64/94] Review of SRVSUB TCs of MEC011v3.2.1 --- MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot | 17 ++++----- .../SRVSUB/environment/variables_sandbox.txt | 38 +++++++++++++++++++ 2 files changed, 45 insertions(+), 10 deletions(-) create mode 100644 MEC011/SRV/SRVSUB/environment/variables_sandbox.txt diff --git a/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot b/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot index b1cd77d..405a2c2 100644 --- a/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot +++ b/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot @@ -4,7 +4,7 @@ Documentation ... A test suite for validating Service Subscriptions (SRVSUB) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem Library String @@ -12,7 +12,6 @@ Default Tags TC_MEC_SRV_SRVSUB *** Test Cases *** - TC_MEC_MEC011_SRV_SRVSUB_001_OK [Documentation] ... Check that the IUT responds with a list of subscriptions for notifications @@ -52,11 +51,11 @@ TC_MEC_MEC011_SRV_SRVSUB_002_OK ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", ... "ETSI GS MEC 011 3.2.1, clause 8.2.8.3.4" [Tags] PIC_MEC_PLAT PIC_SERVICES + [Setup] Create a new MEC application AppInfo Create a new subscription ${APP_INSTANCE_ID} SerAvailabilityNotificationSubscription ${APP_SRVSUB_NOTIF_CALLBACK_URI} Get value entry from JSON file SerAvailabilityNotificationSubscription callbackReference ${SUB_TYPE} Get value entry from JSON file SerAvailabilityNotificationSubscription subscriptionType - Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is SerAvailabilityNotificationSubscription Check HTTP Response Header Contains Location @@ -90,7 +89,6 @@ TC_MEC_MEC011_SRV_SRVSUB_003_OK ... "ETSI GS MEC 011 3.2.1, clause 8.2.9.3.1" [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application instance profile and create subscription AppInfo SerAvailabilityNotificationSubscription - Get individual subscription ${APP_INSTANCE_ID} ${SUB_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SerAvailabilityNotificationSubscription @@ -112,7 +110,7 @@ TC_MEC_MEC011_SRV_SRVSUB_003_NF [Setup] Create a new MEC application AppInfo Get individual subscription ${APP_INSTANCE_ID} ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 - [TearDown] Remove MEC application ${APP_INSTANCE_ID} + [TearDown] Remove MEC application ${APP_INSTANCE_ID} TC_MEC_MEC011_SRV_SRVSUB_004_OK [Documentation] @@ -123,8 +121,8 @@ TC_MEC_MEC011_SRV_SRVSUB_004_OK ... "ETSI GS MEC 011 3.2.1, clause 8.1.3", ... "ETSI GS MEC 011 3.2.1, clause 8.2.9.3.5" [Tags] PIC_MEC_PLAT PIC_SERVICES - [Setup] Create a new MEC application instance profile and create subscription AppInfo SerAvailabilityNotificationSubscription - Remove subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} + [Setup] Create a new MEC application instance profile and create subscription AppInfo SerAvailabilityNotificationSubscription + Remove subscription ${APP_INSTANCE_ID} ${SUB_ID} Check HTTP Response Status Code Is 204 @@ -143,7 +141,6 @@ TC_MEC_MEC011_SRV_SRVSUB_004_NF *** Keywords *** - Create a new MEC application [Arguments] ${reg_app_content} Set Headers {"Accept":"application/json"} @@ -152,7 +149,7 @@ Create a new MEC application Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${reg_app_content} .json ${body}= Get File ${file} - POST http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations ${body} + POST ${SCHEMA_REGAPP}://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations ${body} ${output}= Output response Set Suite Variable ${APP_INSTANCE_ID} ${output['body']['appInstanceId']} @@ -162,7 +159,7 @@ Remove MEC application Set Headers {"Content-Type":"application/json"} #Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - DELETE http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations/${app_instance_id} + DELETE ${SCHEMA_REGAPP}://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations/${app_instance_id} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC011/SRV/SRVSUB/environment/variables_sandbox.txt b/MEC011/SRV/SRVSUB/environment/variables_sandbox.txt new file mode 100644 index 0000000..18a05db --- /dev/null +++ b/MEC011/SRV/SRVSUB/environment/variables_sandbox.txt @@ -0,0 +1,38 @@ +*** Variables *** +# Generic variables +#### Env variable< for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} /mec_service_mgmt +${apiVersion} v1 +${APP_INSTANCE_ID} 298b2c0c-7efa-45d3-8b47-8ab3c009b845 + +${SCHEMA_REGAPP} http +${HOST_REGAPP} try-mec.etsi.org +${PORT_REGAPP} 443 +${apiRoot_REGAPP} /sbxjbxjt4s/mep1 +${apiName_REGAPP} mec_app_support +${apiVersion_REGAPP} v1 +#### + +# Specific variables +${SUB_ID} +#${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${NON_EXISTENT_INSTANCE_ID} NON_EXISTENT_INSTANCE_ID +${APP_SRVSUB_NOTIF_CALLBACK_URI} http://127.0.0.1/subscribe +${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID + + + + +##Registration app setup test case variables +#${HOST_REGAPP} 127.0.0.1 +#${PORT_REGAPP} 8081 +#${apiRoot_REGAPP} +#${apiName_REGAPP} mec_app_support +#${apiVersion_REGAPP} v2 + -- GitLab From de6b403ce29ef4c14fb023907930516c909c5fa1 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 16:50:53 +0100 Subject: [PATCH 65/94] Review of TIME TCs of MEC011v3.2.1 --- MEC011/SRV/TIME/PlatTiming.robot | 4 +++- .../TIME/environment/variables_sandbox.txt | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) create mode 100644 MEC011/SRV/TIME/environment/variables_sandbox.txt diff --git a/MEC011/SRV/TIME/PlatTiming.robot b/MEC011/SRV/TIME/PlatTiming.robot index f34e261..f18f776 100644 --- a/MEC011/SRV/TIME/PlatTiming.robot +++ b/MEC011/SRV/TIME/PlatTiming.robot @@ -4,7 +4,8 @@ Documentation ... A test suite for validating Timing capabilities (TIME) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +#Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -46,6 +47,7 @@ Get time capabilities Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Get ${apiRoot}/${apiName}/${apiVersion}/timing/timing_caps + Log ${apiRoot}/${apiName}/${apiVersion}/timing/timing_caps Set Headers {"Content-Type":"*/*"} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC011/SRV/TIME/environment/variables_sandbox.txt b/MEC011/SRV/TIME/environment/variables_sandbox.txt new file mode 100644 index 0000000..4ecef6e --- /dev/null +++ b/MEC011/SRV/TIME/environment/variables_sandbox.txt @@ -0,0 +1,24 @@ +*** Variables *** +#### Env variable< for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} mec_app_support +${apiVersion} v1 +#### + + +# ${SUBSCRIPTION_TYPE} MobilityProcedureSubscription +# ${NON_EXISTENT_APP_MOBILITY_SERVICE_ID} NON_EXISTENT_APP_MOBILITY_SERVICE_ID + +# # Notifications variables +# ${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar + +# ${callback_port} 9091 +# ${callback_uri} http://172.22.1.7:${callback_port} +# ${callback_endpoint} /amsi/subscriptions +# ${callback_endpoint_error} /subs_404 +# ${total_polling_time} 2 min +# ${polling_interval} 10 sec \ No newline at end of file -- GitLab From ffac962acc9af4b5fdcf21f28e446d9f5f6029f2 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 17:55:02 +0100 Subject: [PATCH 66/94] Review of TRAF TCs of MEC011v3.2.1 --- MEC011/SRV/TRAF/PlatTrafficRules.robot | 16 +++++------ .../TRAF/environment/variables_sandbox.txt | 27 +++++++++++++++++++ 2 files changed, 35 insertions(+), 8 deletions(-) create mode 100644 MEC011/SRV/TRAF/environment/variables_sandbox.txt diff --git a/MEC011/SRV/TRAF/PlatTrafficRules.robot b/MEC011/SRV/TRAF/PlatTrafficRules.robot index cd94ee4..fb7abaa 100644 --- a/MEC011/SRV/TRAF/PlatTrafficRules.robot +++ b/MEC011/SRV/TRAF/PlatTrafficRules.robot @@ -4,7 +4,8 @@ Documentation ... A test suite for validating Traffic rules (TRAF) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +#Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -12,13 +13,13 @@ Default Tags TC_MEC_SRV_TRAF *** Test Cases *** - TC_MEC_MEC011_SRV_TRAF_001_OK [Documentation] ... Check that the IUT responds with a list of available traffic rules ... when queried by a MEC Application ... - ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... Reference + ... ETSI GS MEC 011 3.2.1, clause 5.2.7, ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, ... ETSI GS MEC 011 3.2.1, clause 7.2.7.3.1 @@ -40,7 +41,7 @@ TC_MEC_MEC011_SRV_TRAF_001_NF ... ETSI GS MEC 011 3.2.1, clause 7.2.7.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - [TearDown] Remove MEC application ${NON_EXISTENT_APP_INSTANCE_ID} + [Setup] Remove MEC application ${NON_EXISTENT_APP_INSTANCE_ID} Get list of traffic rules ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 @@ -55,7 +56,6 @@ TC_MEC_MEC011_SRV_TRAF_002_OK ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application AppInfo - Get individual traffic rule ${APP_INSTANCE_ID} ${TRAFFIC_RULE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is TrafficRule @@ -120,7 +120,6 @@ TC_MEC_MEC011_SRV_TRAF_003_PF ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.2 [Tags] PIC_MEC_PLAT PIC_SERVICES [Setup] Create a new MEC application AppInfo - Update a traffic rule with invalid etag ${APP_INSTANCE_ID} ${TRAFFIC_RULE_ID} TrafficRuleUpdate Check HTTP Response Status Code Is 412 [TearDown] Remove MEC application ${APP_INSTANCE_ID} @@ -134,7 +133,7 @@ Create a new MEC application Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${reg_app_content} .json ${body}= Get File ${file} - POST http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations ${body} + POST ${SCHEMA_REGAPP}://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations ${body} ${output}= Output response Set Suite Variable ${APP_INSTANCE_ID} ${output['body']['appInstanceId']} @@ -144,7 +143,7 @@ Remove MEC application Set Headers {"Content-Type":"application/json"} #Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - DELETE http://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations/${app_instance_id} + DELETE ${SCHEMA_REGAPP}://${HOST_REGAPP}:${PORT_REGAPP}${apiRoot_REGAPP}/${apiName_REGAPP}/${apiVersion_REGAPP}/registrations/${app_instance_id} ${output}= Output response Set Suite Variable ${response} ${output} @@ -154,6 +153,7 @@ Get list of traffic rules Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/traffic_rules + Log ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/traffic_rules ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC011/SRV/TRAF/environment/variables_sandbox.txt b/MEC011/SRV/TRAF/environment/variables_sandbox.txt new file mode 100644 index 0000000..967600d --- /dev/null +++ b/MEC011/SRV/TRAF/environment/variables_sandbox.txt @@ -0,0 +1,27 @@ +*** Variables *** +# Generic variables +#### Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} mec_app_support +${apiVersion} v1 +${APP_INSTANCE_ID} 298b2c0c-7efa-45d3-8b47-8ab3c009b845 +#### + +##Registration App variables +${SCHEMA_REGAPP} https +${HOST_REGAPP} try-mec.etsi.org +${PORT_REGAPP} 443 +${apiRoot_REGAPP} /sbxjbxjt4s/mep1 +${apiName_REGAPP} mec_app_support +${apiVersion_REGAPP} v1 + +# Specific variables +${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID +${TRAFFIC_RULE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_EXISTENT_TRAFFIC_RULE_ID} NON_EXISTENT_TRAFFIC_RULE_ID +${INVALID_ETAG} INVALID_ETAG + -- GitLab From 960b12413126c95cd4edc08ca22dab37f538987e Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 12 Mar 2024 17:57:28 +0100 Subject: [PATCH 67/94] Review of TRANS TC of MEC011v3.2.1 --- MEC011/SRV/TRANS/PlatTransport.robot | 3 +-- .../SRV/TRANS/environment/variables_sandbox.txt | 17 +++++++++++++++++ 2 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 MEC011/SRV/TRANS/environment/variables_sandbox.txt diff --git a/MEC011/SRV/TRANS/PlatTransport.robot b/MEC011/SRV/TRANS/PlatTransport.robot index 54c4a16..e2917b5 100644 --- a/MEC011/SRV/TRANS/PlatTransport.robot +++ b/MEC011/SRV/TRANS/PlatTransport.robot @@ -4,7 +4,7 @@ Documentation ... A test suite for validating Transport (TRANS) operations. Resource ../../../GenericKeywords.robot -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -12,7 +12,6 @@ Default Tags TC_MEC_SRV_TRANS *** Test Cases *** - TC_MEC_MEC011_SRV_TRANS_001_OK [Documentation] ... Check that the IUT responds with a list of available transports diff --git a/MEC011/SRV/TRANS/environment/variables_sandbox.txt b/MEC011/SRV/TRANS/environment/variables_sandbox.txt new file mode 100644 index 0000000..977484d --- /dev/null +++ b/MEC011/SRV/TRANS/environment/variables_sandbox.txt @@ -0,0 +1,17 @@ +*** Variables *** +#### Env variable for the ETSI MEC Sandbox +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_provided_by_sandbox>/mep1 +${apiName} mec_service_mgmt +${apiVersion} v1 +${APP_INSTANCE_ID} f1e4d448-e277-496b-bf63-98391cfd20fb +#### + +# Specific variables +${NON_EXISTENT_APP_INSTANCE_ID} NON_ESISTENT_APP_INSTANCE_ID +${TRAFFIC_RULE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_EXISTENT_TRAFFIC_RULE_ID} NON_EXISTENT_TRAFFIC_RULE_ID + -- GitLab From 912f24a1c6da6caad6df493229ab54c88733f69e Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Wed, 13 Mar 2024 16:54:01 +0100 Subject: [PATCH 68/94] Review of MEC012v2.2.1 TCs --- MEC012/SRV/RNIS/RnisAllSubscriptions.robot | 7 ++-- MEC012/SRV/RNIS/RnisNotifications.robot | 1 - MEC012/SRV/RNIS/RnisQuery.robot | 7 ++-- .../SRV/RNIS/RnisSpecificSubscription.robot | 10 +++--- MEC012/SRV/RNIS/environment/variables.txt | 4 ++- .../RNIS/environment/variables_sandbox.txt | 33 +++++++++++++++++++ .../RNIS/jsons/CellChangeSubscription.json | 5 ++- .../RNIS/jsons/NrMeasRepUeSubscription.json | 3 +- ...UpdateCellChangeSubscriptionRequestNf.json | 10 ++++++ .../RadioNetworkInformationAPI.robot | 3 +- 10 files changed, 67 insertions(+), 16 deletions(-) create mode 100644 MEC012/SRV/RNIS/environment/variables_sandbox.txt create mode 100644 MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequestNf.json diff --git a/MEC012/SRV/RNIS/RnisAllSubscriptions.robot b/MEC012/SRV/RNIS/RnisAllSubscriptions.robot index 2bdc4f8..465efd7 100644 --- a/MEC012/SRV/RNIS/RnisAllSubscriptions.robot +++ b/MEC012/SRV/RNIS/RnisAllSubscriptions.robot @@ -2,7 +2,7 @@ ... Test Suite to validate RNIS/Subscription (RNIS) operations. *** Settings *** -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot #Resource resources/RadioNetworkInformationAPI.robot @@ -54,7 +54,7 @@ TC_MEC_MEC012_SRV_RNIS_012_OK ... Check that the RNIS service creates a new RNIS subscription ... ETSI GS MEC 012 2.2.1, clause 7.6.3.4 ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml - [Setup] Send a request for a subscription and get sub ID CellChangeSubscription + Send a request for a subscription and get sub ID CellChangeSubscription ${sub_type} Get value entry from JSON file CellChangeSubscription subscriptionType ${callback_ref} Get value entry from JSON file CellChangeSubscription callbackReference Check HTTP Response Status Code Is 201 @@ -89,7 +89,7 @@ Send a request for a subscription and get sub ID [Arguments] ${content} Send a request for a subscription ${content} ${elements} = Split String ${response['headers']['Location']} / - Set Suite Variable ${SUB_ID} ${elements[4]} + Set Suite Variable ${SUB_ID} ${elements[-1]} Send a request for a subscription @@ -99,6 +99,7 @@ Send a request for a subscription Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} + Log ${apiRoot}/${apiName}/${apiVersion}/subscriptions Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC012/SRV/RNIS/RnisNotifications.robot b/MEC012/SRV/RNIS/RnisNotifications.robot index 984ac76..d02296e 100644 --- a/MEC012/SRV/RNIS/RnisNotifications.robot +++ b/MEC012/SRV/RNIS/RnisNotifications.robot @@ -2,7 +2,6 @@ ... Test Suite to validate RNIS/Notification (RNIS) operations. *** Settings *** - Resource environment/variables.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot diff --git a/MEC012/SRV/RNIS/RnisQuery.robot b/MEC012/SRV/RNIS/RnisQuery.robot index 4bddb1d..ea28910 100644 --- a/MEC012/SRV/RNIS/RnisQuery.robot +++ b/MEC012/SRV/RNIS/RnisQuery.robot @@ -2,7 +2,7 @@ ... Test Suite to validate RNIS/Subscription (RNIS) operations. *** Settings *** -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot Resource resources/RadioNetworkInformationAPI.robot @@ -13,7 +13,8 @@ Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_v *** Test Cases *** TC_MEC_MEC012_SRV_RNIS_016_BR [Documentation] Request RabInfo info using wrong parameters - ... Check that the RNIS service returns an error when the RAB information is requested with a malformatted message + ... Check that the RNIS service returns an error when the RAB + ... information is requested with a malformatted message ... ETSI GS MEC 012 2.2.1, clause 7.3.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/RabInfo Get RabInfo info using wrong parameters @@ -83,7 +84,7 @@ TC_MEC_MEC012_SRV_RNIS_019_NF ... ETSI GS MEC 012 2.2.1, clause 7.5a.3.1 ... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo Get L2Meas info using non existing cell id - Check HTTP Response Status Code Is 200 + Check HTTP Response Status Code Is 404 TC_MEC_MEC012_SRV_RNIS_016_OK diff --git a/MEC012/SRV/RNIS/RnisSpecificSubscription.robot b/MEC012/SRV/RNIS/RnisSpecificSubscription.robot index 20617a7..13a6dc9 100644 --- a/MEC012/SRV/RNIS/RnisSpecificSubscription.robot +++ b/MEC012/SRV/RNIS/RnisSpecificSubscription.robot @@ -3,7 +3,7 @@ *** Settings *** Library OperatingSystem -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Resource ../../../GenericKeywords.robot Resource resources/RadioNetworkInformationAPI.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false @@ -31,7 +31,7 @@ TC_MEC_MEC012_SRV_RNIS_014_BR ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml [Setup] Post RNIS subscription request CellChangeSubscription ${elements} = Split String ${response['headers']['Location']} / - Set Suite Variable ${SUB_ID} ${elements[4]} + Set Suite Variable ${SUB_ID} ${elements[-1]} Update Individual RNIS Subscription ${SUB_ID} UpdateCellChangeSubscriptionRequestBr Check HTTP Response Status Code Is 400 [TearDown] Delete Individual RNIS Subscription ${SUB_ID} @@ -43,7 +43,7 @@ TC_MEC_MEC012_SRV_RNIS_014_NF ... ETSI GS MEC 012 2.2.1, clause 7.8.3.2 ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml [Setup] Delete Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} - Update Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} UpdateCellChangeSubscriptionRequest + Update Individual RNIS Subscription ${NON_EXISTENT_SUBSCRIPTION_ID} UpdateCellChangeSubscriptionRequestNf Check HTTP Response Status Code Is 404 TC_MEC_MEC012_SRV_RNIS_015_NF @@ -63,7 +63,7 @@ TC_MEC_MEC012_SRV_RNIS_013_OK ... Reference https://forge.etsi.org/rep/mec/gs012-rnis-api/blob/automatic_generation/RniAPI.yaml [Setup] Post RNIS subscription request CellChangeSubscription ${elements} = Split String ${response['headers']['Location']} / - Set Suite Variable ${SUB_ID} ${elements[4]} + Set Suite Variable ${SUB_ID} ${elements[-1]} Get Individual RNIS Subscription ${SUB_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is CellChangeSubscription @@ -162,6 +162,6 @@ Delete Individual RNIS Subscription Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Delete ${apiRoot}/rni/${apiVersion}/subscriptions/${SUBSCRIPTION_ID} + Delete ${apiRoot}/rni/${apiVersion}/subscriptions/${subscription_id} ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/environment/variables.txt b/MEC012/SRV/RNIS/environment/variables.txt index da47b01..f655911 100644 --- a/MEC012/SRV/RNIS/environment/variables.txt +++ b/MEC012/SRV/RNIS/environment/variables.txt @@ -20,9 +20,11 @@ ${NOTIFICATION_SERVER_URI} /callback_url ${NOTIFICATION_SERVER_TIMEOUT} 5 +${NON_EXISTENT_SUBSCRIPTION_ID} 123456789 ${APP_INS_ID} appInsId ${NOT_EXISTENT_APP_INS_ID} NOT_EXISTENT_APP_INS_ID ${NOT_EXISTENT_CELL_ID} 0x8000099 ${CELL_ID} 6060606 - +${HREF} +${LINKS_SELF} ${PIC_PROBLEM_DETAILS_ON_4xx} 0 \ No newline at end of file diff --git a/MEC012/SRV/RNIS/environment/variables_sandbox.txt b/MEC012/SRV/RNIS/environment/variables_sandbox.txt new file mode 100644 index 0000000..baa76a1 --- /dev/null +++ b/MEC012/SRV/RNIS/environment/variables_sandbox.txt @@ -0,0 +1,33 @@ +*** Variables *** +####Env variable for the ETSI MEC Sandbox +${MEC-APP_SCHEMA} https +${MEC-APP_HOST} try-mec.etsi.org +${MEC-APP_PORT} 443 +#${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<id_returned_by_sandbox>/mep1 +${apiName} rni +${apiVersion} v2 + + + +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${SUB_ID} 15 + + +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 + + +${NON_EXISTENT_SUBSCRIPTION_ID} 123456789 +${APP_INS_ID} appInsId +${NOT_EXISTENT_APP_INS_ID} NOT_EXISTENT_APP_INS_ID +${NOT_EXISTENT_CELL_ID} 0xffff8000099 +${CELL_ID} 6060606 +${HREF} +${LINKS_SELF} +${PIC_PROBLEM_DETAILS_ON_4xx} 0 \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/CellChangeSubscription.json b/MEC012/SRV/RNIS/jsons/CellChangeSubscription.json index 2e8a4cf..8997a18 100644 --- a/MEC012/SRV/RNIS/jsons/CellChangeSubscription.json +++ b/MEC012/SRV/RNIS/jsons/CellChangeSubscription.json @@ -8,7 +8,10 @@ }, "filterCriteriaAssocHo": { "associateId": [ - "associatedId" + { + "type":0, + "value":"associatedId" + } ] } } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json b/MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json index 9680519..51bdb65 100644 --- a/MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json +++ b/MEC012/SRV/RNIS/jsons/NrMeasRepUeSubscription.json @@ -2,6 +2,7 @@ "subscriptionType": "NrMeasRepUeSubscription", "callbackReference": "http://10.30.8.189:8888/callback_url", "filterCriteriaNrMrs": { - "appInstanceId": "appInstanceId" + "appInstanceId": "appInstanceId", + "associateId":["assoicateId01"] } } \ No newline at end of file diff --git a/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequestNf.json b/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequestNf.json new file mode 100644 index 0000000..8910d5b --- /dev/null +++ b/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequestNf.json @@ -0,0 +1,10 @@ +{ + "subscriptionType": "CellChangeSubscription", + "callbackReference": "http://10.30.8.189:8888/new_callback_url", + "_links": { + "self": { + "href": "${LINKS_SELF}" + } + }, + "filterCriteriaAssocHo": {} +} \ No newline at end of file diff --git a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot index 0bf3639..47a3eb3 100644 --- a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot +++ b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot @@ -44,4 +44,5 @@ Check S1BearerInfo Check L2MeasInfo [Arguments] ${received_value} log ${received_value} - Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} + #Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} + Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi']['cellId']} ${CELL_ID} -- GitLab From cbcdf3b86764f8852fe695ba37798992e6a47042 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 12 Apr 2024 15:23:29 +0200 Subject: [PATCH 69/94] Added TC_MEC_MEC011_SRV_TRAF_002_NF Test Case for MEC011. --- MEC011/SRV/TRAF/PlatTrafficRules.robot | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/MEC011/SRV/TRAF/PlatTrafficRules.robot b/MEC011/SRV/TRAF/PlatTrafficRules.robot index fb7abaa..af69463 100644 --- a/MEC011/SRV/TRAF/PlatTrafficRules.robot +++ b/MEC011/SRV/TRAF/PlatTrafficRules.robot @@ -62,6 +62,22 @@ TC_MEC_MEC011_SRV_TRAF_002_OK Check Response Contains ${response['body']} trafficRuleId ${TRAFFIC_RULE_ID} [TearDown] Remove MEC application ${APP_INSTANCE_ID} + +TC_MEC_MEC011_SRV_TRAF_002_NF + [Documentation] + ... Check that the IUT responds with an error when a request for an unknown traffic rule + ... when queried by a MEC Application + ... + ... Reference ETSI GS MEC 011 3.2.1, clause 5.2.7, + ... ETSI GS MEC 011 3.2.1, clause 7.1.2.2, + ... ETSI GS MEC 011 3.2.1, clause 7.2.8.3.1 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Get individual traffic rule ${APP_INSTANCE_ID} ${NON_EXISTENT_TRAFFIC_RULE_ID} + Check HTTP Response Status Code Is 404 + + + TC_MEC_MEC011_SRV_TRAF_003_OK [Documentation] ... Check that the IUT updates a specific traffic rule -- GitLab From 15809844a204ce9c0ddbb1a757063cc744454848 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Sat, 13 Apr 2024 11:19:29 +0200 Subject: [PATCH 70/94] Minor fixes on MEC014v.3.1.1 TCs --- MEC014/SRV/UETAG/PlatUeIdentity.robot | 37 +++++++++++++------ .../UETAG/jsons/CreateAppInstanceRequest.json | 2 +- 2 files changed, 26 insertions(+), 13 deletions(-) diff --git a/MEC014/SRV/UETAG/PlatUeIdentity.robot b/MEC014/SRV/UETAG/PlatUeIdentity.robot index 17c6d1f..5a1de92 100644 --- a/MEC014/SRV/UETAG/PlatUeIdentity.robot +++ b/MEC014/SRV/UETAG/PlatUeIdentity.robot @@ -12,10 +12,13 @@ Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_v *** Test Cases *** TC_MEC_MEC014_SRV_UETAG_001_OK - [Documentation] Request UE Identity Tag information - ... Check that the IUT responds with the information on a UE Identity tag when queried by a MEC Application - ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.1, - ... ETSI GS MEC 014 3.1.1, clause 6.2.2 + [Documentation] + ... Check that the IUT responds with the information on a UE Identity tag + ... when queried by a MEC Application + ... + ... Reference ETSI GS MEC 014 3.1.1, clause 6.2.2, + ... ETSI GS MEC 014 3.1.1, clause 7.3.3.1 + ... [Setup] Create new App Instance CreateAppInstanceRequest Get UE Identity Tag information ${APP_INSTANCE_ID} ${UE_IDENTITY_TAG} Check HTTP Response Status Code Is 200 @@ -32,9 +35,15 @@ TC_MEC_MEC014_SRV_UETAG_001_OK TC_MEC_MEC014_SRV_UETAG_001_BR - [Documentation] Request UE Identity Tag information using bad parameters - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.1 + [Documentation] + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + + ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.4, + ... ETSI GS MEC 013 3.1.1 Clause 6.3.9, + ... ETSI GS MEC 013 3.1.1 Clause 6.4.9, + ... ETSI GS MEC 013 3.1.1 Clause 7.14.3.4 + [Setup] Create new App Instance CreateAppInstanceRequest Get UE Identity Tag information using bad parameters ${APP_INSTANCE_ID} ${UE_IDENTITY_TAG} Check HTTP Response Status Code Is 400 @@ -54,8 +63,10 @@ TC_MEC_MEC014_SRV_UETAG_001_NF TC_MEC_MEC014_SRV_UETAG_002_OK [Documentation] Register an UE Identity Tag ... Check that the IUT registers a tag (representing a UE) or a list of tags when commanded by a MEC Application - ... Reference ETSI GS MEC 014 V3.1.1, clause 7.3.3.2 - ... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo + + ... Reference ETSI GS MEC 014 3.1.1, clause 6.2.2 + ... ETSI GS MEC 014 V3.1.1, clause 7.3.3.2 + [Setup] Create new App Instance and Check User Identity Tag unregistered state CreateAppInstanceRequest ${APP_INSTANCE_ID} UeIdentityTag Update an UE Identity Tag ${APP_INSTANCE_ID} IdentityTag Check HTTP Response Status Code Is 200 @@ -74,13 +85,14 @@ TC_MEC_MEC014_SRV_UETAG_002_OK TC_MEC_MEC014_SRV_UETAG_002_BR [Documentation] Register an UE Identity Tag using invalid state ... Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application - ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.2, - ... ETSI GS MEC 014 3.1.1, clause 6.2.2 + ... Reference ETSI GS MEC 014 3.1.1, clause 6.2.2, + ... ETSI GS MEC 014 3.1.1, clause 7.3.3.2 [Setup] Create new App Instance CreateAppInstanceRequest Update an UE Identity Tag ${APP_INSTANCE_ID} IdentityTagBR Check HTTP Response Status Code Is 400 [TearDown] Delete APP Instance ${APP_INSTANCE_ID} + TC_MEC_MEC014_SRV_UETAG_002_NF [Documentation] Register an UE Identity Tag using invalid state ... Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application @@ -119,7 +131,8 @@ Create new App Instance Create new App Instance and Check User Identity Tag unregistered state [Arguments] ${content} ${app_instance_id} ${ue_identity_tag} - Get UE Identity Tag information ${app_instance_id} ${ue_identity_tag} + Create new App Instance ${content} + Get UE Identity Tag information ${APP_INSTANCE_ID} ${ue_identity_tag} FOR ${identityTag} IN @{response['body']['ueIdentityTags']} ${ueidentity_tag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[ueIdentityTag] ${ue_identity_tag} ${registered_flag} Run Keyword And Return Status Should Be Equal As Strings ${identityTag}[state] UNREGISTERED diff --git a/MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json b/MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json index 3691ba6..d207b80 100644 --- a/MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json +++ b/MEC014/SRV/UETAG/jsons/CreateAppInstanceRequest.json @@ -1,5 +1,5 @@ { "appDId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", "appInstanceDescription": "description", - "appInstanceName": "name" + "appInstanceName": "appName" } \ No newline at end of file -- GitLab From 783c288a410f88a069cf96cdb16df4b8df78297d Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 15 Apr 2024 10:38:35 +0200 Subject: [PATCH 71/94] Minor updates on some MEC013 TCs. --- .../NotificationSubscriptionList.schema.json | 768 ++---------------- .../UEINFOLOOK/PlatUeInformationLookup.robot | 19 +- 2 files changed, 68 insertions(+), 719 deletions(-) diff --git a/MEC013/SRV/UEAREASUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEAREASUB/schemas/NotificationSubscriptionList.schema.json index c7c8284..4b24531 100644 --- a/MEC013/SRV/UEAREASUB/schemas/NotificationSubscriptionList.schema.json +++ b/MEC013/SRV/UEAREASUB/schemas/NotificationSubscriptionList.schema.json @@ -1,715 +1,55 @@ { - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "properties": { - "circleNotificationSubscription": { - "description": "Collection of CircleNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for notifications, when the area is defined as a circle.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "enteringLeavingCriteria": { - "enum": [ - "Entering", - "Leaving" - ], - "type": "string" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "latitude": { - "description": "Latitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "longitude": { - "description": "Longitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "radius": { - "description": "Radius circle around center point in meters.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "address", - "latitude", - "longitude", - "radius", - "trackingAccuracy", - "enteringLeavingCriteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "CircleNotificationSubscription" - }, - "distanceNotificationSubscription": { - "description": "Collection of DistanceNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for distance subscription, with reference to other devices.", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "criteria": { - "enum": [ - "AllWithinDistance", - "AnyWithinDistance", - "AllBeyondDistance", - "AnyBeyondDistance" - ], - "type": "string" - }, - "distance": { - "description": "Distance between devices that shall be monitored.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "monitoredAddress": { - "description": "Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "referenceAddress": { - "description": "Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "monitoredAddress", - "distance", - "trackingAccuracy", - "criteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "DistanceNotificationSubscription" - }, - "periodicNotificationSubscription": { - "description": "Collection of PeriodicNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for periodic subscription.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications (can also be considered minimum time between notifications) per subscription.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "requestedAccuracy": { - "description": "Accuracy of the provided distance in meters.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "callbackReference", - "address", - "requestedAccuracy", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "PeriodicNotificationSubscription" - }, - "resourceURL": { - "description": "Self-referring URL, see note 1.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "AnyURI" - }, - "userTrackingSubscription": { - "description": "Collection of UserTrackingSubscription elements, see note 1.", - "items": { - "description": "A type containing user tracking subscription.", - "properties": { - "address": { - "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - } - }, - "required": [ - "callbackReference", - "address" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "UserTrackingSubscription" - }, - "zonalTrafficSubscription": { - "description": "Collection of ZonalTrafficSubscription elements, see note 1.", - "items": { - "description": "A type containing zonal traffic subscription", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period (in seconds) of time notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "interestRealm": { - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZonalTrafficSubscription" - }, - "zoneStatusSubscription": { - "description": "Collection of ZoneStatusSubscription elements, see note 1.", - "items": { - "description": "A type containing zone status subscription.", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "numberOfUsersAPThreshold": { - "description": "Threshold number of users in an access point which if crossed shall cause a notification", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsersZoneThreshold": { - "description": "Threshold number of users in a zone which if crossed 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).", - "items": { - "enum": [ - "Serviceable", - "Unserviceable", - "Unknown" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "OperationStatus" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZoneStatusSubscription" - } - }, - "required": [ - "resourceURL" - ], - "type": "object", - "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.8.\nNOTE 2: \tAs specified in [6], clause 5.2.2.7.", - "x-etsi-ref": "6.3.3" - } - } -} \ No newline at end of file + "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/UEINFOLOOK/PlatUeInformationLookup.robot b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot index 2a789f4..305bb0b 100644 --- a/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot +++ b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot @@ -5,7 +5,7 @@ Documentation Resource ../../../GenericKeywords.robot Resource ../../../pics.txt -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -19,9 +19,9 @@ TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01 ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location ... when queried by a MEC Application - No Filter ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 - ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 - ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 - ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.2 + ... ETSI GS MEC 013 3.1.1 Clause 6.2.5 + ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of users @@ -54,7 +54,7 @@ TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_03 ... ETSI GS MEC 013 3.1.1 Clause 7.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get list of users with filter address ${ACR_ADDRESS},${ACR_ADDRESS2} + Get list of users with multiple filters address ${ACR_ADDRESS} address ${ACR_ADDRESS2} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UserList @@ -108,6 +108,15 @@ Get list of users ${output}= Output response Set Suite Variable ${response} ${output} +Get list of users with multiple filters + [Arguments] ${key} ${value} ${key2} ${value2} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Log ${apiRoot}/${apiName}/${apiVersion}/queries/users?${key}=${value}&${key2}=${value2} + Get ${apiRoot}/${apiName}/${apiVersion}/queries/users?${key}=${value}&${key2}=${value2} + ${output}= Output response + Set Suite Variable ${response} ${output} + Get list of users with filter [Arguments] ${key} ${values} Set Headers {"Accept":"application/json"} -- GitLab From 988a980293aba526b8a21c9cfba9ac7c980b15a0 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 13 May 2024 09:20:15 +0200 Subject: [PATCH 72/94] Fixes on TCs of MEC013 --- MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot | 17 ++++++---- .../jsons/UserAreaSubscription.json | 1 + .../SRV/UEDISTLOOK/PlatUeDistanceLookup.robot | 2 +- .../jsons/UserDistanceSubscription.json | 32 +++++++++---------- .../SRV/UELOCLOOK/PlatUeLocationLookup.robot | 12 +++---- .../UserLocationPeriodicSubscription.json | 1 + MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot | 2 +- 7 files changed, 35 insertions(+), 32 deletions(-) diff --git a/MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot b/MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot index 6d51d58..153174e 100644 --- a/MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot +++ b/MEC013/SRV/UEAREALOOK/PlatUeAreaLookup.robot @@ -15,9 +15,10 @@ Default Tags TC_MEC_SRV_UEAREASUB *** Test Cases *** -TP_MEC_MEC013_SRV_UEAREALOOK_001_OK_01 +TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_01 [Documentation] - ... Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - No filter + ... Check that the IUT responds with a list of UE area subscriptions + ... when queried by a MEC Application - No filter ... ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 ... ETSI GS MEC 013 3.1.1 Clause 6.3.3 @@ -32,9 +33,10 @@ TP_MEC_MEC013_SRV_UEAREALOOK_001_OK_01 [TearDown] Remove subscription ${SUB_ID} -TP_MEC_MEC013_SRV_UEAREALOOK_001_OK_02 +TC_MEC_MEC013_SRV_UEAREALOOK_001_OK_02 [Documentation] - ... Check that the IUT responds with a list of UE area subscriptions when queried by a MEC Application - No filter + ... Check that the IUT responds with a list of UE area subscriptions + ... when queried by a MEC Application - No filter ... ... Reference ETSI GS MEC 013 3.1.1 Clause 5.3.2 ... ETSI GS MEC 013 3.1.1 Clause 6.3.8 @@ -50,7 +52,7 @@ TP_MEC_MEC013_SRV_UEAREALOOK_001_OK_02 [TearDown] Remove subscription ${SUB_ID} -TP_MEC_MEC013_SRV_UEAREALOOK_002_OK +TC_MEC_MEC013_SRV_UEAREALOOK_002_OK [Documentation] ... Check that the IUT acknowledges the change of UE area subscription request ... when commanded by a MEC Application @@ -68,10 +70,10 @@ TP_MEC_MEC013_SRV_UEAREALOOK_002_OK [TearDown] Remove subscription ${SUB_ID} -TP_MEC_MEC013_SRV_UEAREALOOK_002_NF +TC_MEC_MEC013_SRV_UEAREALOOK_002_NF [Documentation] ... Check that the IUT responds with an error - ... when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application + ... when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application ... ... Reference ETSI GS MEC 013 3.1.1 Clause 6.3.8 ... ETSI GS MEC 013 3.1.1 Clause 6.4.8 @@ -127,6 +129,7 @@ Create new subscription Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} + Log ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/area ${body} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json b/MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json index aafb876..6d710e7 100644 --- a/MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json +++ b/MEC013/SRV/UEAREALOOK/jsons/UserAreaSubscription.json @@ -1,5 +1,6 @@ { "subscriptionType": "UserAreaSubscription", + "callbackReference" :"somecallback", "areaDefine": { "shape": 1, "points": [ diff --git a/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot b/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot index 1db676a..2ff8e90 100644 --- a/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot +++ b/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot @@ -17,7 +17,6 @@ ${response} *** Test Cases *** - TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK [Documentation] ... Check that the IUT responds with the list of UE distance subscriptions to a UE @@ -97,6 +96,7 @@ Create new subscription Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} + Log ${body} Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/distance ${body} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json b/MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json index 337a1f1..5c338c1 100644 --- a/MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json +++ b/MEC013/SRV/UEDISTLOOK/jsons/UserDistanceSubscription.json @@ -1,18 +1,16 @@ { - "userDistanceSubscription": { - "subscriptionType": "UserDistanceSubscription", - "clientCorrelator": "0123", - "callbackReference": "http://my.callback.com/user-distance/some-id", - "referenceAddress": [ - "acr:10.0.0.3" - ], - "monitoredAddress": [ - "acr:10.0.0.1", - "acr:10.0.0.2" - ], - "distance": 100, - "trackingAccuracy": 10, - "criteria": "AllWithinDistance", - "checkImmediate": true - } - } \ No newline at end of file + "subscriptionType": "UserDistanceSubscription", + "clientCorrelator": "0123", + "callbackReference": "http://my.callback.com/user-distance/some-id", + "referenceAddress": [ + "acr:10.0.0.3" + ], + "monitoredAddress": [ + "acr:10.0.0.1", + "acr:10.0.0.2" + ], + "distance": 100, + "trackingAccuracy": 10, + "criteria": "AllWithinDistance", + "checkImmediate": true +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot b/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot index db5cf88..9d2157a 100644 --- a/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot +++ b/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot @@ -87,7 +87,7 @@ TC_MEC_MEC013_SRV_UELOCLOOK_002_OK_03 -TP_MEC_MEC013_SRV_UELOCLOOK_002_BR +TC_MEC_MEC013_SRV_UELOCLOOK_002_BR [Documentation] ... Check that the IUT responds with an error when ... inconsistent request was sent by a MEC Application - Invalid filter @@ -104,7 +104,7 @@ TP_MEC_MEC013_SRV_UELOCLOOK_002_BR -TP_MEC_MEC013_SRV_UELOCLOOK_002_NF +TC_MEC_MEC013_SRV_UELOCLOOK_002_NF [Documentation] ... Check that the IUT responds with an error ... when inconsistent request was sent by a MEC Application @@ -113,14 +113,14 @@ TP_MEC_MEC013_SRV_UELOCLOOK_002_NF ... ETSI GS MEC 013 3.1.1, clause 7.5.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES - [Setup] Create multiple subscriptions and get sub ids UserLocationEventSubscription UserLocationPeriodicSubscription + [Setup] Remove subscriptions ${SUB_ID_01} ${SUB_ID_02} Get subscriptions Check HTTP Response Status Code Is 404 [TearDown] Remove subscriptions ${SUB_ID_01} ${SUB_ID_02} -TP_MEC_MEC013_SRV_UELOCLOOK_003_OK_01 +TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_01 [Documentation] ... Check that the IUT responds with the subscription ... when queried by a MEC Application - UE location Event @@ -139,7 +139,7 @@ TP_MEC_MEC013_SRV_UELOCLOOK_003_OK_01 [TearDown] Remove subscription ${SUB_ID} -TP_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 +TC_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 [Documentation] ... Check that the IUT responds with the subscription when queried by a MEC Application - UE location Periodic ... @@ -158,7 +158,7 @@ TP_MEC_MEC013_SRV_UELOCLOOK_003_OK_02 -TP_MEC_MEC013_SRV_UELOCLOOK_003_NF +TC_MEC_MEC013_SRV_UELOCLOOK_003_NF [Documentation] ... Check that the IUT responds with an error ... when the non existing subscription is queried by a MEC Application diff --git a/MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json b/MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json index b2c76fa..c555314 100644 --- a/MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json +++ b/MEC013/SRV/UELOCLOOK/jsons/UserLocationPeriodicSubscription.json @@ -1,5 +1,6 @@ { "subscriptionType": "UserLocationPeriodicSubscription", + "callbackReference": "http://10.3.0.0.8:8888", "address": "acr:10.0.4.3", "periodicEventInfo": { "reportingAmount": 10, diff --git a/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot b/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot index f18faa6..a986ac1 100644 --- a/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot +++ b/MEC013/SRV/UEZONELOOK/PlatUeZoneLookup.robot @@ -101,7 +101,7 @@ TC_MEC_MEC013_SRV_UEZONELOOK_002_NF ... 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 + Get the zone info location ${NOT_EXISTING_SUB_ID} Check HTTP Response Status Code Is 404 -- GitLab From 01c22ffff51d391effc0969439813747783bfded Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 13 May 2024 09:23:18 +0200 Subject: [PATCH 73/94] Removed ZOINFOLOOK dir becausenot available in the MEC013 TPs dir list. --- .../SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot | 63 ------------------- MEC013/SRV/ZOINFOLOOK/README.md | 0 .../SRV/ZOINFOLOOK/environment/variables.txt | 14 ----- .../ZOINFOLOOK/schemas/ZoneInfo.schema.json | 48 -------------- .../ZOINFOLOOK/schemas/ZoneList.schema.json | 48 -------------- 5 files changed, 173 deletions(-) delete mode 100644 MEC013/SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot delete mode 100644 MEC013/SRV/ZOINFOLOOK/README.md delete mode 100644 MEC013/SRV/ZOINFOLOOK/environment/variables.txt delete mode 100644 MEC013/SRV/ZOINFOLOOK/schemas/ZoneInfo.schema.json delete mode 100644 MEC013/SRV/ZOINFOLOOK/schemas/ZoneList.schema.json diff --git a/MEC013/SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot b/MEC013/SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot deleted file mode 100644 index df20a25..0000000 --- a/MEC013/SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot +++ /dev/null @@ -1,63 +0,0 @@ -*** Settings *** - -Documentation -... A test suite for validating Radio Node Location Lookup (RLOCLOOK) operations. - -Resource ../../../GenericKeywords.robot -Resource ../../../pics.txt -Resource environment/variables.txt -Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false -Library OperatingSystem - -Default Tags TC_MEC_SRV_RLOCLOOK - - -*** Test Cases *** - -TC_MEC_MEC013_SRV_ZOINFOLOOK_001_OK - [Documentation] - ... TO BE COMPLETED - - [Tags] PIC_MEC_PLAT PIC_SERVICES INCLUDE_UNDEFINED_SCHEMAS - Get the zones info location list - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is ZoneList - - -TC_MEC_MEC013_SRV_ZOINFOLOOK_002_OK - [Documentation] - ... TO BE CMPLETED - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Get the zone info location ${ZONE_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is ZoneInfo - Should Be Equal As Strings ${response['body']['zoneInfo']['zoneId']} ${ZONE_ID} - -TC_MEC_MEC013_SRV_ZOINFOLOOK_002_NF - [Documentation] - ... TO BE CMPLETED - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Get the zone info location ${NON_EXISTENT_ZONE_ID} - Check HTTP Response Status Code Is 404 - -*** Keywords *** -Get the zone info location - [Arguments] ${zoneId} - Set Headers {"Accept":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/queries/zones/${zoneId} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Get the zones info location list - Set Headers {"Accept":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/queries/zones - ${output}= Output response - Set Suite Variable ${response} ${output} - - - diff --git a/MEC013/SRV/ZOINFOLOOK/README.md b/MEC013/SRV/ZOINFOLOOK/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/MEC013/SRV/ZOINFOLOOK/environment/variables.txt b/MEC013/SRV/ZOINFOLOOK/environment/variables.txt deleted file mode 100644 index a9bf262..0000000 --- a/MEC013/SRV/ZOINFOLOOK/environment/variables.txt +++ /dev/null @@ -1,14 +0,0 @@ -*** Variables *** -# Generic variables -${SCHEMA} http -${HOST} 10.192.2.172 -${PORT} 8081 -${response} {} -${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${apiRoot} -${apiName} location -${apiVersion} v2 - -# Specific variables -${ZONE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f -${NON_EXISTENT_ZONE_ID} NON_EXISTENT_ZONE_ID diff --git a/MEC013/SRV/ZOINFOLOOK/schemas/ZoneInfo.schema.json b/MEC013/SRV/ZOINFOLOOK/schemas/ZoneInfo.schema.json deleted file mode 100644 index b39dd2d..0000000 --- a/MEC013/SRV/ZOINFOLOOK/schemas/ZoneInfo.schema.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "object", - "properties": { - "zoneInfo": { - "description": "A type containing zone information.", - "properties": { - "numberOfAccessPoints": { - "description": "The number of access points within the zone", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUnserviceableAccessPoints": { - "description": "Number of inoperable access points within the zone.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsers": { - "description": "The number of users currently on the access point.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "zoneId", - "numberOfAccessPoints", - "numberOfUnserviceableAccessPoints", - "numberOfUsers", - "resourceURL" - ], - "type": "object" - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/ZOINFOLOOK/schemas/ZoneList.schema.json b/MEC013/SRV/ZOINFOLOOK/schemas/ZoneList.schema.json deleted file mode 100644 index b39dd2d..0000000 --- a/MEC013/SRV/ZOINFOLOOK/schemas/ZoneList.schema.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "type": "object", - "properties": { - "zoneInfo": { - "description": "A type containing zone information.", - "properties": { - "numberOfAccessPoints": { - "description": "The number of access points within the zone", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUnserviceableAccessPoints": { - "description": "Number of inoperable access points within the zone.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsers": { - "description": "The number of users currently on the access point.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "unsignedInt" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "zoneId", - "numberOfAccessPoints", - "numberOfUnserviceableAccessPoints", - "numberOfUsers", - "resourceURL" - ], - "type": "object" - } - } -} \ No newline at end of file -- GitLab From 78ac2369a1f9a08b9f0e803bee6713fc84153442 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 17 May 2024 14:43:36 +0200 Subject: [PATCH 74/94] Fixes on MEC015 TCs: updated referenced specification version, enhancement to some TCs and minor fixes on payload JSONs --- .../SRV/MTS/MultiAccessTrafficSteering.robot | 221 ++++++++++-------- .../SRV/MTS/environment/variables_sandbox.txt | 38 +++ .../MtsSessionInfoApplicationSpecific.json | 4 +- ...sSessionInfoApplicationSpecificUpdate.json | 10 +- .../MtsSessionInfoApplicationSpecific_BR.json | 2 - .../jsons/MtsSessionInfoSessionSpecific.json | 11 +- MEC015/SRV/TM/TrafficManagement.robot | 200 ++++++++-------- .../SRV/TM/environment/variables_sandbox.txt | 49 ++++ .../TM/jsons/BwInfoApplicationSpecific.json | 2 +- MEC015/SRV/TM/jsons/BwInfoDeltas.json | 2 +- MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json | 2 +- MEC015/SRV/TM/jsons/BwInfoUpdate.json | 2 +- MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json | 2 +- MEC015/SRV/TM/jsons/BwInfo_BR.json | 2 +- MEC015/SRV/TM/jsons/BwInfo_BR2.json | 2 +- .../TM/jsons/CreateAppInstanceRequest.json | 2 +- 16 files changed, 333 insertions(+), 218 deletions(-) create mode 100644 MEC015/SRV/MTS/environment/variables_sandbox.txt create mode 100644 MEC015/SRV/TM/environment/variables_sandbox.txt diff --git a/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot b/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot index cc0c916..46bf70e 100644 --- a/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot +++ b/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot @@ -1,8 +1,8 @@ ''[Documentation] robot --outputdir ../../../outputs ./MultiAccessTrafficSteering.robot -... Test Suite to validate Multi-access traffic steering API (MTS) operations. +... Test Suite to validate Multi-access Traffic Steering (MTS) API operations. *** Settings *** -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false @@ -12,10 +12,12 @@ Library String *** Test Cases *** TC_MEC_MEC015_SRV_MTS_001_OK [Documentation] - ... Check that the IUT responds with the Multi-access Traffic Steering information when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.4, - ... ETSI GS MEC 015 V2.1.1, clause 9.3.3.1 + ... Check that the IUT responds with the Multi-access Traffic Steering information + ... when queried by a MEC Application + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.4, + ... ETSI GS MEC 015 V2.2.1, clause 9.3.3.1 Retrieve MTS capability information Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MtsCapabilityInfo @@ -23,10 +25,12 @@ TC_MEC_MEC015_SRV_MTS_001_OK TC_MEC_MEC015_SRV_MTS_002_OK_01 [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 9.3.3.1 + ... Check that the IUT responds with the list of configured Multi-access Traffic Steering + ... when queried by a MEC Application - none + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 9.3.3.1 [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific ${elements} = Split String ${response['headers']['Location']} / Set Suite Variable ${SESSION_ID} ${elements}[3] @@ -38,17 +42,18 @@ TC_MEC_MEC015_SRV_MTS_002_OK_01 TC_MEC_MEC015_SRV_MTS_002_OK_02 [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 + ... Check that the IUT responds with the list of configured Multi-access Traffic Steering + ... when queried by a MEC Application - app_instance_id + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.1 [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific ${elements} = Split String ${response['headers']['Location']} / Set Suite Variable ${SESSION_ID} ${elements}[3] Retrieve MTS session list information using filter ${APP_NAME_FILTER} ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is MtsSessionInfo - LOG ${response} FOR ${mstSessionInfo} IN @{response['body']} ${passed} Run Keyword And Return Status Should Be Equal As Strings ${mstSessionInfo['appInsId']} ${APP_INSTANCE_ID} Exit For Loop If ${passed} @@ -56,43 +61,46 @@ TC_MEC_MEC015_SRV_MTS_002_OK_02 Should Be True ${passed} [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} -# TC_MEC_MEC015_SRV_MTS_002_OK_03 - # ##TODO the corresponding TP must be fixed: appName is not a property of mtsSessionInfo - # [Documentation] - # ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - # ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, - # ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, - # ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 - # [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific - - # ${APP_NAME} Get value entry from JSON file MtsSessionInfoApplicationSpecific appName - # Retrieve MTS session list information using filter ${APP_NAME_FILTER} ${APP_NAME} - # Check HTTP Response Status Code Is 200 - # Check HTTP Response Body Json Schema Is MtsSessionInfo - # [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} - -# TC_MEC_MEC015_SRV_MTS_002_OK_04 - # ##TODO the corresponding TP must be fixed: sessionId is not a property of mtsSessionInfo - # [Documentation] - # ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - # ... ETSI GS MEC 015 V2.1.1, clause 6.2.6, - # ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, - # ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 - # [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific - - # Check HTTP Response Status Code Is 200 - # Check HTTP Response Body Json Schema Is MtsSessionInfo - # [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} +TC_MEC_MEC015_SRV_MTS_002_OK_03 + [Documentation] + ... Check that the IUT responds with the list of configured Multi-access Traffic Steering + ... when queried by a MEC Application - app_name + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.1 + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + + Retrieve MTS session list information using filter ${APP_NAME_FILTER} ${APP_NAME} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is MtsSessionInfo + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} + + TC_MEC_MEC015_SRV_MTS_002_OK_04 + [Documentation] + ... Check that the IUT responds with the list of configured Multi-access Traffic Steering + ... when queried by a MEC Application - session_id + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.1 + [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific + Retrieve MTS session list information using filter ${SESSION_ID_FILTER} ${SESSION_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is MtsSessionInfo + [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} TC_MEC_MEC015_SRV_MTS_002_BR [Documentation] - ... Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + + ... ETSI GS MEC 015 V2.2.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.1 [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific - LOG ${response} ${elements} = Split String ${response['headers']['Location']} / Set Suite Variable ${SESSION_ID} ${elements}[3] @@ -103,8 +111,9 @@ TC_MEC_MEC015_SRV_MTS_002_BR TC_MEC_MEC015_SRV_MTS_002_NF [Documentation] - ... Check that the IUT responds with the list of configured Multi-access Traffic Steering when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.1 + ... Check that the IUT responds with an error + ... when a request with an unknown resource URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.1 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml [Setup] Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} Retrieve MTS session list information using filter ${CORRECT_FILTER} ${NOT_EXISTING_APP_INSTANCE_ID} @@ -115,13 +124,14 @@ TC_MEC_MEC015_SRV_MTS_002_NF TC_MEC_MEC015_SRV_MTS_003_OK_01 [Documentation] ... Check that the IUT creates a MTS session when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.7, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.2 + + ... ETSI GS MEC 015 V2.2.1, clause 6.2.6, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.2 [Setup] Create new App Instance CreateAppInstanceRequest Register MTS session MtsSessionInfoApplicationSpecific - Check HTTP Response Status Code Is 200 + Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is MtsSessionInfo ${appInsId} Get value entry from JSON file MtsSessionInfoApplicationSpecific appInsId ${requestType} Get value entry from JSON file MtsSessionInfoApplicationSpecific requestType @@ -139,10 +149,13 @@ TC_MEC_MEC015_SRV_MTS_003_OK_01 TC_MEC_MEC015_SRV_MTS_003_OK_02 [Documentation] ... Check that the IUT creates a MTS session when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.2 - [Setup] Create new App Instance CreateAppInstanceRequest + + ... ETSI GS MEC 015 V2.2.1, clause 6.2.7 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.2 + #[Setup] Create new App Instance CreateAppInstanceRequest Register MTS session MtsSessionInfoSessionSpecific - Check HTTP Response Status Code Is 200 + Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is MtsSessionInfo ${appInsId} Get value entry from JSON file MtsSessionInfoSessionSpecific appInsId ${requestType} Get value entry from JSON file MtsSessionInfoSessionSpecific requestType @@ -161,9 +174,12 @@ TC_MEC_MEC015_SRV_MTS_003_OK_02 TC_MEC_MEC015_SRV_MTS_003_BR [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 9.5.3.2 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + + ... ETSI GS MEC 015 V2.2.1, clause 6.2.7 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.5.3.2 [Setup] Create new App Instance CreateAppInstanceRequest Register MTS session MtsSessionInfoApplicationSpecific_BR Check HTTP Response Status Code Is 400 @@ -171,9 +187,12 @@ TC_MEC_MEC015_SRV_MTS_003_BR TC_MEC_MEC015_SRV_MTS_004_OK [Documentation] - ... Check that the IUT responds with a configured Multi-access Traffic Steering session when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.1 - ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + ... Check that the IUT responds with a configured Multi-access Traffic Steering session + ... when queried by a MEC Application + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.10 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.1 [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific ${elements} = Split String ${response['headers']['Location']} / Set Suite Variable ${SESSION_ID} ${elements}[3] @@ -191,18 +210,23 @@ TC_MEC_MEC015_SRV_MTS_004_OK [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} -# TC_MEC_MEC015_SRV_MTS_004_BR - # [Documentation] - # ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - # ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.1 - # ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - # Retrieve single MTS session ${WRONG_SESSION_ID} - # Check HTTP Response Status Code Is 400 +TC_MEC_MEC015_SRV_MTS_004_BR + [Documentation] + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.10 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.1 + ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + Retrieve single MTS session ${WRONG_SESSION_ID} + Check HTTP Response Status Code Is 404 TC_MEC_MEC015_SRV_MTS_004_NF [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.1 + ... Check that the IUT responds with an error + ... when a request with an unknown resource URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.1 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml [Setup] Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} Retrieve single MTS session ${NOT_EXISTING_SESSION_ID} @@ -211,10 +235,11 @@ TC_MEC_MEC015_SRV_MTS_004_NF TC_MEC_MEC015_SRV_MTS_005_OK [Documentation] - ... Check that the IUT updates the information about an individual MTS session when commanded by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.9 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.2 + ... Check that the IUT updates the information about an individual MTS session + ... when commanded by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.9 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.2 [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific ${elements} = Split String ${response['headers']['Location']} / Set Suite Variable ${SESSION_ID} ${elements}[3] @@ -223,12 +248,10 @@ TC_MEC_MEC015_SRV_MTS_005_OK Check HTTP Response Body Json Schema Is MtsSessionInfo ${appInsId} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate appInsId ${requestType} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate requestType - ${qosD} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate qosD ${mtsMode} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate mtsMode ${trafficDirection} Get value entry from JSON file MtsSessionInfoApplicationSpecificUpdate trafficDirection Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} Should Be Equal As Strings ${response['body']['requestType']} ${requestType} - Should Be Equal As Strings ${response['body']['qosD']} ${qosD} Should Be Equal As Strings ${response['body']['mtsMode']} ${mtsMode} Should Be Equal As Strings ${response['body']['trafficDirection']} ${trafficDirection} [TearDown] Unregister from the MTS Service And Delete APP Instance ${SESSION_ID} ${APP_INSTANCE_ID} @@ -237,9 +260,9 @@ TC_MEC_MEC015_SRV_MTS_005_OK TC_MEC_MEC015_SRV_MTS_005_BR [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.9 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.2 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.9 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.2 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific ${elements} = Split String ${response['headers']['Location']} / @@ -252,21 +275,23 @@ TC_MEC_MEC015_SRV_MTS_005_BR TC_MEC_MEC015_SRV_MTS_005_NF [Documentation] ... Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.9 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.2 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.9 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.2 ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml - [Setup] Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} + #[Setup] Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} Update requested requirements on the MTS Service ${NOT_EXISTING_SESSION_ID} MtsSessionInfoApplicationSpecificUpdate Check HTTP Response Status Code Is 404 TC_MEC_MEC015_SRV_MTS_006_OK [Documentation] - ... Check that the IUT deregisters a MTS session when commanded by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.8 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.3 + ... Check that the IUT deregisters a MTS session + ... when commanded by a MEC Application + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.8 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.3 [Setup] Create new App Instance and Register MTS session CreateAppInstanceRequest MtsSessionInfoApplicationSpecific ${elements} = Split String ${response['headers']['Location']} / Set Suite Variable ${SESSION_ID} ${elements}[3] @@ -275,10 +300,12 @@ TC_MEC_MEC015_SRV_MTS_006_OK TC_MEC_MEC015_SRV_MTS_006_NF [Documentation] - ... Check that the IUT deregisters a MTS session when commanded by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.8 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.5 - ... ETSI GS MEC 015 V2.1.1, clause 9.4.3.3 + ... Check that the IUT deregisters a MTS session + ... when commanded by a MEC Application + ... + ... ETSI GS MEC 015 V2.2.1, clause 6.2.8 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 9.4.3.3 [Setup] Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} Check HTTP Response Status Code Is 404 @@ -304,21 +331,19 @@ Create new App Instance Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - POST http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances ${body} + POST ${APP_INST_SCHEMA}://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances ${body} ${output}= Output response Set Suite Variable ${response} ${output} Set Suite Variable ${APP_INSTANCE_ID} ${response['body']['id']} - - Delete APP Instance [Arguments] ${app_instance_id} Log Get single App Instance Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - DELETE http://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances${app_instance_id} + DELETE ${APP_INST_SCHEMA}://${APP_INST_HOST}:${APP_INST_PORT}/${apiRoot_APP_INST}/${apiName_APP_INST}/${apiVersion_APP_INST}/app_instances${app_instance_id} ${output}= Output response Set Suite Variable ${response} ${output} @@ -330,7 +355,8 @@ Retrieve MTS capability information Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get ${apiRoot}/${apiName}/${apiVersion}/mts_info + Log ${apiRoot}/${apiName}/${apiVersion}/mts_capability_info + Get ${apiRoot}/${apiName}/${apiVersion}/mts_capability_info ${output}= Output response Set Suite Variable ${response} ${output} @@ -390,8 +416,7 @@ Register MTS session wrong URI ${output}= Output response Set Suite Variable ${response} ${output} - - + Retrieve single MTS session [Arguments] ${sessionId} diff --git a/MEC015/SRV/MTS/environment/variables_sandbox.txt b/MEC015/SRV/MTS/environment/variables_sandbox.txt new file mode 100644 index 0000000..3901782 --- /dev/null +++ b/MEC015/SRV/MTS/environment/variables_sandbox.txt @@ -0,0 +1,38 @@ +*** Variables *** +# Generic variables +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<your_token_here>/mep1 +${apiName} mts +${apiVersion} v1 + + +# Specific variables +${APP_INSTANCE_ID} 81c51643-8c6f-4781-ad45-f8a457ca549b +${NOT_EXISTING_APP_INSTANCE_ID} NOT_EXISTING_APP_INS_ID +${CORRECT_FILTER} app_instance_id +${APP_NAME_FILTER} app_name +${SESSION_ID_FILTER} session_id +${BAD_FILTER} appInsId +${APP_NAME} app_name + +${SESSION_ID} 5 +${WRONG_SESSION_ID} WRONG_SESSION_ID +${NOT_EXISTING_SESSION_ID} NOT_EXISTING_SESSION_ID + +${REQUEST_TYPE_APPLICATION} 1 +${MTS_LOW_MODE_COST} 0 +${TRAFFIC_DIRECTION_DL} 00 + + +##Variables for App Instances management +${APP_INST_SCHEMA} https +${APP_INST_HOST} try-mec.etsi.org +${APP_INST_PORT} 443 +${apiRoot_APP_INST} +${apiName_APP_INST} app_lcm +${apiVersion_APP_INST} v1 +${elements} \ No newline at end of file diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific.json index f8ec281..93cbbb0 100644 --- a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific.json +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific.json @@ -1,10 +1,10 @@ { - "appInsId": "myAppInstId", + "appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 0, "qosD": { "minTpt": 10 }, - "mtsMode": 0, + "mtsMode": 4, "trafficDirection": "00", "qosD":{ "minTpt":10 diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate.json index 16d8774..c113400 100644 --- a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate.json +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate.json @@ -1,12 +1,6 @@ { - "appInsId": "myAppInstId", + "appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 0, - "qosD": { - "minTpt": 30 - }, "mtsMode": 0, - "trafficDirection": "00", - "qosD":{ - "minTpt":10 - } + "trafficDirection": "00" } \ No newline at end of file diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific_BR.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific_BR.json index 814cd50..ca3280d 100644 --- a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific_BR.json +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific_BR.json @@ -7,9 +7,7 @@ "mtsMode": 0, "trafficDirection": "00", "flowFilter": [{ - "dstPort": [8081], "protocol": 41, - "sourcePort": [8081], "dstIp": "10.10.0.10", "dscp": 40, "sourceIp": "10.10.0.30" diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoSessionSpecific.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoSessionSpecific.json index d2429bc..9308f2d 100644 --- a/MEC015/SRV/MTS/jsons/MtsSessionInfoSessionSpecific.json +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoSessionSpecific.json @@ -1,20 +1,17 @@ { - "appInsId": "myAppInstId", + "appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 1, "mtsMode":4, "trafficDirection":"00", "qosD": { - "minTpt": 10 + "minTpt": 15 }, - "mtsMode": 0, "trafficDirection": "00", "flowFilter": [{ - "dstPort": [8081], "protocol": 41, - "sourcePort": [8081], - "dstIp": "10.10.0.10", + "dstIp": "10.10.0.1", "dscp": 40, - "sourceIp": "10.10.0.30" + "sourceIp": "10.10.0.2" } ], "qosD":{ diff --git a/MEC015/SRV/TM/TrafficManagement.robot b/MEC015/SRV/TM/TrafficManagement.robot index a964fd0..18d908a 100644 --- a/MEC015/SRV/TM/TrafficManagement.robot +++ b/MEC015/SRV/TM/TrafficManagement.robot @@ -1,8 +1,8 @@ ''[Documentation] robot --outputdir ../../../outputs ./TrafficManagement.robot -... Test Suite to validate Bandwidth Management allocations (BWA) operations. +... Test Suite to validate Bandwidth Management Allocations (BWA) operations. *** Settings *** -Resource environment/variables.txt +Resource environment/variables_sandbox.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false @@ -13,10 +13,11 @@ Library String TC_MEC_MEC015_SRV_TM_001_OK_01 [Documentation] - ... Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + ... Check that the IUT responds with the list of configured bandwidth allocations + ... when queried by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Retrieve the list of configured bandwidth allocations Check HTTP Response Status Code Is 200 @@ -26,10 +27,11 @@ TC_MEC_MEC015_SRV_TM_001_OK_01 TC_MEC_MEC015_SRV_TM_001_OK_02 [Documentation] - ... Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + ... Check that the IUT responds with the list of configured bandwidth allocations + ... when queried by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Retrieve the list of configured bandwidth using filter ${CORRECT_FILTER} ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 @@ -44,35 +46,37 @@ TC_MEC_MEC015_SRV_TM_001_OK_02 TC_MEC_MEC015_SRV_TM_001_OK_03 [Documentation] - ... Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + ... Check that the IUT responds with a configured bandwidth allocation + ... when queried by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Retrieve the list of configured bandwidth using filter ${APP_NAME_FILTER} ${APP_NAME} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is BwInfoList [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} -# TC_MEC_MEC015_SRV_TM_001_OK_04 - ##TODO To discuss the corresponding TP: the sessionId is not attribute of BwInfo data type - # [Documentation] - # ... Check that the IUT responds with a configured bandwidth allocation when queried by a MEC Application - # ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, - # ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - # ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 - # [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific - # Retrieve the list of configured bandwidth using filter ${SESSION_ID_FILTER} ${SESSION_ID} - # Check HTTP Response Status Code Is 200 - # Check HTTP Response Body Json Schema Is BwInfoList - # [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} +TC_MEC_MEC015_SRV_TM_001_OK_04 + [Documentation] + ... Check that the IUT responds with a configured bandwidth allocation + ... when queried by a MEC Application - session_id + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 + [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + Retrieve the list of configured bandwidth using filter ${SESSION_ID_FILTER} ${SESSION_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is BwInfoList + [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} TC_MEC_MEC015_SRV_TM_001_BR [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... Reference ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + ... Reference ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Retrieve the list of configured bandwidth using filter ${BAD_FILTER} ${APP_INSTANCE_ID} @@ -84,27 +88,29 @@ TC_MEC_MEC015_SRV_TM_001_NF_01 [Documentation] ... Check that the IUT responds with an error when ... a request with an unknown resource URI is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 Retrieve the list of configured bandwidth using filter ${CORRECT_FILTER} ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 TC_MEC_MEC015_SRV_TM_001_NF_02 [Documentation] - ... Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - app_name - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + ... Check that the IUT responds with an error + ... when a request with an unknown resource URI is sent by a MEC Application - app_name + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 Retrieve the list of configured bandwidth using filter ${APP_NAME_FILTER} ${NON_EXISTENT_APP_NAME} Check HTTP Response Status Code Is 404 TC_MEC_MEC015_SRV_TM_001_NF_03 [Documentation] - ... Check that the IUT responds with an error when a request with an unknown resource URI is sent by a MEC Application - session_id - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.1 + ... Check that the IUT responds with an error + ... when a request with an unknown resource URI is sent by a MEC Application - session_id + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.1 Retrieve the list of configured bandwidth using filter ${SESSION_ID_FILTER} ${NON_EXISTENT_SESSION_ID} Check HTTP Response Status Code Is 404 @@ -112,13 +118,13 @@ TC_MEC_MEC015_SRV_TM_001_NF_03 TC_MEC_MEC015_SRV_TM_002_OK [Documentation] ... Check that the IUT acknowledges a creation of a bandwidthAllocation resource - ... ETSI GS MEC 015 V2.1.1, clause 6.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2, - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2, + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.4 [Setup] Create new App Instance CreateAppInstanceRequest Registration for bandwidth services ${APP_INSTANCE_ID} BwInfoApplicationSpecific Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is BwInfo + Check HTTP Response Body Json Schema Is BwInfo ${appInsId} Get value entry from JSON file BwInfoApplicationSpecific appInsId ${requestType} Get value entry from JSON file BwInfoApplicationSpecific requestType ${fixedAllocation} Get value entry from JSON file BwInfoApplicationSpecific fixedAllocation @@ -132,8 +138,9 @@ TC_MEC_MEC015_SRV_TM_002_OK TC_MEC_MEC015_SRV_TM_002_BR_01 [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.4 ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json [Setup] Create new App Instance CreateAppInstanceRequest Registration for bandwidth services ${APP_INSTANCE_ID} BwInfo_BR @@ -142,8 +149,9 @@ TC_MEC_MEC015_SRV_TM_002_BR_01 TC_MEC_MEC015_SRV_TM_002_BR_02 [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 8.4.3.4 + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 8.4.3.4 ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json [Setup] Create new App Instance CreateAppInstanceRequest Registration for bandwidth services ${APP_INSTANCE_ID} BwInfo_BR2 @@ -154,10 +162,11 @@ TC_MEC_MEC015_SRV_TM_002_BR_02 TC_MEC_MEC015_SRV_TM_003_OK [Documentation] - ... Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.1 + ... Check that the IUT responds with the configured bandwidth allocation + ... when queried by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.1 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Get a bandwidth allocation ${ALLOCATION_ID} Check HTTP Response Status Code Is 200 @@ -168,10 +177,11 @@ TC_MEC_MEC015_SRV_TM_003_OK TC_MEC_MEC015_SRV_TM_003_NF [Documentation] - ... Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.5 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.1 + ... Check that the IUT responds with an error + ... when a request for an unknown URI is sent by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.5 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.1 [Setup] Unregister Bandwidth Management Service ${NON_EXISTENT_ALLOCATION_ID} Get a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} Check HTTP Response Status Code Is 404 @@ -180,11 +190,12 @@ TC_MEC_MEC015_SRV_TM_003_NF TC_MEC_MEC015_SRV_TM_004_OK [Documentation] - ... Check that the IUT updates the requested bandwidth requirements when commanded by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 - [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific + ... Check that the IUT updates the requested bandwidth requirements + ... when commanded by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.2 + #[Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Update a bandwidth allocation ${ALLOCATION_ID} BwInfoUpdate ${appInsId} Get value entry from JSON file BwInfoUpdate appInsId ${fixedAllocation} Get value entry from JSON file BwInfoUpdate fixedAllocation @@ -194,16 +205,15 @@ TC_MEC_MEC015_SRV_TM_004_OK Should Be Equal As Strings ${response['body']['appInsId']} ${appInsId} Should Be Equal As Strings ${response['body']['fixedAllocation']} ${fixedAllocation} Should Be Equal As Strings ${response['body']['allocationDirection']} ${allocationDirection} - [TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} + #[TearDown] Unregister bw Service And Delete APP Instance ${ALLOCATION_ID} ${APP_INSTANCE_ID} TC_MEC_MEC015_SRV_TM_004_BR_01 [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 - + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.2 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Update a bandwidth allocation ${ALLOCATION_ID} BwInfoUpdate_BR Check HTTP Response Status Code Is 400 @@ -213,9 +223,9 @@ TC_MEC_MEC015_SRV_TM_004_BR_01 TC_MEC_MEC015_SRV_TM_004_BR_02 [Documentation] ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.2 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Update a bandwidth allocation ${ALLOCATION_ID} BwInfoUpdate_BR2 Check HTTP Response Status Code Is 400 @@ -225,21 +235,22 @@ TC_MEC_MEC015_SRV_TM_004_BR_02 TC_MEC_MEC015_SRV_TM_004_NF [Documentation] ... Check that the IUT responds with an error when a request sent by a MEC Application doesn't comply with a required condition - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.2 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.2 - [Setup] Delete APP Instance ${NON_EXISTENT_ALLOCATION_ID} + #[Setup] Delete APP Instance ${NON_EXISTENT_ALLOCATION_ID} Update a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} BwInfoUpdate Check HTTP Response Status Code Is 404 TC_MEC_MEC015_SRV_TM_005_OK [Documentation] - ... Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 + ... Check that the IUT when provided with just the changes (deltas) + ... updates the requested bandwidth requirements when commanded by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.3 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Request a deltas changes ${ALLOCATION_ID} BwInfoDeltas @@ -255,20 +266,22 @@ TC_MEC_MEC015_SRV_TM_005_OK TC_MEC_MEC015_SRV_TM_005_BR_01 [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.3 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Request a deltas changes ${ALLOCATION_ID} BwInfoDeltas_BR Check HTTP Response Status Code Is 400 TC_MEC_MEC015_SRV_TM_005_BR_02 [Documentation] - ... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be present - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 + ... Check that the IUT responds with an error + ... when a request with incorrect parameters is sent by a MEC Application - sessionFilter shall be present + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.3 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Request a deltas changes ${ALLOCATION_ID} BwInfoDeltas_BR2 Check HTTP Response Status Code Is 400 @@ -277,9 +290,9 @@ TC_MEC_MEC015_SRV_TM_005_BR_02 TC_MEC_MEC015_SRV_TM_005_NF [Documentation] ... Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.4 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.3 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.4 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.3 [Setup] Delete APP Instance ${NON_EXISTENT_ALLOCATION_ID} Request a deltas changes ${NON_EXISTENT_ALLOCATION_ID} BwInfoDeltas Check HTTP Response Status Code Is 404 @@ -288,9 +301,9 @@ TC_MEC_MEC015_SRV_TM_005_NF TC_MEC_MEC015_SRV_TM_006_OK [Documentation] ... Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.3 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.5 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.3 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.5 [Setup] Create new App Instance and Register for bw service CreateAppInstanceRequest BwInfoApplicationSpecific Unregister Bandwidth Management Service ${ALLOCATION_ID} Check HTTP Response Status Code Is 204 @@ -299,9 +312,9 @@ TC_MEC_MEC015_SRV_TM_006_OK TC_MEC_MEC015_SRV_TM_006_NF [Documentation] ... Check that the IUT responds with an error when a request for an unknown URI is sent by a MEC Application - ... ETSI GS MEC 015 V2.1.1, clause 6.2.3 - ... ETSI GS MEC 015 V2.1.1, clause 7.2.2 - ... ETSI GS MEC 015 V2.1.1, clause 8.3.3.5 + ... ETSI GS MEC 015 V2.2.1, clause 6.2.3 + ... ETSI GS MEC 015 V2.2.1, clause 7.2.2 + ... ETSI GS MEC 015 V2.2.1, clause 8.3.3.5 [Setup] Unregister Bandwidth Management Service ${NON_EXISTENT_ALLOCATION_ID} Unregister Bandwidth Management Service ${NON_EXISTENT_ALLOCATION_ID} Check HTTP Response Status Code Is 404 @@ -353,6 +366,7 @@ Retrieve the list of configured bandwidth allocations Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} + Log ${apiRoot}/${apiName}/${apiVersion}/bw_allocations GET ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEC015/SRV/TM/environment/variables_sandbox.txt b/MEC015/SRV/TM/environment/variables_sandbox.txt new file mode 100644 index 0000000..6e72164 --- /dev/null +++ b/MEC015/SRV/TM/environment/variables_sandbox.txt @@ -0,0 +1,49 @@ +*** Variables *** + +# Generic variables +${SCHEMA} https +${HOST} try-mec.etsi.org +${PORT} 443 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} /<your_token_here>/mep1 +${apiName} bwm +${apiVersion} v1 + +# Specific variables + + + + +${CORRECT_FILTER} app_instance_id +${BAD_FILTER} appInsId +${APP_INSTANCE_ID} 81c51643-8c6f-4781-ad45-f8a457ca549b +${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_INSTANCE_ID +${SESSION_ID} 5 +${APP_NAME_FILTER} app_name +${APP_NAME} appName +${NON_EXISTENT_APP_NAME} NON_EXISTENT_APP_NAME + +${SESSION_ID_FILTER} session_id +${NON_EXISTENT_SESSION_ID} NON_EXISTENT_SESSION_ID + + +${FIXED_ALLOCATION} 32 +${ALLOCATION_DIRECTION} 00 + +${APP_SRVSUB_NOTIF_CALLBACK_URI} http://127.0.0.1/subscribe +${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID +${ALLOCATION_ID} 6 +${NON_EXISTENT_ALLOCATION_ID} NON_EXISTENT_ALLOCATION_ID +${INVALID_ETAG} INVALID_ETAG +${ETAG_VALUE} +${ETAG} + +##Variables for App Instances management +${APP_INST_HOST} 127.0.0.1 +${APP_INST_PORT} 8081 +${apiRoot_APP_INST} +${apiName_APP_INST} app_lcm +${apiVersion_APP_INST} v1 +${elements} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json b/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json index 9746f32..a0688f8 100644 --- a/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json +++ b/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json @@ -1,5 +1,5 @@ { - "appInsId": "appInstanceId", + "appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 0, "fixedAllocation": "32", "allocationDirection": "00" diff --git a/MEC015/SRV/TM/jsons/BwInfoDeltas.json b/MEC015/SRV/TM/jsons/BwInfoDeltas.json index 4bcc10f..d2d8d10 100644 --- a/MEC015/SRV/TM/jsons/BwInfoDeltas.json +++ b/MEC015/SRV/TM/jsons/BwInfoDeltas.json @@ -1,5 +1,5 @@ { -"appInsId": "appInstanceId", +"appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 0, "fixedAllocation": "32", "allocationDirection": "01" diff --git a/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json index 0a8c388..fdca335 100644 --- a/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json +++ b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json @@ -1,6 +1,6 @@ { "appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", - "requestType": "0", + "requestType": 0, "sessionFilter":"someValues", "fixedAllocation": "32", "allocationDirection": "01" diff --git a/MEC015/SRV/TM/jsons/BwInfoUpdate.json b/MEC015/SRV/TM/jsons/BwInfoUpdate.json index 4bcc10f..d2d8d10 100644 --- a/MEC015/SRV/TM/jsons/BwInfoUpdate.json +++ b/MEC015/SRV/TM/jsons/BwInfoUpdate.json @@ -1,5 +1,5 @@ { -"appInsId": "appInstanceId", +"appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 0, "fixedAllocation": "32", "allocationDirection": "01" diff --git a/MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json index a4f6dac..27e6975 100644 --- a/MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json +++ b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR2.json @@ -1,5 +1,5 @@ { -"appInsId": "appInstanceId", +"appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 1, "fixedAllocation": "64" } \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfo_BR.json b/MEC015/SRV/TM/jsons/BwInfo_BR.json index af487d2..1b3e26f 100644 --- a/MEC015/SRV/TM/jsons/BwInfo_BR.json +++ b/MEC015/SRV/TM/jsons/BwInfo_BR.json @@ -1,5 +1,5 @@ { -"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 0, "sessionFlter":"someValues", "fixedAllocation": "INVALID_VALUE", diff --git a/MEC015/SRV/TM/jsons/BwInfo_BR2.json b/MEC015/SRV/TM/jsons/BwInfo_BR2.json index 8f616f0..9736c06 100644 --- a/MEC015/SRV/TM/jsons/BwInfo_BR2.json +++ b/MEC015/SRV/TM/jsons/BwInfo_BR2.json @@ -1,5 +1,5 @@ { -"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", +"appInsId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "requestType": 1, "fixedAllocation": "-30", "allocationDirection": "00" diff --git a/MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json b/MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json index 3691ba6..2e28c82 100644 --- a/MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json +++ b/MEC015/SRV/TM/jsons/CreateAppInstanceRequest.json @@ -1,5 +1,5 @@ { - "appDId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", + "appDId": "81c51643-8c6f-4781-ad45-f8a457ca549b", "appInstanceDescription": "description", "appInstanceName": "name" } \ No newline at end of file -- GitLab From f6521130d34e4f9458619835c63f05bf658708a4 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 17 May 2024 15:25:52 +0200 Subject: [PATCH 75/94] Minor on MEC033 IOTDEV TC --- MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot index 3c22208..ba938d8 100644 --- a/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot +++ b/MEC033/MEX/IOTS/IOTDEV/RegisteredDevices.robot @@ -16,7 +16,8 @@ Test Teardown Test TearDown ${DEVICE_ID_PLACEHOLDER} DeviceInfo ${N *** Test Cases *** TC_MEC_MEC033_IOTS_IOTDEV_001_OK_01 [Documentation] - ... Check that the IUT responds with the list of registered IoT devices when queried by a Service Consumer + ... Check that the IUT responds with the list of registered IoT devices + ... when queried by a Service Consumer ... ETSI GS MEC 033 V3.1.1, clause 7.3.3.1 ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf -- GitLab From 0a46cb113c300e56428407d293f187dddae34b10 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 17 May 2024 15:26:31 +0200 Subject: [PATCH 76/94] Minor on MEC033 IOTPLAT --- MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot | 2 +- MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt | 1 - 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot b/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot index ccf8e13..664a174 100644 --- a/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot +++ b/MEC033/MEX/IOTS/IOTPLAT/RegisteredIoTPlatform.robot @@ -21,7 +21,7 @@ TC_MEC_MEC033_MEX_IOTS_IOTPLAT_001_OK ... https://www.etsi.org/deliver/etsi_gs/MEC/001_099/033/03.01.01_60/gs_MEC033v030101p.pdf [Setup] Test Setup ${None} IoTPlatformInfo ${REGISTER_ACTION} ${IOT_PLATFORM_ID_VALUE} Get value entry from JSON file IoTPlatformInfo iotPlatformId - LOG ${IOT_PLATFORM_ID_VALUE} + Retrieve all registered IOT Platform information Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is IotPlatformInfoList diff --git a/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt b/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt index f6e22dd..2f4e182 100644 --- a/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt +++ b/MEC033/MEX/IOTS/IOTPLAT/environment/variables.txt @@ -13,7 +13,6 @@ ${REGISTER_ACTION} REGISTER ${REMOVE_ACTION} REMOVE ${NO_ACTION} NO_ACTION - ${PLATFORM_ID_PLACEHOLDER} PLATFORM_ID_PLACEHOLDER ${IOT_PLATFORM_ID} iotPlatformId ${NOT_EXISTING_IOT_PLATFORM_ID} notExistingIotPlatformId \ No newline at end of file -- GitLab From f716a5f3a8c5b623bdb8ebe5a756c3066676c196 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 17 May 2024 15:54:18 +0200 Subject: [PATCH 77/94] Created subdir for TCs. --- MEC040/SRV/{ => MEF}/FederationEnablement.robot | 0 MEC040/SRV/{ => MEF}/environment/variables.txt | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfo.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfo2.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfo3.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfoBR.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfoEmptySystemProvider.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdate.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdate2.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdate3.json | 0 MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdateBR.json | 0 MEC040/SRV/{ => MEF}/schemas/SystemInfo.schema.json | 0 MEC040/SRV/{ => MEF}/schemas/SystemInfoList.schema.json | 0 13 files changed, 0 insertions(+), 0 deletions(-) rename MEC040/SRV/{ => MEF}/FederationEnablement.robot (100%) rename MEC040/SRV/{ => MEF}/environment/variables.txt (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfo.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfo2.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfo3.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfoBR.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfoEmptySystemProvider.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdate.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdate2.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdate3.json (100%) rename MEC040/SRV/{ => MEF}/jsons/SystemInfoUpdateBR.json (100%) rename MEC040/SRV/{ => MEF}/schemas/SystemInfo.schema.json (100%) rename MEC040/SRV/{ => MEF}/schemas/SystemInfoList.schema.json (100%) diff --git a/MEC040/SRV/FederationEnablement.robot b/MEC040/SRV/MEF/FederationEnablement.robot similarity index 100% rename from MEC040/SRV/FederationEnablement.robot rename to MEC040/SRV/MEF/FederationEnablement.robot diff --git a/MEC040/SRV/environment/variables.txt b/MEC040/SRV/MEF/environment/variables.txt similarity index 100% rename from MEC040/SRV/environment/variables.txt rename to MEC040/SRV/MEF/environment/variables.txt diff --git a/MEC040/SRV/jsons/SystemInfo.json b/MEC040/SRV/MEF/jsons/SystemInfo.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfo.json rename to MEC040/SRV/MEF/jsons/SystemInfo.json diff --git a/MEC040/SRV/jsons/SystemInfo2.json b/MEC040/SRV/MEF/jsons/SystemInfo2.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfo2.json rename to MEC040/SRV/MEF/jsons/SystemInfo2.json diff --git a/MEC040/SRV/jsons/SystemInfo3.json b/MEC040/SRV/MEF/jsons/SystemInfo3.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfo3.json rename to MEC040/SRV/MEF/jsons/SystemInfo3.json diff --git a/MEC040/SRV/jsons/SystemInfoBR.json b/MEC040/SRV/MEF/jsons/SystemInfoBR.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfoBR.json rename to MEC040/SRV/MEF/jsons/SystemInfoBR.json diff --git a/MEC040/SRV/jsons/SystemInfoEmptySystemProvider.json b/MEC040/SRV/MEF/jsons/SystemInfoEmptySystemProvider.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfoEmptySystemProvider.json rename to MEC040/SRV/MEF/jsons/SystemInfoEmptySystemProvider.json diff --git a/MEC040/SRV/jsons/SystemInfoUpdate.json b/MEC040/SRV/MEF/jsons/SystemInfoUpdate.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfoUpdate.json rename to MEC040/SRV/MEF/jsons/SystemInfoUpdate.json diff --git a/MEC040/SRV/jsons/SystemInfoUpdate2.json b/MEC040/SRV/MEF/jsons/SystemInfoUpdate2.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfoUpdate2.json rename to MEC040/SRV/MEF/jsons/SystemInfoUpdate2.json diff --git a/MEC040/SRV/jsons/SystemInfoUpdate3.json b/MEC040/SRV/MEF/jsons/SystemInfoUpdate3.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfoUpdate3.json rename to MEC040/SRV/MEF/jsons/SystemInfoUpdate3.json diff --git a/MEC040/SRV/jsons/SystemInfoUpdateBR.json b/MEC040/SRV/MEF/jsons/SystemInfoUpdateBR.json similarity index 100% rename from MEC040/SRV/jsons/SystemInfoUpdateBR.json rename to MEC040/SRV/MEF/jsons/SystemInfoUpdateBR.json diff --git a/MEC040/SRV/schemas/SystemInfo.schema.json b/MEC040/SRV/MEF/schemas/SystemInfo.schema.json similarity index 100% rename from MEC040/SRV/schemas/SystemInfo.schema.json rename to MEC040/SRV/MEF/schemas/SystemInfo.schema.json diff --git a/MEC040/SRV/schemas/SystemInfoList.schema.json b/MEC040/SRV/MEF/schemas/SystemInfoList.schema.json similarity index 100% rename from MEC040/SRV/schemas/SystemInfoList.schema.json rename to MEC040/SRV/MEF/schemas/SystemInfoList.schema.json -- GitLab From 99b617866e1cb0a0e82534e9e1fbcef2a148f6b4 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 20 May 2024 15:34:56 +0200 Subject: [PATCH 78/94] Fix on Test setup and test teardown of MEC040 TCs --- MEC040/SRV/MEF/FederationEnablement.robot | 157 +++++++++++++--------- 1 file changed, 96 insertions(+), 61 deletions(-) diff --git a/MEC040/SRV/MEF/FederationEnablement.robot b/MEC040/SRV/MEF/FederationEnablement.robot index ba14e44..f89104b 100644 --- a/MEC040/SRV/MEF/FederationEnablement.robot +++ b/MEC040/SRV/MEF/FederationEnablement.robot @@ -2,10 +2,12 @@ Y''[Documentation] robot --outputdir ../../../outputs ./FederationEnablement.r ... Test Suite to validate the Federation Enablement API (FED) operations. *** Settings *** Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem +Library String + Test Setup Test Setup ${SYSTEM_ID_PLACEHOLDER} SystemInfo ${NO_ACTION} @@ -19,11 +21,11 @@ TC_MEC_MEC040_SRV_MEF_001_OK ... when requested by a MEC Orchestrator - No query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 Retrieve all system info resources Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} @@ -33,13 +35,14 @@ TC_MEC_MEC040_SRV_MEF_001_OK_02 ... when requested by a MEC Orchestrator - SystemId query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - #SystemId cannot be set by the requestor, so Test setup and test tear down are not applicable + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 Retrieve all system info resources with query params ${SYSTEM_ID_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} - Should Be Equal As Strings ${element}[systemId] ${EXPECTED_SYSTEM_ID} + Should Be Equal As Strings ${element}[systemId] ${SYSTEM_ID_1} END + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_001_OK_03 [Documentation] @@ -47,21 +50,25 @@ TC_MEC_MEC040_SRV_MEF_001_OK_03 ... when requested by a MEC Orchestrator - Multiple SystemId query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - #SystemId cannot be set by the requestor, so Test setup and test tear down are not applicable + + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 + Retrieve all system info resources with query params ${MULTIPLE_SYSTEM_ID_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} - IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' + IF '''${element}[systemId]''' == '''${SYSTEM_ID_1}''' ${found_first_system_id} Set Variable ${TRUE} END - IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID2}''' + IF '''${element}[systemId]''' == '''${SYSTEM_ID_2}''' ${found_second_system_id} Set Variable ${TRUE} END END Should Be True ${found_first_system_id} Should Be True ${found_second_system_id} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} + TC_MEC_MEC040_SRV_MEF_001_OK_04 [Documentation] @@ -69,11 +76,12 @@ TC_MEC_MEC040_SRV_MEF_001_OK_04 ... when requested by a MEC Orchestrator - Empty SystemId query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 + Retrieve all system info resources Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_001_OK_05 @@ -82,7 +90,7 @@ TC_MEC_MEC040_SRV_MEF_001_OK_05 ... when requested by a MEC Orchestrator - SystemName query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 ${SYSTEM_NAME_VALUE} Get value entry from JSON file SystemInfo systemName Retrieve all system info resources with query params ${SYSTEM_NAME_QUERY_PARAM} @@ -91,8 +99,7 @@ TC_MEC_MEC040_SRV_MEF_001_OK_05 FOR ${element} IN @{response['body']} Should Be Equal As Strings ${element}[systemName] ${SYSTEM_NAME_VALUE} END - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} - + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_001_OK_06 [Documentation] @@ -100,9 +107,9 @@ TC_MEC_MEC040_SRV_MEF_001_OK_06 ... when requested by a MEC Orchestrator - Multiple SystemName query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 ${SYSTEM_NAME_VALUE} Get value entry from JSON file SystemInfo systemName - + ${SYSTEM_NAME_VALUE_2} Get value entry from JSON file SystemInfo2 systemName Retrieve all system info resources with query params ${MUTIPLE_SYSTEM_NAME_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList @@ -110,13 +117,13 @@ TC_MEC_MEC040_SRV_MEF_001_OK_06 IF '''${element}[systemName]''' == '''${SYSTEM_NAME_VALUE}''' ${found_sys_name_one} Set Variable ${TRUE} END - IF '''${element}[systemName]''' == '''${EXPECTED_SYSTEM_NAME2}''' + IF '''${element}[systemName]''' == '''${SYSTEM_NAME_VALUE_2}''' ${found_sys_name_two} Set Variable ${TRUE} END END Should Be True ${found_sys_name_one} Should Be True ${found_sys_name_two} - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} @@ -126,12 +133,12 @@ TC_MEC_MEC040_SRV_MEF_001_OK_07 ... when requested by a MEC Orchestrator - Empty SystemName query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 Retrieve all system info resources with query params ${EMPTY_SYSTEM_NAME_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_001_OK_08 @@ -140,7 +147,7 @@ TC_MEC_MEC040_SRV_MEF_001_OK_08 ... when requested by a MEC Orchestrator - systemProvider query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 ${SYS_PROVIDER_VALUE} Get value entry from JSON file SystemInfo systemProvider Retrieve all system info resources with query params ${SYSTEM_PROVIDER_QUERY_PARAM} @@ -149,7 +156,7 @@ TC_MEC_MEC040_SRV_MEF_001_OK_08 FOR ${element} IN @{response['body']} Should Be Equal As Strings ${element}[systemProvider] ${SYS_PROVIDER_VALUE} END - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_001_OK_09 @@ -158,24 +165,24 @@ TC_MEC_MEC040_SRV_MEF_001_OK_09 ... when requested by a MEC Orchestrator - Multiple systemProvider query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - ##TODO complete + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 Retrieve all system info resources with query params ${MUTIPLE_SYS_PROVIDER_QUERY_PAR} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} ${SYS_PROVIDER_VALUE} Get value entry from JSON file SystemInfo systemProvider - + ${SYS_PROVIDER_VALUE_2} Get value entry from JSON file SystemInfo2 systemProvider + FOR ${element} IN @{response['body']} IF '''${element}[systemProvider]''' == '''${SYS_PROVIDER_VALUE}''' ${sys_provider_found} Set Variable ${TRUE} END - IF '''${element}[systemProvider]''' == '''${EXPECTED_SYSTEM_PROVIDER2}''' + IF '''${element}[systemProvider]''' == '''${SYS_PROVIDER_VALUE_2}''' ${sys_provider2_found} Set Variable ${TRUE} END END Should Be True ${sys_provider_found} Should Be True ${sys_provider2_found} - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} @@ -185,14 +192,14 @@ TC_MEC_MEC040_SRV_MEF_001_OK_10 ... when requested by a MEC Orchestrator - Empty systemProvider query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfoEmptySystemProvider ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 Retrieve all system info resources with query params ${EMPTY_SYSTEM_PROVIDER_QUERY_PARAM} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList FOR ${element} IN @{response['body']} Should Be Equal As Strings ${element}[systemProvider] ${EMPTY} END - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_001_OK_11 @@ -201,16 +208,17 @@ TC_MEC_MEC040_SRV_MEF_001_OK_11 ... when requested by a MEC Orchestrator - Multiple query parameters ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 ${SYS_NAME_VALUE} Get value entry from JSON file SystemInfo systemName - + ${SYS_ID} Get value entry from JSON file SystemInfo systemName + Retrieve all system info resources with query params ${FILTER_ON_SYSTEM_ID_AND_NAME} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfoList ${counterSystemId} Set Variable ${0} ${counterSystemName} Set Variable ${0} FOR ${element} IN @{response['body']} - IF '''${element}[systemId]''' == '''${EXPECTED_SYSTEM_ID}''' + IF '''${element}[systemId]''' == '''${SYS_ID}''' ${counterSystemId}= set variable ${counterSystemId+1} END IF '''${element}[systemName]''' == '''${SYS_NAME_VALUE}''' @@ -220,7 +228,7 @@ TC_MEC_MEC040_SRV_MEF_001_OK_11 END Should Be True '${counterSystemName}'>'0' Should Be True '${counterSystemId}'>'0' - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_001_NF_01 @@ -229,11 +237,11 @@ TC_MEC_MEC040_SRV_MEF_001_NF_01 ... when selection is not applicable - SystemId ... ETSI GS MEC 040 V3.1.1, clause 7.3.3.1, clause 5.2.2.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${NOT_EXT_SYSTEM_ID_QUERY_PARAM} ${None} ${REMOVE_ACTION} + [Setup] Remove specific system info resource ${NOT_EXT_SYSTEM_ID_QUERY_PARAM} Retrieve all system info resources with query params ${NOT_EXT_SYSTEM_ID_QUERY_PARAM} Check HTTP Response Status Code Is 404 -TP_MEC_MEC040_SRV_MEF_001_NF_02 +TC_MEC_MEC040_SRV_MEF_001_NF_02 [Documentation] ... Check that the IUT responds with an error ... when selection is not applicable - SystemName @@ -278,7 +286,7 @@ TC_MEC_MEC040_SRV_MEF_002_OK Should Be Equal As Strings ${response['body']['systemName']} ${SYS_NAME_VALUE} Should Be Equal As Strings ${response['body']['systemProvider']} ${SYS_NAME_PROVIDER} - [Teardown] Test TearDown ${response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove specific system info resource ${response['body']['systemId']} @@ -306,10 +314,12 @@ TC_MEC_MEC040_SRV_MEF_003_OK ... when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause 7.4.3.1, clause 5.2.2.1.1 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - ## No test setup and teardown applicable because systemId is generated by IUT - Retrieve specific system info resource ${EXPECTED_SYSTEM_ID} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 + Retrieve specific system info resource ${SYSTEM_ID_1} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is SystemInfo + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} + TC_MEC_MEC040_SRV_MEF_003_NF [Documentation] @@ -317,7 +327,7 @@ TC_MEC_MEC040_SRV_MEF_003_NF ... when it receives a request for returning a systemInfo referred with a wrong systemId ... ETSI GS MEC 040 V3.1.1, clause 7.4.3.1, clause 5.2.2.1.1 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${NOT_EXISTING_SYSTEM_ID} ${None} ${REMOVE_ACTION} + [Setup] Remove specific system info resource ${NOT_EXISTING_SYSTEM_ID} Retrieve specific system info resource ${NOT_EXISTING_SYSTEM_ID} Check HTTP Response Status Code Is 404 @@ -336,12 +346,12 @@ TC_MEC_MEC040_SRV_MEF_004_OK_01 ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 ${SYS_PROVIDER} Get value entry from JSON file SystemInfoUpdate endpoint - Update specific system info resource ${setup_response['body']['systemId']} SystemInfoUpdate + Update specific system info resource ${SYSTEM_ID_1} SystemInfoUpdate Check HTTP Response Status Code Is 200 Should Be Equal As Strings ${response['body']['systemProvider']} ${SYS_PROVIDER} - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_004_OK_02 @@ -349,12 +359,12 @@ TC_MEC_MEC040_SRV_MEF_004_OK_02 ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} - Update specific system info resource ${setup_response['body']['systemId']} SystemInfoUpdate2 + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 + Update specific system info resource ${SYSTEM_ID_1} SystemInfoUpdate2 ${SYS_NAME} Get value entry from JSON file SystemInfoUpdate2 systemName Check HTTP Response Status Code Is 200 Should Be Equal As Strings ${response['body']['systemName']} ${SYS_NAME} - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} @@ -363,15 +373,15 @@ TC_MEC_MEC040_SRV_MEF_004_OK_03 ... Check that the IUT updates the systemInfo when requested by a MEC Orchestrator ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} - Update specific system info resource ${setup_response['body']['systemId']} SystemInfoUpdate3 + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 + Update specific system info resource ${SYSTEM_ID_1} SystemInfoUpdate3 Check HTTP Response Status Code Is 200 ${SYS_NAME} Get value entry from JSON file SystemInfoUpdate3 systemName ${SYS_PROVIDER} Get value entry from JSON file SystemInfoUpdate3 endpoint Should Be Equal As Strings ${response['body']['systemName']} ${SYS_NAME} Should Be Equal As Strings ${response['body']['systemProvider']} ${SYS_PROVIDER} - [Teardown] Test TearDown ${setup_response['body']['systemId']} ${None} ${REMOVE_ACTION} + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_004_NF @@ -379,42 +389,46 @@ TC_MEC_MEC040_SRV_MEF_004_NF ... Check that the IUT responds with an error when requested to update an unknown systemInfo ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${NOT_EXISTING_SYSTEM_ID} ${None} ${REMOVE_ACTION} + [Setup] Remove specific system info resource ${NOT_EXISTING_SYSTEM_ID} Update specific system info resource ${NOT_EXISTING_SYSTEM_ID} SystemInfoUpdate3 Check HTTP Response Status Code Is 404 -##TODO double check the corresponding TP -#TC_MEC_MEC040_SRV_MEF_004_BR_01 - #[Documentation] - #... Check that the IUT responds with an error when requested to update with an inconsistant URI - #... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 - #... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - #Update specific system info resource ${NOT_EXISTING_SYSTEM_ID} SystemInfoUpdate3 - #Check HTTP Response Status Code Is 400 +##TODO double check corresponding TP +TC_MEC_MEC040_SRV_MEF_004_BR_01 + [Documentation] + ... Check that the IUT responds with an error when requested to update with an inconsistant URI + ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 + ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + Update specific system info resource ${NOT_EXISTING_SYSTEM_ID} SystemInfoUpdate3 + Check HTTP Response Status Code Is 400 TC_MEC_MEC040_SRV_MEF_004_BR_02 [Documentation] ... Check that the IUT responds with an error when requested to update with no data provided ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.3, clause 5.2.2.1.2 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 Update specific system info resource ${EXPECTED_SYSTEM_ID} SystemInfoUpdateBR Check HTTP Response Status Code Is 400 + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} + TC_MEC_MEC040_SRV_MEF_005_OK [Documentation] ... Check that the IUT responds with an error when requested to delete an unknown systemInfo ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.5, clause 5.2.2.1.3 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${None} SystemInfo ${REGISTER_ACTION} - Remove specific system info resource ${EXPECTED_SYSTEM_ID} + [Setup] Register mutiple system Info and get system Ids SystemInfo SystemInfo2 SystemInfo3 + Remove specific system info resource ${SYSTEM_ID_1} Check HTTP Response Status Code Is 204 + [Teardown] Remove mutiple system Info ${SYSTEM_ID_1} ${SYSTEM_ID_2} ${SYSTEM_ID_3} TC_MEC_MEC040_SRV_MEF_005_NF [Documentation] ... Check that the IUT responds with an error when requested to delete an unknown systemInfo ... ETSI GS MEC 040 V3.1.1, clause clause 7.4.3.5, clause 5.2.2.1.3 ... https://www.etsi.org/deliver/etsi_gs/mec/001_099/040/03.01.01_60/gs_mec040v030101p.pdf - [Setup] Test Setup ${NOT_EXISTING_SYSTEM_ID} ${None} ${REMOVE_ACTION} + [Setup] Remove specific system info resource ${NOT_EXISTING_SYSTEM_ID} Remove specific system info resource ${NOT_EXISTING_SYSTEM_ID} Check HTTP Response Status Code Is 404 @@ -477,7 +491,7 @@ Retrieve all system info resources with query params ${output}= Output response Set Suite Variable ${response} ${output} - Retrieve specific system info resource +Retrieve specific system info resource [Arguments] ${SYSTEM_INFO_ID} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 @@ -501,6 +515,27 @@ Register System Info ${output}= Output response Set Suite Variable ${response} ${output} +Register mutiple system Info and get system Ids + [Arguments] ${content_01} ${content_02} ${content_03} + Register System Info ${content_01} + Set Suite Variable ${SYSTEM_ID_1} ${response}[body][systemId] + Register System Info ${content_02} + Set Suite Variable ${SYSTEM_ID_2} ${response}[body][systemId] + Register System Info ${content_03} + Set Suite Variable ${SYSTEM_ID_3} ${response}[body][systemId] + + +Remove mutiple system Info + [Arguments] ${sys_id_1} ${sys_id_2} ${sys_id_3} + Remove specific system info resource ${sys_id_1} + Remove specific system info resource ${sys_id_2} + Remove specific system info resource ${sys_id_3} + +Register System Info and get system Id + [Arguments] ${content} + Register System Info ${content} + Set Suite Variable ${SYSTEM_ID} ${response}[body][systemId] + Update specific system info resource [Arguments] ${systemId} ${content} -- GitLab From 45ae75c851c848b02ca67ddfc54932865891dba8 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 23 May 2024 10:06:36 +0200 Subject: [PATCH 79/94] Minor --- MEC011/SRV/SAQ/environment/variables.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/MEC011/SRV/SAQ/environment/variables.txt b/MEC011/SRV/SAQ/environment/variables.txt index c71ddd3..4c8c3bd 100644 --- a/MEC011/SRV/SAQ/environment/variables.txt +++ b/MEC011/SRV/SAQ/environment/variables.txt @@ -8,6 +8,7 @@ ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} ${apiName} mec_service_mgmt ${apiVersion} v1 +${SCHEMA_APP_SAQ} http # Specific variables ${INVALID_VALUE} INVALID_VALUE -- GitLab From 1d256c261569b38e8b0829b74d7fd539a7e76b8e Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 27 May 2024 15:45:45 +0200 Subject: [PATCH 80/94] Minor fixes on some missing env variable missing. --- MEC011/SRV/MLS/environment/variables.txt | 2 ++ MEC011/SRV/TRAF/environment/variables.txt | 1 + MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json | 2 +- MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot | 4 ++-- MEC014/SRV/UETAG/environment/variables.txt | 2 +- MEC015/SRV/MTS/environment/variables.txt | 5 +++-- MEC015/SRV/TM/environment/variables.txt | 2 +- 7 files changed, 11 insertions(+), 7 deletions(-) diff --git a/MEC011/SRV/MLS/environment/variables.txt b/MEC011/SRV/MLS/environment/variables.txt index 53aa16a..be8a168 100644 --- a/MEC011/SRV/MLS/environment/variables.txt +++ b/MEC011/SRV/MLS/environment/variables.txt @@ -10,6 +10,8 @@ ${apiRoot} # Specific variables ${URL_SERVICE_MEC_LIVENESS} /link/to/individual/mecServiceLiveness ${NOT_EXISTING_URL_SERVICE_MEC_LIVENESS} /not_existing_link/to/individual/mecServiceLiveness +${URL_SERVICE_MEC_LIVENESS} link/to/individual/mecServiceLiveness +${LIVENESS_URI} link/to/individual/mecServiceLiveness #Variables for test setups and teardowns diff --git a/MEC011/SRV/TRAF/environment/variables.txt b/MEC011/SRV/TRAF/environment/variables.txt index 4519014..b9bf9ee 100644 --- a/MEC011/SRV/TRAF/environment/variables.txt +++ b/MEC011/SRV/TRAF/environment/variables.txt @@ -17,6 +17,7 @@ ${NON_EXISTENT_TRAFFIC_RULE_ID} NON_EXISTENT_TRAFFIC_RULE_ID ${INVALID_ETAG} INVALID_ETAG ##Registration App variables +${SCHEMA_REGAPP} http ${HOST_REGAPP} 127.0.0.1 ${PORT_REGAPP} 8082 ${apiRoot_REGAPP} diff --git a/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json index 1068a47..c7fd6b1 100644 --- a/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json +++ b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json @@ -1,5 +1,5 @@ { - "trafficRuleId": "traffic_rule_01", + "trafficRuleId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", "filterType": "FLOW", "priority": 1, "trafficFilter": [ diff --git a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot index 47a3eb3..fe7edad 100644 --- a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot +++ b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot @@ -44,5 +44,5 @@ Check S1BearerInfo Check L2MeasInfo [Arguments] ${received_value} log ${received_value} - #Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} - Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi']['cellId']} ${CELL_ID} + Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} + #Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi']['cellId']} ${CELL_ID} diff --git a/MEC014/SRV/UETAG/environment/variables.txt b/MEC014/SRV/UETAG/environment/variables.txt index 8230688..0d7dbf7 100644 --- a/MEC014/SRV/UETAG/environment/variables.txt +++ b/MEC014/SRV/UETAG/environment/variables.txt @@ -9,7 +9,7 @@ ${apiName} ui ${apiVersion} v1 ${ZONE_ID} zone01 -${APP_INSTANCE_ID} +${APP_INSTANCE_ID} app-inst-id ${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_APP_INSTANCE_ID ${UE_IDENTITY_TAG} UeIdentityTag ${UE_IDENTITY_TAG_INVALID_STATE} UeTagC diff --git a/MEC015/SRV/MTS/environment/variables.txt b/MEC015/SRV/MTS/environment/variables.txt index b585dd8..7dd119b 100644 --- a/MEC015/SRV/MTS/environment/variables.txt +++ b/MEC015/SRV/MTS/environment/variables.txt @@ -10,12 +10,13 @@ ${apiName} mts ${apiVersion} v1 # Specific variables -${APP_INSTANCE_ID} appInstId01 +${APP_NAME} app_name +${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${NOT_EXISTING_APP_INSTANCE_ID} NOT_EXISTING_APP_INS_ID ${CORRECT_FILTER} app_instance_id ${APP_NAME_FILTER} APP_NAME ${BAD_FILTER} appInsId - +${SESSION_ID_FILTER} session_id ${SESSION_ID} 1 ${WRONG_SESSION_ID} WRONG_SESSION_ID ${NOT_EXISTING_SESSION_ID} NOT_EXISTING_SESSION_ID diff --git a/MEC015/SRV/TM/environment/variables.txt b/MEC015/SRV/TM/environment/variables.txt index fd3aab1..8807f2c 100644 --- a/MEC015/SRV/TM/environment/variables.txt +++ b/MEC015/SRV/TM/environment/variables.txt @@ -25,7 +25,7 @@ ${NON_EXISTENT_APP_NAME} NON_EXISTENT_APP_NAME ${SESSION_ID_FILTER} session_id ${NON_EXISTENT_SESSION_ID} NON_EXISTENT_SESSION_ID - +${SESSION_ID} 5 ${FIXED_ALLOCATION} 32 ${ALLOCATION_DIRECTION} 00 -- GitLab From 211b0d9d6c2b36c6f90a15c638d1ea9a79f5e25d Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 3 Jun 2024 10:38:10 +0200 Subject: [PATCH 81/94] Minor typo of TC name fixed. --- .../SRV/UEINFOLOOK/PlatUeInformationLookup.robot | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot index 305bb0b..c17ae42 100644 --- a/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot +++ b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot @@ -5,7 +5,7 @@ Documentation Resource ../../../GenericKeywords.robot Resource ../../../pics.txt -Resource environment/variables_sandbox.txt +Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,8 +13,7 @@ Default Tags TC_MEC_SRV_UEINFOLOOK *** Test Cases *** - -TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01 +TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK_01 [Documentation] ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location ... when queried by a MEC Application - No Filter @@ -28,7 +27,7 @@ TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_01 Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is UserList -TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_02 +TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK_02 [Documentation] ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location ... when queried by a MEC Application - Filter with one address @@ -44,7 +43,7 @@ TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_02 -TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_03 +TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK_03 [Documentation] ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location ... when queried by a MEC Application - Filter with several addresses @@ -59,7 +58,7 @@ TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_03 Check HTTP Response Body Json Schema Is UserList -TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_04 +TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK_04 [Documentation] ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location ... when queried by a MEC Application - Filter with several zoneIds @@ -76,7 +75,7 @@ TC_MEC_MEC013_SRV_UEINFLOOK_001_OK_04 -TC_MEC_MEC013_SRV_UEINFLOOK_001_BR +TC_MEC_MEC013_SRV_UEINFOLOOK_001_BR [Documentation] ... Check that the IUT responds with the information pertaining to one or more UEs in a particular location ... when queried by a MEC Application - Filter with several zoneIds @@ -89,7 +88,7 @@ TC_MEC_MEC013_SRV_UEINFLOOK_001_BR Get list of users with filter addr ${ACR_ADDRESS} Check HTTP Response Status Code Is 400 -TC_MEC_MEC013_SRV_UEINFLOOK_001_NF +TC_MEC_MEC013_SRV_UEINFOLOOK_001_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application -- GitLab From 3918be1b2292b042aa651cf2b492c251281478f2 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 3 Jun 2024 13:08:32 +0200 Subject: [PATCH 82/94] Various improvements on MEC010p2 PKGM TCs: references fixed, added missing TCs, fixed typos. --- MEC010p2/MEO/PKGM/AppPkgMgt.robot | 115 +++++++++----- MEC010p2/MEO/PKGM/environment/variables.txt | 18 +-- .../MEO/PKGM/jsons/AppPkgNotification.json | 17 +++ MEC010p2/MEO/PKGM/libraries/Server.py | 144 ++++++++++++++++++ .../schemas/AppPkgNotification.json.schema | 68 +++++++++ 5 files changed, 313 insertions(+), 49 deletions(-) create mode 100644 MEC010p2/MEO/PKGM/jsons/AppPkgNotification.json create mode 100644 MEC010p2/MEO/PKGM/libraries/Server.py create mode 100644 MEC010p2/MEO/PKGM/schemas/AppPkgNotification.json.schema diff --git a/MEC010p2/MEO/PKGM/AppPkgMgt.robot b/MEC010p2/MEO/PKGM/AppPkgMgt.robot index 529fd81..67ab59a 100644 --- a/MEC010p2/MEO/PKGM/AppPkgMgt.robot +++ b/MEC010p2/MEO/PKGM/AppPkgMgt.robot @@ -7,7 +7,7 @@ Resource ../../../GenericKeywords.robot Library REST ${MEO_SCHEMA}://${MEO_HOST}:${MEO_PORT} ssl_verify=false Library BuiltIn Library OperatingSystem -#Library MockServerLibrary +Library libraries/Server.py Test Setup Test Setup ${APP_PKG_ID_PLACEHOLDER} AppPkgInfo ${NO_ACTION} Test Teardown Test TearDown ${APP_PKG_ID_PLACEHOLDER} AppPkgInfo ${NO_ACTION} @@ -44,8 +44,7 @@ TC_MEC_MEC010p2_MEO_PKGM_002_01_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_002_01_OK ... Check that MEO returns the list of App Packages when requested - Note 3 ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - Note 3 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} GET all app Packages @@ -61,8 +60,7 @@ TC_MEC_MEC010p2_MEO_PKGM_002_02_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_002_02_OK ... Check that MEO returns the list of App Packages when requested - Note 3 ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2 Note 3 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} GET all onboarded app Packages @@ -88,8 +86,7 @@ TC_MEC_MEC010p2_MEO_PKGM_003_01_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_003_01_OK ... Check that MEO returns the an App Package when requested - Note 3 ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} GET an app Package identified by ${ON_BOARDED_APP_PKG_ID} @@ -104,8 +101,7 @@ TC_MEC_MEC010p2_MEO_PKGM_003_02_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_003_02_OK ... Check that MEO returns the an onboarded App Package when requested - Note 3 ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} GET an onboarded app Package identified by ${ON_BOARDED_APP_PKG_ID} @@ -121,7 +117,7 @@ TC_MEC_MEC010p2_MEO_PKGM_003_NF ... Check that MEO responds with an error when it receives ... a request for retrieving a App Package referred with a wrong ID ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS GET an APP Package identified by ${NON_EXISTENT_APP_PKG_ID} Check HTTP Response Status Code Is 404 @@ -154,6 +150,7 @@ TC_MEC_MEC010p2_MEO_PKGM_005_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_005_OK ... Check that MEO updates the operational state of an individual application package resource ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.5 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.8.2" //AppPkgInfoModifications [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} Update Operational State for an app Package ${ON_BOARDED_APP_PKG_ID} AppPkgInfoModifications.json @@ -167,6 +164,7 @@ TC_MEC_MEC010p2_MEO_PKGM_005_BR [Documentation] TP_MEC_MEC010p2_MEO_PKGM_005_BR ... Check that MEO sends an error when it receives a malformed request to modify the operational state of an application package ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.5 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.8.2" //AppPkgInfoModifications [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Test Setup ${None} CreateAppPackage ${REGISTER_ACTION} Update Operational State for an app Package ${ON_BOARDED_APP_PKG_ID} AppPkgInfoModificationsBadRequest.json @@ -177,8 +175,8 @@ TC_MEC_MEC010p2_MEO_PKGM_005_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_005_NF ... Check that MEO responds with an error when it receives ... a request for updating an App Package referred with a wrong ID - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.5 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.5 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.8.2" //AppPkgInfoModifications [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Test Setup ${NON_EXISTENT_APP_PKG_ID} ${None} ${REMOVE_ACTION} Update Operational State for an app Package ${NON_EXISTENT_APP_PKG_ID} AppPkgInfoModificationsBadRequest.json @@ -189,8 +187,8 @@ TC_MEC_MEC010p2_MEO_PKGM_006_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_006_OK ... Check that MEO service returns an application package subscription when requested ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 ##Type: AppPkgSubscription + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 ##Type: AppPkgSubscriptionInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} Send a request for a subscription AppPkgSubscription.json @@ -204,20 +202,20 @@ TC_MEC_MEC010p2_MEO_PKGM_006_OK TC_MEC_MEC010p2_MEO_PKGM_006_BR [Documentation] TP_MEC_MEC010p2_MEO_PKGM_006_BR ... Check that MEO service sends an error when it receives a malformed request for creating a new subscription on AppPackages - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.1", - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4", - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 ##Type: AppPkgSubscription + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 ##Type: AppPkgSubscriptionInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Send a request for a subscription AppPkgSubscriptionBadRequest.json Check HTTP Response Status Code Is 400 -TC_MEC_MEC010p2_MEO_PKGM_007_OK - [Documentation] TP_MEC_MEC010p2_MEO_PKGM_007_OK - ... Check that MEO service returns the list of Application Package Subscriptions when requested +TC_MEC_MEC010p2_MEO_PKGM_007_OK_01 + [Documentation] TP_MEC_MEC010p2_MEO_PKGM_007_OK_01 + ... Check that MEO service returns the list of Application Package + ... Subscriptions when requested ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.2 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.5.2 ##AppPkgSubscriptionLinkList [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Send a request for a subscription AppPkgSubscription.json Get all APP Package subscriptions @@ -226,11 +224,26 @@ TC_MEC_MEC010p2_MEO_PKGM_007_OK [TearDown] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} +TC_MEC_MEC010p2_MEO_PKGM_007_OK_02 + [Documentation] TP_MEC_MEC010p2_MEO_PKGM_007_OK_02 + ... Check that MEO service returns the list of Application Package + ... Subscriptions when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.5.2 ##AppPkgSubscriptionLinkList + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Send a request for a subscription AppPkgSubscription.json + Get all APP Package subscriptions + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList + [TearDown] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} + + + TC_MEC_MEC010p2_MEO_PKGM_008_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_008_OK ... Check that MEO service returns an Application Package Subscription when requested ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4.2 ##AppPkgSubscriptionInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Send a request for a subscription AppPkgSubscription.json Get an individual APP Package subscriptions ${SUBSCRIPTION_ID} @@ -243,8 +256,7 @@ TC_MEC_MEC010p2_MEO_PKGM_008_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_008_NF ... Check that MEO service sends an error when it receives a query for a subscription on AppPackages with a wrong identifier ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4.2 ##AppPkgSubscriptionInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} Get an individual APP Package subscriptions ${NON_EXISTENT_SUBSCRIPTION_ID} @@ -267,28 +279,29 @@ TC_MEC_MEC010p2_MEO_PKGM_009_NF ... Check that MEO service sends an error when it receives a deletion request for a subscription on AppPackages ... with a wrong identifier ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Delete an App Package Subscription identified by NON_EXISTENT_SUBSCRIPTION_ID Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 -##TODO integrate notification server -#TC_MEC_MEC010p2_MEO_PKGM_010_OK - #[Documentation] TP_MEC_MEC010p2_MEO_PKGM_009_NF - #... Check that the MEO service sends a application package notification - #... if the MEO service has an associated subscription and the event is generated - #... "ETSI GS MEC 010-2 3.1.1, clause 7.3.5.3.1", - #... "ETSI GS MEC 010-2 3.1.1, clause 6.2.3.6.2" //AppPkgNotification - #[Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - #[Setup] - #[Teardown] + +TC_MEC_MEC010p2_MEO_PKGM_010_OK + [Documentation] TP_MEC_MEC010p2_MEO_PKGM_009_NF + ... Check that the MEO service sends a application package notification + ... if the MEO service has an associated subscription and the event is generated + ... "ETSI GS MEC 010-2 3.1.1, clause 7.3.5.3.1", + ... "ETSI GS MEC 010-2 3.1.1, clause 6.2.3.6.2" ##AppPkgNotification + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Send a request for a subscription AppPkgSubscription.json + Spawn Notification Server AppPkgNotification + Validate Json AppPkgNotification.schema.json ${payload_notification} + [TearDown] Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} TC_MEC_MEC010p2_MEO_PKGM_011_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_011_OK ... Check that MEO reads the content of the AppD of on-boarded individual application package resources when requested ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2.2 ##AppD [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Post Request to create new App Package Resource CreateAppPackage.json Get an AppD from App Package identified by ${ON_BOARDED_APP_PKG_ID} @@ -300,8 +313,7 @@ TC_MEC_MEC010p2_MEO_PKGM_011_NF [Documentation] TP_MEC_MEC010p2_MEO_PKGM_011_NF ... Check that MEO responds with an error when it receives ... a request to retrieve an application descriptor referred with a wrong app package ID - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2", - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS [Setup] Delete an individual APP Package identified by ${NON_EXISTING_APPD_ID} Get an AppD from App Package identified by ${NON_EXISTING_APPD_ID} @@ -337,6 +349,27 @@ TC_MEC_MEC010p2_MEO_PKGM_012_BR [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS Get app Package identified by ${ON_BOARDED_APP_PKG_ID} ${WRONG_CONTENT_TYPE} Check HTTP Response Status Code Is 400 + + +TC_MEC_MEC010p2_MEO_PKGM_012_01_NF + [Documentation] TP_MEC_MEC010p2_MEO_PKGM_012_01_NF + ... Check that MEO service sends an error when it receives a request referring a wrong appPkgId + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an individual APP Package identified by ${NOT_EXISTING_APP_PKG_ID} + Get onboarded app Package identified by ${NOT_EXISTING_APP_PKG_ID} ${ACCEPTED_CONTENT_TYPE_ZIP} + Check HTTP Response Status Code Is 404 + + +TC_MEC_MEC010p2_MEO_PKGM_012_02_NF + [Documentation] TP_MEC_MEC010p2_MEO_PKGM_012_01_NF + ... Check that MEO service sends an error when it receives a request referring a wrong appPkgId + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + [Setup] Delete an individual APP Package identified by ${NON_EXISTING_ON_BOARDED_APPD_ID} + Get onboarded app Package identified by ${NON_EXISTING_ON_BOARDED_APPD_ID} ${ACCEPTED_CONTENT_TYPE_ZIP} + Check HTTP Response Status Code Is 404 + TC_MEC_MEC010p2_MEO_PKGM_013_OK [Documentation] TP_MEC_MEC010p2_MEO_PKGM_013_OK @@ -574,4 +607,8 @@ Delete an App Package Subscription identified by ${output}= Output response Set Suite Variable ${response} ${output} +Spawn Notification Server + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + Set Suite Variable ${payload_notification} ${output} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/environment/variables.txt b/MEC010p2/MEO/PKGM/environment/variables.txt index 660539d..e377698 100644 --- a/MEC010p2/MEO/PKGM/environment/variables.txt +++ b/MEC010p2/MEO/PKGM/environment/variables.txt @@ -40,19 +40,17 @@ ${WRONG_CONTENT_TYPE} application/json ${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 ${NOT_EXISTING_APP_PKG_ID} NOT_EXISTING_APP_PKG_ID - +${NOT_EXISTING_ON_BOARDED_APP_PKG_ID} NOT_EXISTING_ON_BOARDED_APP_PKG_ID +${NON_EXISTING_ON_BOARDED_APPD_ID} NON_EXISTING_ON_BOARDED_APPD_ID ${SUBSCRIPTION_TYPE} AppPackageOnBoardingSubscription ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID ${CALLBACK_URI} http://some.url/somepath -# Notifications variables -${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar - -${callback_port} 9091 -${callback_uri} http://172.22.1.7:${callback_port} -${callback_endpoint} /amsi/subscriptions -${callback_endpoint_error} /subs_404 -${total_polling_time} 2 min -${polling_interval} 10 sec \ No newline at end of file +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/jsons/AppPkgNotification.json b/MEC010p2/MEO/PKGM/jsons/AppPkgNotification.json new file mode 100644 index 0000000..6e1ae30 --- /dev/null +++ b/MEC010p2/MEO/PKGM/jsons/AppPkgNotification.json @@ -0,0 +1,17 @@ +{ + "id": "1234", + "notificationType": "AppPackageOnBoarded", + "subscriptionId": "1234", + "timeStamp": { + "seconds": 1234, + "nanoSeconds": 1234 + }, + "appPkgId": "appPkgId", + "appDId": "appDId", + "operationalState": "ENABLED", + "_links": { + "subscription": { + "href": "someuri/url" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/libraries/Server.py b/MEC010p2/MEO/PKGM/libraries/Server.py new file mode 100644 index 0000000..c983c3b --- /dev/null +++ b/MEC010p2/MEO/PKGM/libraries/Server.py @@ -0,0 +1,144 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + notification_json= import_notification_json(self.handler.get_resp_body()) + return notification_json + diff --git a/MEC010p2/MEO/PKGM/schemas/AppPkgNotification.json.schema b/MEC010p2/MEO/PKGM/schemas/AppPkgNotification.json.schema new file mode 100644 index 0000000..a021991 --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/AppPkgNotification.json.schema @@ -0,0 +1,68 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "notificationType": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "timeStamp": { + "type": "object", + "properties": { + "seconds": { + "type": "integer" + }, + "nanoSeconds": { + "type": "integer" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ] + }, + "appPkgId": { + "type": "string" + }, + "appDId": { + "type": "string" + }, + "operationalState": { + "type": "string" + }, + "_links": { + "type": "object", + "properties": { + "subscription": { + "type": "object", + "properties": { + "href": { + "type": "string" + } + }, + "required": [ + "href" + ] + } + }, + "required": [ + "subscription" + ] + } + }, + "required": [ + "id", + "notificationType", + "subscriptionId", + "timeStamp", + "appPkgId", + "appDId", + "operationalState", + "_links" + ] +} \ No newline at end of file -- GitLab From 14a641989ffa66a88cee20db2064cfd2a291e13c Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 3 Jun 2024 16:56:42 +0200 Subject: [PATCH 83/94] Removed useless files. --- MEC014/SRV/UETAG/PlatUeIdentity.robot | 3 +- MEC014/SRV/UETAG/resources/LocationAPI.robot | 12 -------- .../SRV/UETAG/resources/UEidentityAPI.robot | 28 ------------------- 3 files changed, 1 insertion(+), 42 deletions(-) delete mode 100644 MEC014/SRV/UETAG/resources/LocationAPI.robot delete mode 100644 MEC014/SRV/UETAG/resources/UEidentityAPI.robot diff --git a/MEC014/SRV/UETAG/PlatUeIdentity.robot b/MEC014/SRV/UETAG/PlatUeIdentity.robot index 5a1de92..d7b7f0e 100644 --- a/MEC014/SRV/UETAG/PlatUeIdentity.robot +++ b/MEC014/SRV/UETAG/PlatUeIdentity.robot @@ -5,7 +5,6 @@ Resource environment/variables.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot -Resource resources/UEidentityAPI.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false @@ -97,7 +96,7 @@ TC_MEC_MEC014_SRV_UETAG_002_NF [Documentation] Register an UE Identity Tag using invalid state ... Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application ... Reference ETSI GS MEC 014 3.1.1, clause 7.3.3.2 - [Setup] Delete APP Instance ${NON_EXISTENT_APP_INSTANCE_ID} + #[Setup] Delete APP Instance ${NON_EXISTENT_APP_INSTANCE_ID} Update an UE Identity Tag ${NON_EXISTENT_APP_INSTANCE_ID} IdentityTag Check HTTP Response Status Code Is 404 diff --git a/MEC014/SRV/UETAG/resources/LocationAPI.robot b/MEC014/SRV/UETAG/resources/LocationAPI.robot deleted file mode 100644 index 012566b..0000000 --- a/MEC014/SRV/UETAG/resources/LocationAPI.robot +++ /dev/null @@ -1,12 +0,0 @@ -*** Settings *** -Resource ../environment/variables.txt -Resource LocationAPI.robot -#Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false -Library JSONSchemaLibrary schemas/ - -*** Keywords *** -Check Location - [Arguments] ${value} - Log Check Location for userInfo element - Should be Equal ${response['body']['userInfo']['zoneId']} ${value} - Log Location OK diff --git a/MEC014/SRV/UETAG/resources/UEidentityAPI.robot b/MEC014/SRV/UETAG/resources/UEidentityAPI.robot deleted file mode 100644 index 1cb3e49..0000000 --- a/MEC014/SRV/UETAG/resources/UEidentityAPI.robot +++ /dev/null @@ -1,28 +0,0 @@ -*** Settings *** -Resource ../environment/variables.txt -Resource ../../../../pics.txt -Resource ../../../../GenericKeywords.robot -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false -Library JSONSchemaLibrary schemas/ - - -*** Keywords *** -Check User Identity Tag state - [Arguments] ${ue_identity_tag} ${state} - Should Be True ${PIC_MEC_PLAT} 1 - Should Be True ${PIC_SERVICES} 1 - Log Check ueIdentityTag state ${state} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Get /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTag=${ue_identity_tag} - ${output}= Output response - Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is ueIdentityTagInfo - #Log Check ueIdentityTagsList for ${UE_IDENTITY_TAG} element - ${result}= Should Be Present In Json List ${response['body']['ueIdentityTagInfo']['ueIdentityTags']} ueIdentityTag ${UE_IDENTITY_TAG} - #Log ${UE_IDENTITY_TAG} found with state ${result} - Should Be Equal ${result}[state] ${state} - [return] ${state} -- GitLab From 2789ad97c857cd84fe11dcccf9288c1c42bf4c6f Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Mon, 3 Jun 2024 17:16:37 +0200 Subject: [PATCH 84/94] Refactoring of some MEC012 TCs --- MEC012/SRV/RNIS/RnisAllSubscriptions.robot | 3 +- MEC012/SRV/RNIS/RnisQuery.robot | 31 ++++++++++-- .../SRV/RNIS/RnisSpecificSubscription.robot | 3 +- MEC012/SRV/RNIS/environment/variables.txt | 2 +- MEC012/SRV/RNIS/resources/LocationAPI.robot | 12 ----- .../RadioNetworkInformationAPI.robot | 48 ------------------- 6 files changed, 31 insertions(+), 68 deletions(-) delete mode 100644 MEC012/SRV/RNIS/resources/LocationAPI.robot delete mode 100644 MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot diff --git a/MEC012/SRV/RNIS/RnisAllSubscriptions.robot b/MEC012/SRV/RNIS/RnisAllSubscriptions.robot index 465efd7..11d78f7 100644 --- a/MEC012/SRV/RNIS/RnisAllSubscriptions.robot +++ b/MEC012/SRV/RNIS/RnisAllSubscriptions.robot @@ -2,10 +2,9 @@ ... Test Suite to validate RNIS/Subscription (RNIS) operations. *** Settings *** -Resource environment/variables_sandbox.txt +Resource environment/variables.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot -#Resource resources/RadioNetworkInformationAPI.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false Library String diff --git a/MEC012/SRV/RNIS/RnisQuery.robot b/MEC012/SRV/RNIS/RnisQuery.robot index ea28910..4ebe27f 100644 --- a/MEC012/SRV/RNIS/RnisQuery.robot +++ b/MEC012/SRV/RNIS/RnisQuery.robot @@ -2,10 +2,9 @@ ... Test Suite to validate RNIS/Subscription (RNIS) operations. *** Settings *** -Resource environment/variables_sandbox.txt +Resource environment/variables.txt Resource ../../../pics.txt Resource ../../../GenericKeywords.robot -Resource resources/RadioNetworkInformationAPI.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false @@ -261,4 +260,30 @@ Get Layer2Meas Info Set Headers {"Content-Length":"0"} Get ${apiRoot}/rni/${apiVersion}/queries/layer2_meas?cell_id=${CELL_ID} ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file + Set Suite Variable ${response} ${output} + + +Check RabInfo + [Arguments] ${received_value} + log ${received_value} + Should Not Be Empty ${received_value['requestId']} + Run Keyword If 'cellUserInfo' in ${received_value} Should Be Equal As Strings ${received_value['cellUserInfo'][0]['ecgi']['cellId']} ${CELL_ID} + +Check PlmnInfo + [Arguments] ${received_value} + log ${received_value} + Should Be Equal As Strings ${received_value['appInstanceId']} ${APP_INS_ID} + Should Not Be Empty ${received_value['plmn'][0]['mcc']} + Should Not Be Empty ${received_value['plmn'][0]['mnc']} + + +Check S1BearerInfo + [Arguments] ${received_value} + log ${received_value} + Should Be Equal As Strings ${received_value['s1UeInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} + +Check L2MeasInfo + [Arguments] ${received_value} + log ${received_value} + Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} + #Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi']['cellId']} ${CELL_ID} diff --git a/MEC012/SRV/RNIS/RnisSpecificSubscription.robot b/MEC012/SRV/RNIS/RnisSpecificSubscription.robot index 13a6dc9..3b6ba71 100644 --- a/MEC012/SRV/RNIS/RnisSpecificSubscription.robot +++ b/MEC012/SRV/RNIS/RnisSpecificSubscription.robot @@ -3,9 +3,8 @@ *** Settings *** Library OperatingSystem -Resource environment/variables_sandbox.txt +Resource environment/variables.txt Resource ../../../GenericKeywords.robot -Resource resources/RadioNetworkInformationAPI.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false Library String diff --git a/MEC012/SRV/RNIS/environment/variables.txt b/MEC012/SRV/RNIS/environment/variables.txt index f655911..e494041 100644 --- a/MEC012/SRV/RNIS/environment/variables.txt +++ b/MEC012/SRV/RNIS/environment/variables.txt @@ -19,7 +19,7 @@ ${NOTIFICATION_SERVER_HTTP_METHOD} POST ${NOTIFICATION_SERVER_URI} /callback_url ${NOTIFICATION_SERVER_TIMEOUT} 5 - +${PIC_RNIS_SPECIFIC_SUBSCRIPTION} 1 ${NON_EXISTENT_SUBSCRIPTION_ID} 123456789 ${APP_INS_ID} appInsId ${NOT_EXISTENT_APP_INS_ID} NOT_EXISTENT_APP_INS_ID diff --git a/MEC012/SRV/RNIS/resources/LocationAPI.robot b/MEC012/SRV/RNIS/resources/LocationAPI.robot deleted file mode 100644 index 012566b..0000000 --- a/MEC012/SRV/RNIS/resources/LocationAPI.robot +++ /dev/null @@ -1,12 +0,0 @@ -*** Settings *** -Resource ../environment/variables.txt -Resource LocationAPI.robot -#Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false -Library JSONSchemaLibrary schemas/ - -*** Keywords *** -Check Location - [Arguments] ${value} - Log Check Location for userInfo element - Should be Equal ${response['body']['userInfo']['zoneId']} ${value} - Log Location OK diff --git a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot deleted file mode 100644 index fe7edad..0000000 --- a/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot +++ /dev/null @@ -1,48 +0,0 @@ -*** Settings *** -Resource ../environment/variables.txt -Resource ../../../../pics.txt -Resource ../../../../GenericKeywords.robot -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false -Library JSONSchemaLibrary schemas/ - - -*** Keywords *** -Check Subscription - [Arguments] ${received_value} ${expected_value} - Should Be Equal ${received_value['_links']['self']} ${LINKS_SELF} - ${length} Get Length ${received_value['subscription']} - :FOR ${item} IN RANGE 0 ${length} - \ Exit For Loop If ${received_value['subscription'][${item}]} == ${expected_value} - Log Item found ${received_value['subscription'][${item}]} - [return] ${received_value['subscription'][${item}]} - - -Check CellChangeSubscription - [Arguments] ${received_value} - Should Be Equal ${received_value['_links']['self']['href']} ${LINKS_SELF} - - -Check RabInfo - [Arguments] ${received_value} - log ${received_value} - Should Not Be Empty ${received_value['requestId']} - Run Keyword If 'cellUserInfo' in ${received_value} Should Be Equal As Strings ${received_value['cellUserInfo'][0]['ecgi']['cellId']} ${CELL_ID} - -Check PlmnInfo - [Arguments] ${received_value} - log ${received_value} - Should Be Equal As Strings ${received_value['appInstanceId']} ${APP_INS_ID} - Should Not Be Empty ${received_value['plmn'][0]['mcc']} - Should Not Be Empty ${received_value['plmn'][0]['mnc']} - - -Check S1BearerInfo - [Arguments] ${received_value} - log ${received_value} - Should Be Equal As Strings ${received_value['s1UeInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} - -Check L2MeasInfo - [Arguments] ${received_value} - log ${received_value} - Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi'][0]['cellId']} ${CELL_ID} - #Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi']['cellId']} ${CELL_ID} -- GitLab From 0701552c9665f2662d9905c7e7ebef0ee8889c23 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 4 Jun 2024 10:19:33 +0200 Subject: [PATCH 85/94] Updated syntax of FOR construct to a newer version --- MEX/ANY/ANY.robot | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/MEX/ANY/ANY.robot b/MEX/ANY/ANY.robot index e0381ad..8d743cd 100644 --- a/MEX/ANY/ANY.robot +++ b/MEX/ANY/ANY.robot @@ -17,9 +17,10 @@ Request access to all resources using no token ... receives a request without token ... ETSI GS MEC 009 1.1.1, clause 6.16.1 [Tags] GENERIC_TESTS INCLUDE_UNDEFINED_SCHEMAS - : FOR ${INDEX} IN RANGE 0 3 - \ @{list} Split String ${data[${INDEX}]} separator=| max_split=-1 - \ Perform a generic request using no token @{list} + FOR ${INDEX} IN RANGE 0 3 + @{list} Split String ${data[${INDEX}]} separator=| max_split=-1 + Perform a generic request using no token @{list} + END Request access to all resources using invalid token [Documentation] TP_MEC_MEX_ANY_001_WT @@ -27,11 +28,13 @@ Request access to all resources using invalid token ... receives a request with an invalid token ... ETSI GS MEC 009 1.1.1, clause 6.16.1 [Tags] GENERIC_TESTS INCLUDE_UNDEFINED_SCHEMAS - : FOR ${INDEX} IN RANGE 0 3 - \ @{list} Split String ${data[${INDEX}]} separator=| max_split=-1 - \ Perform a generic request using invalid token @{list} - + FOR ${INDEX} IN RANGE 0 3 + @{list} Split String ${data[${INDEX}]} separator=| max_split=-1 + Perform a generic request using invalid token @{list} + END + + *** Keywords *** Perform a generic request using no token [Arguments] @{params} -- GitLab From 3268aa67929967c6c096fb01c7e67dcba03cd29a Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 4 Jun 2024 10:23:48 +0200 Subject: [PATCH 86/94] Removed TCs belonging to an older version of MEC013 spec. --- .../PlatUeTrackingSubscription.robot | 102 --- MEC013/SRV/UETRACKSUB/README.md | 0 .../SRV/UETRACKSUB/environment/variables.txt | 18 - .../PeriodicNotificationSubscription.json | 12 - ...PeriodicNotificationSubscriptionError.json | 12 - .../NotificationSubscriptionList.schema.json | 715 ------------------ ...riodicNotificationSubscription.schema.json | 114 --- ...otificationSubscription.schema.v1.1.1.json | 99 --- 8 files changed, 1072 deletions(-) delete mode 100644 MEC013/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot delete mode 100644 MEC013/SRV/UETRACKSUB/README.md delete mode 100644 MEC013/SRV/UETRACKSUB/environment/variables.txt delete mode 100644 MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json delete mode 100644 MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json delete mode 100644 MEC013/SRV/UETRACKSUB/schemas/NotificationSubscriptionList.schema.json delete mode 100644 MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json delete mode 100644 MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json diff --git a/MEC013/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot b/MEC013/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot deleted file mode 100644 index 4d571c1..0000000 --- a/MEC013/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot +++ /dev/null @@ -1,102 +0,0 @@ -*** Settings *** - -Documentation -... A test suite for validating UE Tracking Subscribe (UETRACKSUB) operations. - -Resource ../../../GenericKeywords.robot -Resource ../../../pics.txt -Resource environment/variables.txt -Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false -Library OperatingSystem - -Default Tags TC_MEC_SRV_UETRACKSUB - - -*** Test Cases *** - -TC_MEC_MEC013_SRV_UETRACKSUB_001_OK - [Documentation] - ... Check that the IUT acknowledges the UE location change subscription request - ... when commanded by a MEC Application and notifies it when the UE changes location - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.8 - ... OpenAPI # TODO check this - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Create new subscription PeriodicNotificationSubscription - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is periodicNotificationSubscription - Check Result Contains ${response['body']['periodicNotificationSubscription']} clientCorrelator ${UE_PERIODIC_SUB_CLIENT_ID} - Check Result Contains ${response['body']['periodicNotificationSubscription']} callbackReference ${UE_PERIODIC_NOTIF_CALLBACK_URI} - Check Result Contains ${response['body']['periodicNotificationSubscription']} address ${UE_PERIODIC_IP_ADDRESS} - - # TODO how to send this? The TP has the IUT doing this immediately. Do we want this or will it be discarded as part of the test? - # // MEC 013, clause 7.3.8.3 - # the IUT entity sends a vPOST containing - # uri indicating value CALLBACK_URL - # body containing - # subscriptionNotification containing - # terminalLocation containing - # address set to IP_ADDRESS - # ; - # ; - # ; - # ; - - -TC_MEC_MEC013_SRV_UETRACKSUB_001_BR - [Documentation] - ... Check that the IUT responds with an error when - ... a request with incorrect parameters is sent by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.4 - ... OpenAPI # TODO check this - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Create new subscription PeriodicNotificationSubscriptionError - Check HTTP Response Status Code Is 400 - - -TC_MEC_MEC013_SRV_UETRACKSUB_002_OK - [Documentation] - ... Check that the IUT acknowledges the cancellation of UE tracking notifications - ... when commanded by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 204 - - -TC_MEC_MEC013_SRV_UETRACKSUB_002_NF - [Documentation] - ... Check that the IUT responds with an error when - ... a request for an unknown URI is sent by a MEC Application - ... - ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.6 - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove subscription ${NON_EXISTENT_SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 404 - - -*** Keywords *** -Create new subscription - [Arguments] ${content} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/periodic ${body} - ${output}= Output response - Set Suite Variable ${response} ${output} - -Remove subscription - [Arguments] ${subscriptionId} - Set Headers {"Accept":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/periodic/${subscriptionId} - ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC013/SRV/UETRACKSUB/README.md b/MEC013/SRV/UETRACKSUB/README.md deleted file mode 100644 index e69de29..0000000 diff --git a/MEC013/SRV/UETRACKSUB/environment/variables.txt b/MEC013/SRV/UETRACKSUB/environment/variables.txt deleted file mode 100644 index 22d520a..0000000 --- a/MEC013/SRV/UETRACKSUB/environment/variables.txt +++ /dev/null @@ -1,18 +0,0 @@ -*** Variables *** -# Generic variables -${SCHEMA} http -${HOST} 10.192.2.172 -${PORT} 8081 -${response} {} -${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${apiRoot} -${apiName} location -${apiVersion} v2 - -# Specific variables -${UE_PERIODIC_SUB_CLIENT_ID} 0123 -${UE_PERIODIC_NOTIF_CALLBACK_URI} {"callbackData": "0123","notifyURL": "http://clientApp.example.com/location_notifications/123456"} -${UE_PERIODIC_IP_ADDRESS} acr:10.0.0.1 - -${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID \ No newline at end of file diff --git a/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json b/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json deleted file mode 100644 index de016d4..0000000 --- a/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "periodicNotificationSubscription": { - "address": "acr:10.0.0.1", - "callbackReference": { - "callbackData": "0123", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "clientCorrelator": "0123", - "frequency": "10", - "requestedAccuracy": "10" - } -} \ No newline at end of file diff --git a/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json b/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json deleted file mode 100644 index e4340ae..0000000 --- a/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "periodicNotificationSubscription": { - "address": "acr:10.0.0.1", - "callbackReference": { - "callbackData": "0123", - "notifyURL": "http://clientApp.example.com/location_notifications/123456" - }, - "client": "0123", - "frequency": "10", - "requestedAccuracy": "10" - } -} \ No newline at end of file diff --git a/MEC013/SRV/UETRACKSUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UETRACKSUB/schemas/NotificationSubscriptionList.schema.json deleted file mode 100644 index 3a495cd..0000000 --- a/MEC013/SRV/UETRACKSUB/schemas/NotificationSubscriptionList.schema.json +++ /dev/null @@ -1,715 +0,0 @@ -{ - "type": "object", - "required": [ - "notificationSubscriptionList" - ], - "properties": { - "notificationSubscriptionList": { - "properties": { - "circleNotificationSubscription": { - "description": "Collection of CircleNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for notifications, when the area is defined as a circle.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "enteringLeavingCriteria": { - "enum": [ - "Entering", - "Leaving" - ], - "type": "string" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "latitude": { - "description": "Latitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "longitude": { - "description": "Longitude of center point.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "radius": { - "description": "Radius circle around center point in meters.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "address", - "latitude", - "longitude", - "radius", - "trackingAccuracy", - "enteringLeavingCriteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "CircleNotificationSubscription" - }, - "distanceNotificationSubscription": { - "description": "Collection of DistanceNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for distance subscription, with reference to other devices.", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "checkImmediate": { - "description": "Check location immediately after establishing notification.", - "type": "boolean", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "boolean" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "count": { - "description": "Maximum number of notifications per individual address. 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": "int" - }, - "criteria": { - "enum": [ - "AllWithinDistance", - "AnyWithinDistance", - "AllBeyondDistance", - "AnyBeyondDistance" - ], - "type": "string" - }, - "distance": { - "description": "Distance between devices that shall be monitored.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications per subscription (can also be considered minimum time between notifications).", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "monitoredAddress": { - "description": "Contains addresses of devices to monitor (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "referenceAddress": { - "description": "Indicates address of each device that will be used as reference devices from which the distances towards monitored devices indicated in the Addresses will be monitored (e.g., 'sip' URI, 'tel' URI, 'acr' URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "trackingAccuracy": { - "description": "Number of meters of acceptable error in tracking distance.", - "format": "float", - "type": "number", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "float" - } - }, - "required": [ - "callbackReference", - "monitoredAddress", - "distance", - "trackingAccuracy", - "criteria", - "checkImmediate", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "DistanceNotificationSubscription" - }, - "periodicNotificationSubscription": { - "description": "Collection of PeriodicNotificationSubscription elements, see note 2.", - "items": { - "description": "A type containing data for periodic subscription.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications (can also be considered minimum time between notifications) per subscription.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "requestedAccuracy": { - "description": "Accuracy of the provided distance in meters.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "callbackReference", - "address", - "requestedAccuracy", - "frequency" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "PeriodicNotificationSubscription" - }, - "resourceURL": { - "description": "Self-referring URL, see note 1.", - "format": "uri", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "AnyURI" - }, - "userTrackingSubscription": { - "description": "Collection of UserTrackingSubscription elements, see note 1.", - "items": { - "description": "A type containing user tracking subscription.", - "properties": { - "address": { - "description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI) to monitor", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to address specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - } - }, - "required": [ - "callbackReference", - "address" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "UserTrackingSubscription" - }, - "zonalTrafficSubscription": { - "description": "Collection of ZonalTrafficSubscription elements, see note 1.", - "items": { - "description": "A type containing zonal traffic subscription", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period (in seconds) of time notifications are provided for. If set to \"0\" (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications. This element MAY be given by the client during resource creation in order to signal the desired lifetime of the subscription. The server MUST return in this element the period of time for which the subscription will still be valid.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "interestRealm": { - "description": "Interest realm of access point (e.g. geographical area, a type of industry etc.).", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "string" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "userEventCriteria": { - "description": "List of user event values to generate notifications for (these apply to zone identifier or all interest realms within zone identifier specified). If this element is missing, a notification is requested to be generated for any change in user event.", - "items": { - "enum": [ - "Entering", - "Leaving", - "Transferring" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "UserEventType" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZonalTrafficSubscription" - }, - "zoneStatusSubscription": { - "description": "Collection of ZoneStatusSubscription elements, see note 1.", - "items": { - "description": "A type containing zone status subscription.", - "properties": { - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "numberOfUsersAPThreshold": { - "description": "Threshold number of users in an access point which if crossed shall cause a notification", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "unsignedInt" - }, - "numberOfUsersZoneThreshold": { - "description": "Threshold number of users in a zone which if crossed 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).", - "items": { - "enum": [ - "Serviceable", - "Unserviceable", - "Unknown" - ], - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "OperationStatus" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "zoneId": { - "description": "Identifier of zone", - "type": "string", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "string" - } - }, - "required": [ - "callbackReference", - "zoneId" - ], - "type": "object" - }, - "minItems": 0, - "type": "array", - "x-etsi-mec-cardinality": "0.. N", - "x-etsi-mec-origin-type": "ZoneStatusSubscription" - } - }, - "required": [ - "resourceURL" - ], - "type": "object", - "x-etsi-notes": "NOTE 1:\tAs specified in [5], clause 5.2.2.8.\nNOTE 2: \tAs specified in [6], clause 5.2.2.7.", - "x-etsi-ref": "6.3.3" - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json b/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json deleted file mode 100644 index 5161e70..0000000 --- a/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json +++ /dev/null @@ -1,114 +0,0 @@ -{ - "type": "object", - "properties": { - "periodicNotificationSubscription": { - "description": "A type containing data for periodic subscription.", - "properties": { - "address": { - "description": "Address of terminals to monitor (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "items": { - "type": "string" - }, - "type": "array", - "x-etsi-mec-cardinality": "1..N", - "x-etsi-mec-origin-type": "anyURI" - }, - "callbackReference": { - "properties": { - "callbackData": { - "description": "Data the application can register with the server when subscribing to notifications, and that are passed back unchanged in each of the related notifications. These data can be used by the application in the processing of the notification, e.g. for correlation purposes.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "notificationFormat": { - "enum": [ - "XML", - "JSON" - ], - "type": "string" - }, - "notifyURL": { - "description": "Notify Callback URL", - "type": "string", - "x-etsi-mec-cardinality": "1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "notifyURL" - ], - "type": "object" - }, - "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.", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "string" - }, - "duration": { - "description": "Period of time (in seconds) notifications are provided for. If set to 0 (zero), a default duration time, which is specified by the service policy, will be used. If the parameter is omitted, the notifications will continue until the maximum duration time, which is specified by the service policy, unless the notifications are stopped by deletion of subscription for notifications.", - "type": "integer", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "int" - }, - "frequency": { - "description": "Maximum frequency (in seconds) of notifications (can also be considered minimum time between notifications) per subscription.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "link": { - "description": "Link to other resources that are in relationship with the resource.", - "items": { - "description": "Link to other resources", - "properties": { - "href": { - "description": "URI", - "format": "anyURI", - "type": "string" - }, - "rel": { - "description": "Describes the relationship between the URI and the resource.", - "type": "string" - } - }, - "required": [ - "rel", - "href" - ], - "type": "object" - }, - "type": "array", - "x-etsi-mec-cardinality": "0..N", - "x-etsi-mec-origin-type": "Link" - }, - "requestedAccuracy": { - "description": "Accuracy of the provided distance in meters.", - "type": "integer", - "x-etsi-mec-cardinality": 1, - "x-etsi-mec-origin-type": "int" - }, - "requester": { - "description": "Identifies the entity that is requesting the information (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI)", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - }, - "resourceURL": { - "description": "Self referring URL", - "type": "string", - "x-etsi-mec-cardinality": "0..1", - "x-etsi-mec-origin-type": "anyURI" - } - }, - "required": [ - "callbackReference", - "address", - "requestedAccuracy", - "frequency" - ], - "type": "object" - } - } -} \ No newline at end of file diff --git a/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json b/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json deleted file mode 100644 index 4a1d50e..0000000 --- a/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "definitions": {}, - "$schema": "http://json-schema.org/draft-07/schema#", - "$id": "https://example.com/object1575044234.json", - "title": "Root", - "type": "object", - "required": [ - "periodicNotificationSubscription" - ], - "properties": { - "periodicNotificationSubscription": { - "$id": "#root/periodicNotificationSubscription", - "title": "Periodicnotificationsubscription", - "type": "object", - "required": [ - "address", - "callbackReference", - "clientCorrelator", - "frequency", - "requestedAccuracy" - ], - "properties": { - "address": { - "$id": "#root/periodicNotificationSubscription/address", - "title": "Address", - "type": "string", - "default": "", - "examples": [ - "acr:10.0.0.1" - ], - "pattern": "^.*$" - }, - "callbackReference": { - "$id": "#root/periodicNotificationSubscription/callbackReference", - "title": "Callbackreference", - "type": "object", - "required": [ - "callbackData", - "notifyURL" - ], - "properties": { - "callbackData": { - "$id": "#root/periodicNotificationSubscription/callbackReference/callbackData", - "title": "Callbackdata", - "type": "string", - "default": "", - "examples": [ - "0123" - ], - "pattern": "^.*$" - }, - "notifyURL": { - "$id": "#root/periodicNotificationSubscription/callbackReference/notifyURL", - "title": "Notifyurl", - "type": "string", - "default": "", - "examples": [ - "http://clientApp.example.com/location_notifications/123456" - ], - "pattern": "^.*$" - } - } - } -, - "clientCorrelator": { - "$id": "#root/periodicNotificationSubscription/clientCorrelator", - "title": "Clientcorrelator", - "type": "string", - "default": "", - "examples": [ - "0123" - ], - "pattern": "^.*$" - }, - "frequency": { - "$id": "#root/periodicNotificationSubscription/frequency", - "title": "Frequency", - "type": "string", - "default": "", - "examples": [ - "10" - ], - "pattern": "^.*$" - }, - "requestedAccuracy": { - "$id": "#root/periodicNotificationSubscription/requestedAccuracy", - "title": "Requestedaccuracy", - "type": "string", - "default": "", - "examples": [ - "10" - ], - "pattern": "^.*$" - } - } - } - - } -} -- GitLab From 4c976b03a1b8d91f821c2f384babbc3fe3f07af4 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Tue, 4 Jun 2024 10:26:15 +0200 Subject: [PATCH 87/94] Fix on Robot syntax --- GenericKeywords.robot | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/GenericKeywords.robot b/GenericKeywords.robot index 9a14519..0a4a122 100644 --- a/GenericKeywords.robot +++ b/GenericKeywords.robot @@ -24,9 +24,10 @@ Check HTTP Response Body Json Schema Is Should Be Present In Json List [Arguments] ${expr} ${json_field} ${json_value} Log Check if ${json_field} is present in ${expr} with the value ${json_value} - :FOR ${item} IN @{expr} - \ ${are_equal}= Should Be Equal As Strings ${item["${json_field}"]} ${json_value} - \ Exit For Loop If ${are_equal} + FOR ${item} IN @{expr} + ${are_equal}= Should Be Equal As Strings ${item["${json_field}"]} ${json_value} + Exit For Loop If ${are_equal} + END Log Item found ${item} [return] ${item} -- GitLab From d589d74ce12078d8111c36f22be4934484106674 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Wed, 5 Jun 2024 18:03:21 +0200 Subject: [PATCH 88/94] Fixes on Platform configuration TCs of MEC010p2 --- MEC010p2/MEPM/LCM/PlatformConfiguration.robot | 10 +++++----- .../json/ConfigPlatformForAppRequestBadRequest.json | 5 ----- .../{json => jsons}/ConfigPlatformForAppRequest.json | 0 .../jsons/ConfigPlatformForAppRequestBadRequest.json | 3 +++ .../LCM/{json => jsons}/CreateAppInstanceRequest.json | 0 5 files changed, 8 insertions(+), 10 deletions(-) delete mode 100644 MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequestBadRequest.json rename MEC010p2/MEPM/LCM/{json => jsons}/ConfigPlatformForAppRequest.json (100%) create mode 100644 MEC010p2/MEPM/LCM/jsons/ConfigPlatformForAppRequestBadRequest.json rename MEC010p2/MEPM/LCM/{json => jsons}/CreateAppInstanceRequest.json (100%) diff --git a/MEC010p2/MEPM/LCM/PlatformConfiguration.robot b/MEC010p2/MEPM/LCM/PlatformConfiguration.robot index 792fa26..1606af0 100644 --- a/MEC010p2/MEPM/LCM/PlatformConfiguration.robot +++ b/MEC010p2/MEPM/LCM/PlatformConfiguration.robot @@ -14,20 +14,20 @@ TC_MEC_MEC010p2_MEPM_LCM_001_OK [Documentation] TP_MEC_MEC010p2_MEPM_LCM_001_OK ... Check that MEC API provider has created the configuration information in AppD to the MEPM-V ... ETSI GS MEC 010-2 3.1.1, clause 7.7.6.3.1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.21.2 #ConfigPlatformForAppRequest [Setup] Create new App Instance CreateAppInstanceRequest ${APPD_ID_SET} Get value entry from JSON file CreateAppInstanceRequest appDId Request to configure Platform ${APP_INSTANCE_ID} ConfigPlatformForAppRequest Check HTTP Response Status Code Is 202 - Check Response Header contains Location - [Setup] Delete APP Instance ${APPD_ID_SET} + Check HTTP Response Header Contains Location + [Teardown] Delete APP Instance ${APPD_ID_SET} TC_MEC_MEC010p2_MEPM_LCM_001_BR [Documentation] TP_MEC_MEC010p2_MEPM_LCM_001_BR ... Check that MEC API provider sends an error when it receives a malformed request for the configuration information in AppD to the MEPM-V ... ETSI GS MEC 010-2 3.1.1, clause 7.7.6.3.1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.21.2-1 #ConfigPlatformForAppRequest + ... ETSI GS MEC 010-2 3.1.1, Table 6.2.2.21.2 #ConfigPlatformForAppRequest Request to configure Platform ${APP_INSTANCE_ID} ConfigPlatformForAppRequestBadRequest Check HTTP Response Status Code Is 400 @@ -71,7 +71,7 @@ Delete APP Instance Request to configure Platform - [Argument] ${appInstanceId} ${content} + [Arguments] ${appInstanceId} ${content} Log Request to configure platform Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} diff --git a/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequestBadRequest.json b/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequestBadRequest.json deleted file mode 100644 index 79d5829..0000000 --- a/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequestBadRequest.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "appServiceWrongRequired": [{ - "sernName": "serviceName" - }] -} \ No newline at end of file diff --git a/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequest.json b/MEC010p2/MEPM/LCM/jsons/ConfigPlatformForAppRequest.json similarity index 100% rename from MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequest.json rename to MEC010p2/MEPM/LCM/jsons/ConfigPlatformForAppRequest.json diff --git a/MEC010p2/MEPM/LCM/jsons/ConfigPlatformForAppRequestBadRequest.json b/MEC010p2/MEPM/LCM/jsons/ConfigPlatformForAppRequestBadRequest.json new file mode 100644 index 0000000..1dfe5b2 --- /dev/null +++ b/MEC010p2/MEPM/LCM/jsons/ConfigPlatformForAppRequestBadRequest.json @@ -0,0 +1,3 @@ +{ + "appServiceWrongRequired":"someValue" +} \ No newline at end of file diff --git a/MEC010p2/MEPM/LCM/json/CreateAppInstanceRequest.json b/MEC010p2/MEPM/LCM/jsons/CreateAppInstanceRequest.json similarity index 100% rename from MEC010p2/MEPM/LCM/json/CreateAppInstanceRequest.json rename to MEC010p2/MEPM/LCM/jsons/CreateAppInstanceRequest.json -- GitLab From 4169aa89c8050159b8604bc197bc7c1a78de1ae3 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Thu, 6 Jun 2024 13:54:57 +0200 Subject: [PATCH 89/94] Minor changes --- MEC010p2/MEX/LCM/AppInstanceMgmt.robot | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/MEC010p2/MEX/LCM/AppInstanceMgmt.robot b/MEC010p2/MEX/LCM/AppInstanceMgmt.robot index 2b7f527..302f017 100644 --- a/MEC010p2/MEX/LCM/AppInstanceMgmt.robot +++ b/MEC010p2/MEX/LCM/AppInstanceMgmt.robot @@ -48,7 +48,6 @@ TC_MEC_MEC010p2_MEX_LCM_002_OK Check HTTP Response Status Code Is 200 FOR ${appInstance} IN @{response['body']} - ##TODO validate against the new schema Validate Json AppInstanceInfo.schema.json ${appInstance} ${passed} Run Keyword And Return Status Should Be Equal As Strings ${appInstance}[id] ${NEW_APP_INSTANCE_ID} Exit For Loop If ${passed} @@ -68,9 +67,7 @@ TC_MEC_MEC010p2_MEX_LCM_003_OK Set Test Variable ${NEW_APP_INSTANCE_ID} ${response['body']['id']} GET APP Instance ${NEW_APP_INSTANCE_ID} Check HTTP Response Status Code Is 200 - ##TODO validate against the new schema Check HTTP Response Body Json Schema Is AppInstanceInfo - Log ${response['body']} Should Be Equal As Strings ${response['body']['id']} ${NEW_APP_INSTANCE_ID} [TearDown] Delete APP Instance ${NEW_APP_INSTANCE_ID} @@ -141,7 +138,7 @@ TC_MEC_MEC010p2_MEX_LCM_006_OK ... ETSI GS MEC 010-2 3.1.1, clause 7.4.7.3.1 ... ETSI GS MEC 010-2 3.1.1, table 6.2.2.9.2-1 #TerminateAppRequest [Setup] Create and Instantiate App Instance CreateAppInstanceRequest InstantiateAppRequest - ##TODO sleep for a while because the instantiation is not immediate + Sleep 5 ##Change it according to your need Terminate App Request ${APP_ID} TerminateAppRequest Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location @@ -439,7 +436,6 @@ Create new App Instance GET all APP Instances - Log Get all App Instances Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} -- GitLab From a218dcec4b69ae80fe791d3d7010473376b9f3b8 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 7 Jun 2024 16:39:39 +0200 Subject: [PATCH 90/94] Updated MEC010p2 v3.1.1 TCs on PKG Mgmt. --- MEC010p2/MEPM/PKGM/AppPkgMgt.robot | 596 ++++++++++------------------- 1 file changed, 198 insertions(+), 398 deletions(-) diff --git a/MEC010p2/MEPM/PKGM/AppPkgMgt.robot b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot index c13a5a1..2da898f 100644 --- a/MEC010p2/MEPM/PKGM/AppPkgMgt.robot +++ b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot @@ -1,500 +1,300 @@ -''[Documentation] robot --outputdir ./outputs ./AppPkgMgt.robot -... Test Suite to validate Package Management (PKGM) operations. +''[Documentation] robot --outputdir ../../outputs ./AppPkgMgt.robot +... Test Suite to validate MEPM Package Management (PKGM) operations. *** Settings *** -Resource environment/variables.txt -Resource ../../../GenericKeywords.robot -Library REST ${MEPM_SCHEMA}://${MEPM_HOST}:${MEPM_PORT} ssl_verify=false -Library BuiltIn -Library OperatingSystem -#Library MockServerLibrary +Resource environment/variables.txt +Resource ../../../GenericKeywords.robot +Library REST ${MEPM_SCHEMA}://${MEPM_HOST}:${MEPM_PORT} ssl_verify=false +Library BuiltIn +Library OperatingSystem +Resource ../../../pics.txt *** Test Cases *** TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_01_OK - ... Check that MEPM returns the list of App Packages when requested - Note 3 - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_01_OK + ... Check that MEO creates a new App Package when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.2.2 ##AppPkgInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Post APP Package CreateAppPackage.json - Set Variable ${APP_PKG_ID} ${response['body']['id']} - GET all APP Packages + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + GET all app Packages Check HTTP Response Status Code Is 200 - - FOR ${appPkg} IN @{response['body']} - Validate Json AppPkgInfo.schema.json ${appPkg} - Should Be Equal As Strings ${appPkg['onboardingState']} ${ONBOARDING_STATE} - + FOR ${onBoardedAppPkgInfo} IN @{response['body']} + Validate Json AppPkgInfo.schema.json ${onBoardedAppPkgInfo} + Should Be Equal As Strings ${onBoardedAppPkgInfo['onboardingState']} ${ONBOARDING_STATE} END - [TearDown] Delete APP Package ${APP_PKG_ID} - + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} -TC_MEC_MEC010p2_MEPM_PKGM_001_02_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_02_OK - ... Check that MEPM returns the list of on boarded app Packages when requested - Note 3 - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 +TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_01_OK + ... Check that MEPM returns the list of on-boarded App Packages when requested - Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.2.2 ##AppPkgInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Post APP Package CreateAppPackage.json - Set Variable ${APP_PKG_ID} ${response['body']['id']} - GET all onboarded APP Packages + [Setup] Create new App Package CreateAppPackage.json + + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${APPD_ID} ${response['body']['appDId']} + GET all app Packages Check HTTP Response Status Code Is 200 - FOR ${appPkg} IN @{response['body']} - Validate Json AppPkgInfo.schema.json ${appPkg} + FOR ${onBoardedAppPkgInfo} IN @{response['body']} + Validate Json AppPkgInfo.schema.json ${onBoardedAppPkgInfo} + Should Contain ${onBoardedAppPkgInfo['_links']['self']['href']} ${APP_PKG_ID} + Should Contain ${onBoardedAppPkgInfo['_links']['appD']['href']} ${APPD_ID} + Should Contain ${onBoardedAppPkgInfo['_links']['appPkgContent']['href']} ${APPD_ID} + Should Be Equal As Strings ${onBoardedAppPkgInfo['onboardingState']} ${ONBOARDING_STATE} END - [TearDown] Delete APP Package ${APP_PKG_ID} - + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + TC_MEC_MEC010p2_MEPM_PKGM_001_BR - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_BR - ... Check that MEPM responds with an error when it receives - ... a malformed request for requesting the list of existing App Packages - ... ETSI GS MEC 010-2 3.1.1, clause 7.4.1.3.2 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_001_BR + ... Check that MEPM responds with an error when it receives + ... a malformed request for requesting the list of existing App Packages + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - GET all APP Packages with filters ${MALFORMED_FILTER_NAME} ${FILTER_VALUE} - Check HTTP Response Status Code Is 400 - + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${APPD_ID} ${response['body']['appDId']} + GET all app Packages with filter operationalStatus ENABLED + Check HTTP Response Status Code Is 400 + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + + TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_01_OK - ... Check that MEPM returns the an App Package when requested - Note 3 - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_01_OK + ... Check that MEPM returns the an App Package when requested - Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.3.2 ##AppPkgInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Post APP Package CreateAppPackage.json - Set Test Variable ${APP_PKG_CREATED_ID} ${response['body']['id']} - GET an APP Package identified by ${APP_PKG_CREATED_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppPkgInfo - Should Be Equal As Strings ${response['body']['id']} ${APP_PKG_ID} - [TearDown] Delete APP Package ${APP_PKG_CREATED_ID} - + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${APPD_ID} ${response['body']['appDId']} + Get an individual APP Package identified by ID ${APP_PKG_ID} + Check HTTP Response Status Code Is 200 + Validate Json AppPkgInfo.schema.json ${response['body']} + Should Contain ${response['body']['_links']['self']['href']} ${APP_PKG_ID} + Should Contain ${response['body']['_links']['appD']['href']} ${APPD_ID} + Should Contain ${response['body']['_links']['appPkgContent']['href']} ${APPD_ID} + Should Be Equal As Strings ${response['body']['onboardingState']} ${ONBOARDING_STATE} + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + TC_MEC_MEC010p2_MEPM_PKGM_002_02_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_02_OK - ... Check that MEPM returns the an App Package when requested - Note 3 - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_02_OK + ... Check that MEPM returns the an App Package when requested - Note 3 + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.3.2 ##AppPkgInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Post APP Package CreateAppPackage.json - Set Test Variable ${APP_PKG_CREATED_ID} ${response['body']['id']} - GET an onboarded APP Package identified by ${APP_PKG_CREATED_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppPkgInfo - Should Be Equal As Strings ${response['body']['id']} ${APP_PKG_ID} - [TearDown] Delete APP Package ${APP_PKG_CREATED_ID} - + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${APPD_ID} ${response['body']['appDId']} + Get an individual APP Package identified by ID ${APPD_ID} + Check HTTP Response Status Code Is 200 + Validate Json AppPkgInfo.schema.json ${response['body']} + Should Contain ${response['body']['_links']['self']['href']} ${APP_PKG_ID} + Should Contain ${response['body']['_links']['appD']['href']} ${APPD_ID} + Should Contain ${response['body']['_links']['appPkgContent']['href']} ${APPD_ID} + Should Be Equal As Strings ${response['body']['onboardingState']} ${ONBOARDING_STATE} + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + TC_MEC_MEC010p2_MEPM_PKGM_002_NF - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_NF - ... Check that MEPM responds with an error when it receives - ... a request for returning a App Package referred with a wrong ID - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 - ... ETSI GS MEC 010-2 3.1.1, Table 6.2.3.3.2-1 Note 3 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_NF + ... Check that MEPM responds with an error when it receives + ... a request for returning a App Package referred with a wrong ID + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.2.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [TearDown] Delete APP Package ${NON_EXISTENT_APP_PKG_ID} - GET an APP Package identified by ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - + [Setup] Delete an individual APP Package identified by ID ${NON_EXISTENT_APP_PKG_ID} + Get an individual APP Package identified by ID ${NON_EXISTENT_APP_PKG_ID} + Check HTTP Response Status Code Is 404 + + TC_MEC_MEC010p2_MEPM_PKGM_003_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_003_OK - ... Check that MEPM service returns an application package subscription when requested - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1", - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_003_OK + ... Check that MEPM service returns an application package subscription when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7.2 ##AppPkgSubscription + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4.2 ##AppPkgSubscriptionInfo [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Send a request for a subscription AppPkgSubscription - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo - Should Be Equal As Strings ${response}[body][subscriptionType] AppPackageOnBoardingSubscription - Should Be Equal As Strings ${response}[body][callbackUri] ${CALLBACK_URI} - [TearDown] Delete an App Package Subscription identified by ${response}[body][id] - - + Create a subscription AppPkgSubscription.json + Set Suite Variable ${SUBSCRIPTION_ID} ${response['body']['id']} + Check HTTP Response Status Code Is 201 + Validate Json AppPkgSubscriptionInfo.schema.json ${response['body']} + [TearDown] Delete a subscription ${SUBSCRIPTION_ID} + TC_MEC_MEC010p2_MEPM_PKGM_003_BR - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_003_BR - ... Check that MEPM service sends an error when it receives a - ... malformed request for creating a new subscription on AppPackages - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_003_BR + ... Check that MEPM service sends an error when it receives a + ... malformed request for creating a new subscription on AppPackages + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.1 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Send a request for a subscription AppPkgSubscriptionBadRequest + Create a subscription AppPkgSubscriptionBadRequest.json Check HTTP Response Status Code Is 400 - TC_MEC_MEC010p2_MEPM_PKGM_004_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_OK - ... Check that MEPM service returns the list of Application Package Subscriptions when requested - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.2 - ... ETSI GS MEC 010-2 3.1.1, clause 6.3.5.2 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_004_OK + ... Check that MEPM service returns the list of Application + ... Package Subscriptions when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.3.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Send a request for a subscription AppPkgSubscription - Set Test Variable ${SUB_ID} ${response}[body][id] - Get all APP Package subscriptions + [Setup] Create a subscription AppPkgSubscription.json + Set Suite Variable ${SUBSCRIPTION_ID} ${response['body']['id']} + Get all subscriptions Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList - [TearDown] Delete an App Package Subscription identified by ${SUB_ID} - + Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList + [TearDown] Delete a subscription ${SUBSCRIPTION_ID} + + TC_MEC_MEC010p2_MEPM_PKGM_005_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_005_OK - ... Check that MEPM service returns an Application Package Subscription when requested - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_005_OK + ... Check that MEPM service returns an Application Package Subscription when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Send a request for a subscription AppPkgSubscription - Set Test Variable ${SUB_ID} ${response['body']['id']} - Get an individual APP Package subscriptions ${SUB_ID} - Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo + [Setup] Create a subscription AppPkgSubscription.json + Set Suite Variable ${SUBSCRIPTION_ID} ${response['body']['id']} + Get an individual subscription ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 200 - Should Be Equal As Strings ${response}[body][id] ${SUB_ID} - Should Contain ${response}[body][_links][self][href] /app_pkgm/v1/subscriptions/${SUB_ID} - [TearDown] Delete an App Package Subscription identified by ${SUB_ID} - + Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo + [TearDown] Delete a subscription ${SUBSCRIPTION_ID} + TC_MEC_MEC010p2_MEPM_PKGM_005_NF - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_005_NF - ... Check that MEPM service sends an error when it receives a query for a subscription on AppPackages - ... with a wrong identifier - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_005_NF + ... C"Check that MEPM service sends an error when + ... it receives a query for a subscription on AppPackages with a wrong identifier + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.2 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} - Get an individual APP Package subscriptions ${NON_EXISTENT_SUBSCRIPTION_ID} + [Setup] Delete a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Get an individual subscription ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 - + TC_MEC_MEC010p2_MEPM_PKGM_006_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_OK - ... Check that MEPM service deletes an Application Package Subscription when requested - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Send a request for a subscription AppPkgSubscription - Set Test Variable ${SUB_ID} ${response['body']['id']} - Delete an App Package Subscription identified by ${SUB_ID} - Check HTTP Response Status Code Is 204 - -TC_MEC_MEC010p2_MEPM_PKGM_006_NF - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_NF - ... Check that MEPM service sends an error when it receives a deletion request for a subscription on AppPackages - ... with a wrong identifier - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.4 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.7 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} - Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 404 - -##### TP_MEC_MEC010p2_MEPM_PKGM_007_OK TODO - - -TC_MEC_MEC010p2_MEPM_PKGM_008_NA - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_008_NA - ... Check that MEPM responds with an error when it receives - ... a POST request referring an application descriptor AppD - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Post AppD by ${APPD_ID} - Check HTTP Response Status Code Is 405 - -TC_MEC_MEC010p2_MEPM_PKGM_009_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_009_OK - ... Check that MEPM returns the Application Descriptor contained on a on-boarded Application Package when requested - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2 - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Post APP Package CreateAppPackage.json - Set Test Variable ${APP_PKG_ID} ${response['body']['id']} - Set Test Variable ${CREATED_APPD_ID} ${response['body']['appDId']} - Get AppD by ${CREATED_APPD_ID} - Check HTTP Response Status Code Is 200 - [TearDown] Delete APP Package ${APP_PKG_ID} - -TC_MEC_MEC010p2_MEPM_PKGM_009_NF - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_009_NF - ... Check that MEPM responds with an error when it receives - ... a request for returning a App Descriptor referred with a wrong App Package ID - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2", - ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Delete APP Package ${NON_EXISTENT_APP_PKG_ID} - Get AppD by ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - - -TC_MEC_MEC010p2_MEPM_PKGM_010_FO - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_010_FO - ... Check that MEPM responds with an error when it receives - ... a PUT request referring an application descriptor AppD - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.3 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Put on AppD endpoint ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 403 - -TC_MEC_MEC010p2_MEPM_PKGM_011_NA - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_011_NA - ... Check that MEPM responds with an error when it receives - ... a DELETE request referring an application descriptor AppD - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete on AppD endpoint ${APP_PKG_ID} - Check HTTP Response Status Code Is 405 - - -TC_MEC_MEC010p2_MEPM_PKGM_012_01_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_01_OK - ... Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_OK + ... Check that MEPM service deletes an Application Package Subscription when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Post APP Package CreateAppPackage.json - Set Test Variable ${APP_PKG_ID} ${response['body']['id']} - Set Test Variable ${CREATED_APPD_ID} ${response['body']['appDId']} - Get application package by AppId ${CREATED_APPD_ID} - Check HTTP Response Status Code Is 200 - [TearDown] Delete APP Package ${APP_PKG_ID} + [Setup] Create a subscription AppPkgSubscription.json + Set Suite Variable ${SUBSCRIPTION_ID} ${response['body']['id']} + Delete a subscription ${SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 204 - -TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_02_OK - ... Check that MEPM fetches the on-boarded application package content identified by appDId when requested - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 +TC_MEC_MEC010p2_MEPM_PKGM_006_OK + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_NF + ... Check that MEPM service sends an error + ... when it receives a deletion request for a subscription on AppPackages + ... with a wrong identifier + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.4.3.4 [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - [Setup] Post APP Package CreateAppPackage.json - Set Test Variable ${APP_PKG_ID} ${response['body']['id']} - Set Test Variable ${CREATED_APPD_ID} ${response['body']['appDId']} - - Get onboarded application package by AppdId ${CREATED_APPD_ID} - Check HTTP Response Status Code Is 200 - [TearDown] Delete APP Package ${APP_PKG_ID} + [Setup] Delete a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Delete a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + - -TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_01_NF - ... Check that MEPM returns an error when performing - ... a request for returning a App Descriptor referred with a wrong App Package ID - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get application package by AppId ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - -TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF - [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_02_NF - ... Check that MEPM returns an error when performing - ... a request for returning an onboarded App Descriptor referred with a wrong App Package ID - ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get onboarded application package by AppdId ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - *** Keywords *** -Post APP Package +Create new App Package [Arguments] ${content} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} + Set Headers {"Accept":"*/*"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Post ${apiRoot}/${apiName}/${apiVersion}/app_packages ${path} Catenate SEPARATOR= jsons/ ${content} ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/app_packages ${body} allow_redirects=false ${output}= Output response - Set Suite Variable ${response} ${output} - + Set Suite Variable ${response} ${output} + -Delete APP Package - [Arguments] ${app_pkg_id} +GET all app Packages Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/app_packages/${app_pkg_id} + Get ${apiRoot}/${apiName}/${apiVersion}/app_packages ${output}= Output response Set Suite Variable ${response} ${output} - -GET all APP Packages - Log Getting all App Packages - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages - ${output}= Output response - Set Suite Variable ${response} ${output} - -GET all onboarded APP Packages - Log Getting all App Packages - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages - ${output}= Output response - Set Suite Variable ${response} ${output} - -GET all APP Packages with filters + +GET all app Packages with filter [Arguments] ${key} ${value} Log Getting all App Packages using filtering parameters Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Get ${apiRoot}/${apiName}/${apiVersion}/app_packages?${key}=${value} ${output}= Output response Set Suite Variable ${response} ${output} - + -GET an APP Package identified by - [Arguments] ${value} - Log Getting an App Package +Get an individual APP Package identified by ID + [Arguments] ${identifier} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${value} - ${output}= Output response - Set Suite Variable ${response} ${output} - -GET an onboarded APP Package identified by - [Arguments] ${value} - Log Getting an App Package - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${value} - ${output}= Output response - Set Suite Variable ${response} ${output} - -Get AppD by - [Arguments] ${appdId} - Log Getting App Descriptor by its identifier - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appdId}/appd - ${output}= Output response - Set Suite Variable ${response} ${output} - -Get AppD from onboarded app packages by - [Arguments] ${appdId} - Log Getting App Descriptor by its identigier - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${appdId}/appd + Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${identifier} ${output}= Output response Set Suite Variable ${response} ${output} -Post AppD by - [Arguments] ${appdId} - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Authorization":"${TOKEN}"} - Post ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appdId}/appd - ${output}= Output response - Set Suite Variable ${response} ${output} - -Post AppD from onboarded app packages by - [Arguments] ${appdId} - Log Getting App Descriptor by its identifier - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Authorization":"${TOKEN}"} - Post ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${appdId}/appd - ${output}= Output response - Set Suite Variable ${response} ${output} - - - -Put on AppD endpoint - [Arguments] ${appdId} - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Authorization":"${TOKEN}"} - Put ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${appdId}/appd - ${output}= Output response - Set Suite Variable ${response} ${output} - -Delete on AppD endpoint - [Arguments] ${appdId} - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${appdId}/appd - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Get application package by AppId - [Arguments] ${appPkgId} - Log Getting App descriptor for App Package - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId}/package_content - ${output}= Output response - Set Suite Variable ${response} ${output} - -Get onboarded application package by AppdId - [Arguments] ${appdId} - Log Getting App descriptor for App Package - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Content-Type":"*/*"} +Create a subscription + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${appdId}/package_content + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} ${output}= Output response Set Suite Variable ${response} ${output} - - -Get an AppD from App Package identified by - [Arguments] ${appPkgId} - Log Getting App descriptor for App Package - Set Headers {"Accept":"application/zip"} - Set Headers {"Content-Type":"*/*"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId}/app_descriptor - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Send a request for a subscription - [Arguments] ${content} - Log Creating a new subscription + + +Delete a subscription + [Arguments] ${id} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${id} ${output}= Output response - Set Suite Variable ${response} ${output} + Set Suite Variable ${response} ${output} + -Get all APP Package subscriptions - Log Getting list of subscriptions +Get all subscriptions Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"*/*"} + Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${output}= Output response - Set Suite Variable ${response} ${output} + Set Suite Variable ${response} ${output} -Get an individual APP Package subscriptions - [Arguments] ${subId} - Log Getting an individual subscription + +Get an individual subscription + [Arguments] ${id} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${id} ${output}= Output response Set Suite Variable ${response} ${output} -Delete an App Package Subscription identified by - [Arguments] ${subId} - Log Deleting a subscription +Delete an individual APP Package identified by ID + [Arguments] ${identifier} Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_packages/${identifier} ${output}= Output response Set Suite Variable ${response} ${output} + + +Spawn Notification Server + [Arguments] ${host} ${port} ${timeout} ${method} ${endpoint} ${notification_content} ${autosent_notification} + ${file}= Catenate SEPARATOR= jsons/ ${notification_content} .json + ${body}= Get File ${file} + #Spawn Web Server ${host} ${port} ${timeout} ${method} ${endpoint} ${body} ${autosent_notification} + -- GitLab From ad0d14cee5e601807564c1e34eda038bb0b86cc3 Mon Sep 17 00:00:00 2001 From: Gabriele Scivoletto <g.scivoletto@nextworks.it> Date: Tue, 11 Jun 2024 12:34:14 +0200 Subject: [PATCH 91/94] added possibility to run tests in Docker container, along with Readme --- docker/Dockerfile | 21 +++++++++ docker/Readme.md | 47 +++++++++++++++++++ docker/build_img.sh | 6 +++ docker/run_tests.sh | 31 +++++++++++++ libraries/Server.py | 107 ++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 212 insertions(+) create mode 100644 docker/Dockerfile create mode 100755 docker/Readme.md create mode 100755 docker/build_img.sh create mode 100755 docker/run_tests.sh create mode 100755 libraries/Server.py diff --git a/docker/Dockerfile b/docker/Dockerfile new file mode 100644 index 0000000..905e813 --- /dev/null +++ b/docker/Dockerfile @@ -0,0 +1,21 @@ +##Docker file containing the environment for running robot3.1 based on python3.9 +## As example, MEC016 test suite are used +##How to run this container. + +## Build the image using this docker file, make sure the server side is up and running and eventually run the tests. + +FROM python:3.10-slim + +RUN addgroup robot && adduser -D -G robot -h /home/robot robot +WORKDIR /home/robot + +# Install system packages +RUN apt-get update && apt-get install -y \ + build-essential \ + libssl-dev \ + libffi-dev + +COPY requirements.txt . +RUN pip install -r requirements.txt + +COPY libraries libraries diff --git a/docker/Readme.md b/docker/Readme.md new file mode 100755 index 0000000..8b01320 --- /dev/null +++ b/docker/Readme.md @@ -0,0 +1,47 @@ +# Guide to Run Robot Tests in a Docker Container + +This guide provides instructions on how to build a Docker image and run Robot Framework tests in a Docker container. + +## Prerequisites + +- Docker must be installed and running on your system. + +## Steps + +### 1. Build the Docker Image + +To build the Docker image, navigate to the root directory of your project and run the following script: + +```sh +$ ./docker/build_img.sh +``` + +### 2. Run the Test + +To execute a Robot Framework test, use the following script and specify the path to the test file relative to the root directory: + +```sh +$ ./docker/run_test.sh <robot_test_file_from_root> +``` + +### Example + +Here is an example of how to run a specific test file: + +```sh +$ ./docker/run_test.sh MEC029/SRV/FAIS/PlatFixedAcessInfo.robot +``` + +## Notes + +- Ensure that the specified test file path is correct and accessible from the root directory. + +## Troubleshooting + +- If you encounter any issues with Docker, ensure that your Docker service is running and that you have the necessary permissions to execute Docker commands. +- Verify that the test file exists and that the path is correct. + +## Additional Resources + +- [Docker Documentation](https://docs.docker.com/) +- [Robot Framework Documentation](https://robotframework.org/) \ No newline at end of file diff --git a/docker/build_img.sh b/docker/build_img.sh new file mode 100755 index 0000000..a44aad6 --- /dev/null +++ b/docker/build_img.sh @@ -0,0 +1,6 @@ +#!/bin/bash + +script_dir_path=$(dirname "$(realpath "$0")") +dockerfile_path="${script_dir_path}/Dockerfile" +docker build -f "${dockerfile_path}" "${script_dir_path}/.." -t ttf-robot-img:latest + diff --git a/docker/run_tests.sh b/docker/run_tests.sh new file mode 100755 index 0000000..f4b7a5b --- /dev/null +++ b/docker/run_tests.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +# Function to display usage message +usage() { + echo "Usage: $0 testname" + exit 1 +} + +if [ "$#" -ne 1 ]; then + usage +fi + +testname=$1 + +if [ -f "$testname" ]; then + full_dir_path=$(dirname "$(realpath "$testname")") + echo "Running the test: $(realpath "$testname")" +else + echo "The file '$testname' does not exist." + exit 1 +fi + +script_dir_path=$(dirname "$(realpath "$0")") +root_path="${script_dir_path}/../" + +docker run --rm -it --name etsi-ttf-robot \ + -v "${root_path}":/home/robot \ + --workdir "/home/robot/" \ + -e TEST_FILE="${testname}" \ + ttf-robot-img:latest \ + python -m robot -X "${TEST_FILE}" diff --git a/libraries/Server.py b/libraries/Server.py new file mode 100755 index 0000000..f802415 --- /dev/null +++ b/libraries/Server.py @@ -0,0 +1,107 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json + +# Library version +__version__ = '0.0.1' + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host, port, timeout, method, endpoint, resp_body): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + print("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + self.app.handle_request() + self.app.server_close() \ No newline at end of file -- GitLab From 1d998991e288f78d3d41c12a061eec3f613bf635 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 14 Jun 2024 09:48:30 +0200 Subject: [PATCH 92/94] Removed resource.robot not used file. --- resources.robot | 116 ------------------------------------------------ 1 file changed, 116 deletions(-) delete mode 100644 resources.robot diff --git a/resources.robot b/resources.robot deleted file mode 100644 index 4164d26..0000000 --- a/resources.robot +++ /dev/null @@ -1,116 +0,0 @@ -*** Settings *** - -Documentation - ... A resource file with reusable keywords and variables. - ... - ... The system specific keywords created here form our own domain specific language. - - -Library REST ${MEC_SERVER_IUT} ssl_verify=${MEC_SERVER_SSL_VERITY} accept=application/json content_type=application/json -Library JSONSchemaLibrary ${JSONS_SCHEMAS} - - -*** Keywords *** - -GET URI - [Arguments] ${service} - - [Documentation] - ... Issue a GET request to an URI. - ... NOTE: the response is stored in the REST library used and is available throughtout the test scope. - ... - ... service: the service endpoint to call (without the server name or port). - - Log URI: ${service} - GET ${service} - - -the Plaform IUT entity receives a vGET for - [Arguments] ${endpoint} - - [Documentation] - ... Send a GET request to an API endpoint. - ... - ... endpoint: the absolut path to the API endpoint to reach, without the server address and port. - - ${resp} = GET URI ${endpoint} - - -the Plaform IUT entity receives a vPOST for - [Arguments] ${endpoint} ${data} ${schema} - - [Documentation] - ... A MEC Application subscribes notifications on the availability of a specific service. - ... - ... endpoint: the absolut path to the API endpoint to reach, without the server address and port. - ... data_schema: the schema for the expected data in the POST request. - - Validate Json ${schema}.schema.json ${data} - # TODO will this be mocked or will we use the proper MEC API calls for this? - # If so, won't theses tests require a functional MEC Server? - - -the Plaform IUT sends a response - [Arguments] ${status_code} ${json_schema} - - [Documentation] - ... Check the correctness of the response sent by the IUT. - ... - ... status_code: The expected HTTP status code received in the response. - ... json_schema: the schema to validate the response conformance. - - Integer response status ${status_code} - Output response - ${response} = Output response body - Validate Json ${json_schema}.schema.json ${response} - - -the Plaform IUT has a MEC Application instantiated - [Documentation] - ... Instantiates a MEC Application. - - # TODO will this be mocked or will we use the proper MEC API calls for this? - # If so, won't theses tests require a functional MEC Server? - Set Suite Variable ${APP_INSTANCE_ID} 123 - - -a MEC Application subscribed to service notifications for - [Arguments] ${mec_service} - - [Documentation] - ... A MEC Application subscribes notifications on the availability of a specific service. - ... - ... mec_service: the MEC platform service a MEC Application wants to be notified of. - - Log Available MEC Service: ${mec_service} - # TODO will this be mocked or will we use the proper MEC API calls for this? - # If so, won't theses tests require a functional MEC Server? - - -the Plaform IUT response header parameter - [Arguments] ${header} ${value} - - [Documentation] - ... - - # TODO the platform must reply with a specific header which should be checked for conformance. - # How to do this as the test needs to send a response but also ensure it sends the proper header? - - # String request headers Authorization Bearer ${oauth_token} - No Operation - - -the Plaform IUT sends a notification message to the subscribed MEC Applications with - [Arguments] ${data} - - [Documentation] - ... - - # TODO - # GS MEC 011 V2.0.8, §5.2.4: the MEC platform identifies the relevant MEC platforms for this update, and informs - # them about the changes in service availability by means that may be outside the scope of the present document. - # - # The TP has this notification, so what to do here? Simply do not care about this? Update the TP to exclude this notification? - - No Operation - -- GitLab From 5160fd677e714a470d3d13c837930dba60cf68e4 Mon Sep 17 00:00:00 2001 From: piscione <piscione@etsi.org> Date: Fri, 14 Jun 2024 12:32:58 +0200 Subject: [PATCH 93/94] Fixed some TCs of MEC010p2 --- MEC010p2/MEPM/PKGM/AppPkgMgt.robot | 196 +++++++++++++++++- MEC010p2/MEPM/PKGM/environment/variables.txt | 10 +- .../MEPM/PKGM/jsons/AppPkgNotification.json | 17 ++ MEC010p2/MEPM/PKGM/libraries/Server.py | 144 +++++++++++++ .../__pycache__/Server.cpython-39.pyc | Bin 0 -> 5554 bytes .../schemas/AppPkgNotification.schema.json | 68 ++++++ 6 files changed, 424 insertions(+), 11 deletions(-) create mode 100644 MEC010p2/MEPM/PKGM/jsons/AppPkgNotification.json create mode 100644 MEC010p2/MEPM/PKGM/libraries/Server.py create mode 100644 MEC010p2/MEPM/PKGM/libraries/__pycache__/Server.cpython-39.pyc create mode 100644 MEC010p2/MEPM/PKGM/schemas/AppPkgNotification.schema.json diff --git a/MEC010p2/MEPM/PKGM/AppPkgMgt.robot b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot index 2da898f..711a7e5 100644 --- a/MEC010p2/MEPM/PKGM/AppPkgMgt.robot +++ b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot @@ -8,7 +8,7 @@ Library REST ${MEPM_SCHEMA}://${MEPM_HOST}:${MEPM_PORT} ssl_verify=fa Library BuiltIn Library OperatingSystem Resource ../../../pics.txt - +Library libraries/Server.py *** Test Cases *** TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK @@ -28,7 +28,7 @@ TC_MEC_MEC010p2_MEPM_PKGM_001_01_OK [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} -TC_MEC_MEC010p2_MEPM_PKGM_002_01_OK +TC_MEC_MEC010p2_MEPM_PKGM_001_02_OK [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_002_01_OK ... Check that MEPM returns the list of on-boarded App Packages when requested - Note 3 ... ETSI GS MEC 010-2 3.1.1, clause 7.3.1.3.1 @@ -187,7 +187,7 @@ TC_MEC_MEC010p2_MEPM_PKGM_006_OK Delete a subscription ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 -TC_MEC_MEC010p2_MEPM_PKGM_006_OK +TC_MEC_MEC010p2_MEPM_PKGM_006_NF [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_006_NF ... Check that MEPM service sends an error ... when it receives a deletion request for a subscription on AppPackages @@ -198,8 +198,177 @@ TC_MEC_MEC010p2_MEPM_PKGM_006_OK Delete a subscription ${NON_EXISTENT_SUBSCRIPTION_ID} Check HTTP Response Status Code Is 404 + +TC_MEC_MEC010p2_MEPM_PKGM_007_OK + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_007_OK + ... Check that the MEPM service sends a application package notification + ... if the MEPM service has an associated subscription and the event is generated + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.5.3.1, + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.3.6.2 ##AppPkgNotification + [Tags] PIC_APP_PACKAGE_NOTIFICATIONS + [Setup] Create a subscription AppPkgSubscription.json + Set Suite Variable ${SUBSCRIPTION_ID} ${response['body']['id']} + Spawn Notification Server AppPkgNotification + Validate Json AppPkgNotification.schema.json ${payload_notification} + [TearDown] Delete a subscription ${SUBSCRIPTION_ID} + + + + +TC_MEC_MEC010p2_MEPM_PKGM_008_NA + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_008_NA + ... Check that MEPM responds with an error when it receives + ... a POST request referring an application descriptor AppD + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.1 + + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${APPD_ID} ${response['body']['appDId']} + Post an AppD identified by ${APP_PKG_ID} + Check HTTP Response Status Code Is 405 + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + + + + + +TC_MEC_MEC010p2_MEPM_PKGM_009_OK + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_009_OK + ... Check that MEPM returns the Application Descriptor contained on an on-boarded Application Package when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2 + ... ETSI GS MEC 010-2 3.1.1, clause 6.2.1.2.2 ##AppD + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${ON_BOARDED_APPD_ID} ${response['body']['appDId']} + Get an AppD identified by ${ON_BOARDED_APPD_ID} + Check HTTP Response Status Code Is 200 + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + + +TC_MEC_MEC010p2_MEPM_PKGM_009_NF + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_009_NF + ... Check that MEPM responds with an error when it receives + ... a request for returning a App Descriptor referred with a wrong App Package ID + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Delete an AppD by ID ${NON_EXISTENT_APP_PKG_ID} + Get an AppD identified by ${NON_EXISTENT_APP_PKG_ID} + Check HTTP Response Status Code Is 404 + + +TC_MEC_MEC010p2_MEPM_PKGM_010_FO + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_010_FO + ... Check that MEPM responds with an error when it receives + ... a PUT request referring an application descriptor AppD + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.3 + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${ON_BOARDED_APPD_ID} ${response['body']['appDId']} + Update an AppD identified by ${ON_BOARDED_APPD_ID} + Check HTTP Response Status Code Is 403 + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + + +TC_MEC_MEC010p2_MEPM_PKGM_011_NA + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_011_NA + ... Check that MEPM responds with an error when it receives + ... a DELETE request referring an application descriptor AppD + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.6.3.4 + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Delete an AppD by ID ${APP_PKG_ID} + Check HTTP Response Status Code Is 405 + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + + + +TC_MEC_MEC010p2_MEPM_PKGM_012_01_OK + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_01_OK + ... Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + GET all app Packages content by appPkgId ${APP_PKG_ID} + Check HTTP Response Status Code Is 200 + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + +TC_MEC_MEC010p2_MEPM_PKGM_012_02_OK + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_02_OK + ... heck that MEPM fetches the on-boarded application package content identified by appDId when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Create new App Package CreateAppPackage.json + Set Suite Variable ${APP_PKG_ID} ${response['body']['id']} + Set Suite Variable ${ON_BOARDED_APPD_ID} ${response['body']['appDId']} + GET all app Packages content by appPkgId ${ON_BOARDED_APPD_ID} + Check HTTP Response Status Code Is 200 + [Teardown] Delete an individual APP Package identified by ID ${APP_PKG_ID} + + + +TC_MEC_MEC010p2_MEPM_PKGM_012_01_NF + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_01_NF + ... Check that MEPM fetches the on-boarded application package content identified by appPkgId when requested + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Delete an individual APP Package identified by ID ${NON_EXISTENT_APP_PKG_ID} + GET all app Packages content by appPkgId ${NON_EXISTENT_APP_PKG_ID} + Check HTTP Response Status Code Is 404 + + + +TC_MEC_MEC010p2_MEPM_PKGM_012_02_NF + [Documentation] TP_MEC_MEC010p2_MEPM_PKGM_012_02_NF + ... Check that MEPM service sends an error when it receives a query with an application package with a wrong identifier + ... ETSI GS MEC 010-2 3.1.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT + [Setup] Delete an individual APP Package identified by ID ${NON_EXISTENT_APPD_ID} + GET all app Packages content by appPkgId ${NON_EXISTENT_APPD_ID} + Check HTTP Response Status Code Is 404 + *** Keywords *** +Get an AppD identified by + [Arguments] ${appDId} + Log Getting App descriptor for App Package + Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appDId}/appd + ${output}= Output response + Set Suite Variable ${response} ${output} + +Post an AppD identified by + [Arguments] ${appDId} + Log Getting App descriptor for App Package + Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} + Set Headers {"Authorization":"${TOKEN}"} + Post ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appDId}/appd + ${output}= Output response + Set Suite Variable ${response} ${output} + +Update an AppD identified by + [Arguments] ${appDId} + Log Getting App descriptor for App Package + Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} + Set Headers {"Authorization":"${TOKEN}"} + Put ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appDId}/appd + ${output}= Output response + Set Suite Variable ${response} ${output} + +Delete an AppD by ID + [Arguments] ${identifier} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_packages/${identifier}/appd + ${output}= Output response + Set Suite Variable ${response} ${output} + Create new App Package [Arguments] ${content} Set Headers {"Accept":"*/*"} @@ -211,7 +380,6 @@ Create new App Package ${output}= Output response Set Suite Variable ${response} ${output} - GET all app Packages Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"*/*"} @@ -220,7 +388,6 @@ GET all app Packages ${output}= Output response Set Suite Variable ${response} ${output} - GET all app Packages with filter [Arguments] ${key} ${value} Log Getting all App Packages using filtering parameters @@ -242,6 +409,17 @@ Get an individual APP Package identified by ID Set Suite Variable ${response} ${output} + +GET all app Packages content by appPkgId + [Arguments] ${identifier} + Set Headers {"Accept":"application/zip"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${identifier}/package_content + ${output}= Output response + Set Suite Variable ${response} ${output} + + Create a subscription [Arguments] ${content} Set Headers {"Accept":"application/json"} @@ -293,8 +471,6 @@ Delete an individual APP Package identified by ID Spawn Notification Server - [Arguments] ${host} ${port} ${timeout} ${method} ${endpoint} ${notification_content} ${autosent_notification} - ${file}= Catenate SEPARATOR= jsons/ ${notification_content} .json - ${body}= Get File ${file} - #Spawn Web Server ${host} ${port} ${timeout} ${method} ${endpoint} ${body} ${autosent_notification} - + [Arguments] ${payload_notification} + ${output} Spawn Web Server ${NOTIFICATION_SERVER_IP} ${NOTIFICATION_SERVER_PORT} ${NOTIFICATION_SERVER_TIMEOUT} ${NOTIFICATION_SERVER_HTTP_METHOD} ${NOTIFICATION_SERVER_URI} ${payload_notification} + Set Suite Variable ${payload_notification} ${output} diff --git a/MEC010p2/MEPM/PKGM/environment/variables.txt b/MEC010p2/MEPM/PKGM/environment/variables.txt index fc95e30..fa58be8 100644 --- a/MEC010p2/MEPM/PKGM/environment/variables.txt +++ b/MEC010p2/MEPM/PKGM/environment/variables.txt @@ -23,4 +23,12 @@ ${FILTER_VALUE} ENABLED ${NON_EXISTENT_APP_PKG_ID} NON_EXISTENT_APP_PKG_ID ${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID ${NON_EXISTENT_APPD_ID} NON_EXISTENT_APPD_ID -${ONBOARDING_STATE} CREATED \ No newline at end of file +${ONBOARDING_STATE} CREATED + + +##Notification Server variables +${NOTIFICATION_SERVER_IP} 127.0.0.1 +${NOTIFICATION_SERVER_PORT} 8888 +${NOTIFICATION_SERVER_HTTP_METHOD} POST +${NOTIFICATION_SERVER_URI} /callback_url +${NOTIFICATION_SERVER_TIMEOUT} 5 \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/jsons/AppPkgNotification.json b/MEC010p2/MEPM/PKGM/jsons/AppPkgNotification.json new file mode 100644 index 0000000..6e1ae30 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/jsons/AppPkgNotification.json @@ -0,0 +1,17 @@ +{ + "id": "1234", + "notificationType": "AppPackageOnBoarded", + "subscriptionId": "1234", + "timeStamp": { + "seconds": 1234, + "nanoSeconds": 1234 + }, + "appPkgId": "appPkgId", + "appDId": "appDId", + "operationalState": "ENABLED", + "_links": { + "subscription": { + "href": "someuri/url" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/libraries/Server.py b/MEC010p2/MEPM/PKGM/libraries/Server.py new file mode 100644 index 0000000..c983c3b --- /dev/null +++ b/MEC010p2/MEPM/PKGM/libraries/Server.py @@ -0,0 +1,144 @@ +#!/usr/bin/python3 + +from http.server import BaseHTTPRequestHandler, HTTPServer +import json, os +import logging + +# Library version +__version__ = '0.0.1' + +def import_notification_json(subscription_type): + notification_type = subscription_type.split("Subscription")[0] + file_path = "./jsons/"+notification_type+".json" + logging.info(file_path) + logging.info(os.listdir()) + try: + with open(file_path, 'r') as json_file: + # Load the JSON data + data = json.load(json_file) + logging.info(data) + return data + except FileNotFoundError: + logging.error(f"Error: File not found at {file_path}") + + +class Server ( object ): + + ROBOT_LIBRARY_VERSION = '0.0.1' + + def spawn_web_server (self, host="127.0.0.1", port=8080, timeout=15, method="POST", endpoint="/callback_url", resp_body=None): + + class GET_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_GET(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class POST_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + self.req_body = None + + + def do_POST(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + + #if self.path == self.endpoint: + # self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + #else: + # self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + content_len = int(self.headers.get('Content-Length')) + post_body = self.rfile.read(content_len) + self.req_body=post_body + + def get_req_body(self): + return self.req_body + + def get_resp_body(self): + return self.resp_body + + + class PUT_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_PUT(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + class DELETE_Server(BaseHTTPRequestHandler): + + def __call__(self, *args, **kwargs): + """Handle a request.""" + super().__init__(*args, **kwargs) + + def __init__(self, endpoint, resp_body): + self.resp_body = resp_body + self.endpoint = endpoint + + def do_DELETE(self): + self.send_response(200) + self.send_header('Content-Type', 'application/json') + self.end_headers() + if self.path == self.endpoint: + self.wfile.write(json.dumps(self.resp_body).encode(encoding='utf_8')) + else: + self.wfile.write(json.dumps("wrong endpoint").encode(encoding='utf_8')) + + if method == "GET": + self.handler = GET_Server(endpoint, resp_body) + elif method == "POST": + self.handler = POST_Server(endpoint, resp_body) + elif method == "PUT": + self.handler = PUT_Server(endpoint, resp_body) + elif method == "DELETE": + self.handler = DELETE_Server(endpoint, resp_body) + else: + logging.info("Error, unknown endpoint") + exit(1) + + self.app = HTTPServer((host, int(port)), self.handler) + self.app.timeout = int(timeout) + + + self.app.handle_request() + self.app.server_close() + logging.info(self.handler.get_resp_body()) + if(self.handler.get_req_body()!=None): + return json.loads(self.handler.get_req_body().decode("windows-1252")) + notification_json= import_notification_json(self.handler.get_resp_body()) + return notification_json + diff --git a/MEC010p2/MEPM/PKGM/libraries/__pycache__/Server.cpython-39.pyc b/MEC010p2/MEPM/PKGM/libraries/__pycache__/Server.cpython-39.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6174a8848396b041de13ac5e846ee7d788db8b7b GIT binary patch literal 5554 zcmdT|U2hx56`k1+a`_=yiW@sl+mvb1)=Vr~QWMy5UDvT9TW)OGu;>_Gs8~>(m9!SM z%gipTnpnM52J+N4?Nfoa09Euw|D?ZRUi)P9ALyy)&XN)(%ZZuRD7wU4&dl!4+`0Fh zduOLHHdbV~{&njQ{vW@^*gvT;d|7B*M~N381QWc)Ho40;4cFk*Hd>}@>VM0%^uO)e z!gO=O681CZ=5H~P6ZvOM<b7wybPK{*VpZokMq^b&ow?D7{e^n{{saH>jvprrjZn0F zsfyIM<jY_Aa&h0Du1(iwnw;M0UpD?7lsT06ZxAW#LAhNnjB{+83p3?snXt~XZ6o15 zBQ<t8XH-kfp0&%U)m=#J)DZTL@%#6-%_P^$r{*r-w)FEBJ&{_En1MxF`0bdSJz`62 zhQ;AD<NEg)@(~NaZ?VLA`j@N^Zx=)^HU7;0s^@&nLSq_ZVA1(Sx4hI@iJLNLCqWcS zT2R-iU3?NpVSKS`*Qlbn?4FyKGLly+H-na638SR48g)WZX(W|uQQ2|36(lO(iq_VG za7|f3xEd)ViqRFsi3p^!qP8C@OAlwYqJ~hDG}L00+@yi@=*sqKlB(@a#zRVZ$<wy) zPGZtvHE1?SPu-;os~Ev+H<ER?Km&W!R+eZajXfscz*6?zxhu;LV_(M0?Z8juvfpe4 z?bx5%isVMzZZ!Sndj00~?4_ytTs+m5(G$O!EZ?1<o1U3&&!Tew?(+RlZ{1yP1uL>4 z13zBQ5KwDBRc{5G?MNox5yeOkf^U2Vg7I-)=0!+@myIH7=h2n`HEYuC;VXy6b(HvR z2%ouJFxL<qNG=LT6rOQlIS-eWR4!9N5)bwZGqaZfMS$`7m)~RT`6+ZN>;Ao^`u^C( zW~0?wX*4&yj%+P9^SCv*%BT=vHCWHX>)-@{3QiaafVE8=F@=S;rP~hLw#cEK)9nJ< zdEub#=yox+L}9~_pQZWKPIEg($~+#{(OX1sD|Lo?uc5bu-ruB!q2BZ8Eu;5OX>q9c zjl}4gVoX!T65~5W89U_(;Jm|EG0PLK=gOnU+~H{FJ%?nkunQ{aT9Ilr4n5r~WmMDk z@-AqwVSdTwnPjXtKIrS65~p@S+$EMw4Bpw{+oiMw`%f&s;5xH!)%XG`1J`}QR=GB* z0~cyj!hza^uKfkr>*k1m-S_)=0vNYKZ_8itfL4T<+SOJB_r=$0x900!_Rx`VLz5B$ z;Peb^@B`MD@_?nr-}&!gDS;L28QsY&f>jz7nMJhP;+_G{cG`$)j^_noka*snsjS#< zttzV_*J731*rNYEt_q&lY&GK8^E9R8X-r735x6|>U7Fs2U`F?Y5!O;04A2}{kH(-n z4Yq_5Pe7yuB$mRl9teTuaMHaX{kZL|MB=G({7|%`AWZg5S-}gkO5!{T3IK;H%XiTH zAxcbEV?4)4)i<-#5hqZ%BpPXbS5X<ne1cvNgc9a1k`n4hAC3e<3ou{6zun6v`5wWw zu*;tmDLwrbu;VOz`|z&F9lfWmkY9ZM56re-o{Pf750j}nLgfBLqm4M6MMxdNmEB2J zy~|ZjW@<(PvAH|GC8Kbya$vTS8jI2J$fSt*zAEYFy5A6hM~QA_^;lUHYPEq~drQY! zdrJn1FDaTRTXZ(tu{OQR>FNAEp84dcCsa;E9#Bo5is@B`z*y!E$~#7Pb`%ix2g(y3 z!^WoXd8+7nn~~@sF?g!%d7pP0t?Z5@=W7(mE2yclKCYWS;dlrwKcMGM(<8-0?rEA) zjCPE&<yi9Ps5ViKTmvY_SJC|{fgp>a*qIbWk#;6JFgO(DyBEIJ4ix17gUBGi4JGAw zNYLV>UbglWtzBE|15^g&{%{n1UV+_|ACIyd95)Ev@<+H;H8T<uNR)%XrRgr;LvzSg zT2mtSWt5oQL&OHPN7eQOZj&=9R4k#ypFn&yw-e3mo-MFXL$aV$MEf`Jc^i8@tj*Co zE_+c@mXK2<Y7pJ=0f+DS;aaj@Ey!8A_Y)H20A(V&sr-P1=9-_lw#>FV5-gS1@es^a z!Jk`dW&y!#`Jr2AM{$zb?HB{|AP&Lj8r~VEV15E5e1*6;1ie~+s2AcQ#YSyAato|+ z;90IUmLH+}m@8Eoi$f&JoPCFs)2W4bKN<;r!=sF%mrffe={1&(*iSn5h7`N<4HWAS z15f{yY(T+6{*1(7gqo-3O%k_Ake`NZrKx%veX2C%34%>bdruvra?ZG8$^|r=C`T?r zHeIi0zjFWKYmQ0}N%dFWavZAj3PI_lEr$+A^2eC;rP1dxX*9yN;)qTsgr5J=wnDy7 zi<}{G5(y}6L-SwKV!uJ!9$IuZP&NN@{NE-eUW)qS;aCR|rk|I8ffxU)fUkWm!9SV5 zGhd&7y_tBOjNZrmrO`BceXwtlQU|afU9JBc<QD+g%*$<B@(bX<JfcSqhWjcCe2S@F zPJyu_s9PnqD9`p;K&exi*uBbgx(2?eT=quytUhbGQ0aslVYC$<d<i_KsM9TP1)+$x z;;EV04`-{Bk}!wOM|K7#=?FnO)Mfd<4iZV3M1Bn6n)vom`6Sr%qfX+EXD?7Hrz14C z9P5u-d`L#9>6E6E8(C7>bR2{)PT}Jd#n-1J)w15sC~F-%7<_l&m_-uPRc_Ny)*~_W zl}8(Ko#rG_U((8tofXlM%uw>wd2{0U_x5-3UQGKjW=x!(co*fggL9jqg7X{4IK#^( zo#Ra4cLw*nXJ6v_YEIG)SDq#D776l%q{E%Xs(mc*sW%_oyK%4X-MM|^!N(6Cd!Nle zSh{_0QBqzR()@69{w8kFc$$5VVHuKosztZ7o+RyBW^L`e%td5pSs+0kR3*>D5kpJ| kX`Z&X%0(-5^reS6X-4H-&AzIxk<0ZigG}I<mf@WGH+!B6Q~&?~ literal 0 HcmV?d00001 diff --git a/MEC010p2/MEPM/PKGM/schemas/AppPkgNotification.schema.json b/MEC010p2/MEPM/PKGM/schemas/AppPkgNotification.schema.json new file mode 100644 index 0000000..a021991 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/schemas/AppPkgNotification.schema.json @@ -0,0 +1,68 @@ +{ + "$schema": "http://json-schema.org/draft-04/schema#", + "type": "object", + "properties": { + "id": { + "type": "string" + }, + "notificationType": { + "type": "string" + }, + "subscriptionId": { + "type": "string" + }, + "timeStamp": { + "type": "object", + "properties": { + "seconds": { + "type": "integer" + }, + "nanoSeconds": { + "type": "integer" + } + }, + "required": [ + "seconds", + "nanoSeconds" + ] + }, + "appPkgId": { + "type": "string" + }, + "appDId": { + "type": "string" + }, + "operationalState": { + "type": "string" + }, + "_links": { + "type": "object", + "properties": { + "subscription": { + "type": "object", + "properties": { + "href": { + "type": "string" + } + }, + "required": [ + "href" + ] + } + }, + "required": [ + "subscription" + ] + } + }, + "required": [ + "id", + "notificationType", + "subscriptionId", + "timeStamp", + "appPkgId", + "appDId", + "operationalState", + "_links" + ] +} \ No newline at end of file -- GitLab From d4eae990a1c5cd57d51c86ab9fcc3fb9d574a51a Mon Sep 17 00:00:00 2001 From: "p.piscione" <p.piscione@nextworks.it> Date: Fri, 31 Jan 2025 15:18:07 +0100 Subject: [PATCH 94/94] Minor fix --- MEC021/SRV/AMS/AMSService.robot | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/MEC021/SRV/AMS/AMSService.robot b/MEC021/SRV/AMS/AMSService.robot index 27a88f5..8f9cc70 100644 --- a/MEC021/SRV/AMS/AMSService.robot +++ b/MEC021/SRV/AMS/AMSService.robot @@ -148,12 +148,13 @@ TC_MEC_MEC021_SRV_AMS_002_OK Should Be Equal As Strings ${response['body']['serviceConsumerId']['appInstanceId']} ${APP_INS_ID} -TC_MEC_MEC021_SRV_AMS_002_BR - [Documentation] Request Registered AMS information using bad parameters - ... Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters - ... ETSI GS MEC 021 3.3.1, clause 8.3.3.4 - ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml - [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS +# This test case is incomplete +#TC_MEC_MEC021_SRV_AMS_002_BR +# [Documentation] Request Registered AMS information using bad parameters +# ... Check that the AMS service returns an error when receives a query about a registered application mobility service with wrong parameters +# ... ETSI GS MEC 021 3.3.1, clause 8.3.3.4 +# ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml +# [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -164,7 +165,7 @@ TC_MEC_MEC021_SRV_AMS_003_BR ... ETSI GS MEC 021 3.3.1, clause 8.3.3.4 ... Reference https://forge.etsi.org/rep/mec/gs021-amsi-api/-/blob/master/MEC021_AppMobilityService.yaml [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS - Create a new application mobility service ${MALFORMED_APP_MOBILITY_SERVICE_ID} + Create a new application mobility service ${MALFORMED_APP_MOBILITY_SERVICE_ID} ${APP_INS_ID} Check HTTP Response Status Code Is 400 -- GitLab