diff --git a/.jenkins.sh b/.jenkins.sh index ea4251e443b9f2c64a64b2ce6164dbce2dcceea6..528db63d40345477ac2879102d19cac2425e9390 100644 --- a/.jenkins.sh +++ b/.jenkins.sh @@ -9,7 +9,24 @@ cd "$(dirname "$0")" run_dir="$(pwd)" +echo "Using git branch $GIT_BRANCH" + ./scripts/build-container.sh ./scripts/run-container.sh "${run_dir}" -exit $? +if [[ "$GIT_BRANCH" =~ .*fix-plu$ ]]; then + + apiTestsVersion=$(echo $GIT_BRANCH | cut -d'/' -f 2) + apiTestsVersion=$(echo $apiTestsVersion | cut -d'-' -f 1) + echo apiTestsVersion + + curl -X POST \ + -F token=${ROBOT_HIVE_TAP_TT_TOKEN} \ + -F ref=master \ + -F "variables[API_TESTS_VERSION]=$apiTestsVersion" \ + -F "variables[TEST_SUITE]=MEC" \ + https://forge.etsi.org/rep/api/v4/projects/484/trigger/pipeline +fi +ret=$? +echo "Final validation result: $ret" +exit $ret diff --git a/GenericKeywords.robot b/GenericKeywords.robot index ee12e8d01eb06eb9209b6182da6a285d470499d3..79c22093562f3f22402903aa74aa914d299d7321 100644 --- a/GenericKeywords.robot +++ b/GenericKeywords.robot @@ -25,7 +25,8 @@ 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} - \ Exit For Loop If ${item[${json_field}]} == ${json_value} + \ ${are_equal}= Should Be Equal As Strings ${item["${json_field}"]} ${json_value} + \ Exit For Loop If ${are_equal} Log Item found ${item} [return] ${item} diff --git a/MEC010p2/MEO/GRANT/Grant.robot b/MEC010p2/MEO/GRANT/Grant.robot new file mode 100644 index 0000000000000000000000000000000000000000..15f350f64e7e6bf462a6278fd5887cdc8c85ca08 --- /dev/null +++ b/MEC010p2/MEO/GRANT/Grant.robot @@ -0,0 +1,131 @@ +''[Documentation] robot --outputdir ./outputs ./Grant.robot +... Test Suite to validate Grant operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../GenericKeywords.robot +Library REST ${MEO_SCHEMA}://${MEO_HOST}:${MEO_PORT} ssl_verify=false +Library OperatingSystem + + +*** 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) + [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Create a GRANT request grantRequest + Check HTTP Response Status Code Is 201 + Check HTTP Response Header Contains Location + Check HTTP Response Body Json Schema Is Grant + +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) + [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Create a GRANT request grantBadRequest + Check HTTP Response Status Code Is 400 + +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 + [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Create a GRANT request grantRequest2 + Check HTTP Response Status Code Is 201 + Check HTTP Response Header Contains Location + 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) + [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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) + [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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 + [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get an individual grant ${GRANT_ID_ACCEPTED} + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + +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 + [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get an individual grant ${GRANT_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 + Get an individual grant ${NOT_EXISTING_GRANT_ID} + Check HTTP Response Status Code Is 404 + + + +*** Keywords *** +Create a GRANT request + [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}/grants ${body} allow_redirects=false + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get an individual grant + [Arguments] ${grantId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/grants/${grantId} allow_redirects=false + ${output}= Output response + Set Suite Variable ${response} ${output} + + + \ No newline at end of file diff --git a/MEO/GRANT/README.md b/MEC010p2/MEO/GRANT/README.md similarity index 100% rename from MEO/GRANT/README.md rename to MEC010p2/MEO/GRANT/README.md diff --git a/MEO/GRANT/environment/variables.txt b/MEC010p2/MEO/GRANT/environment/variables.txt similarity index 63% rename from MEO/GRANT/environment/variables.txt rename to MEC010p2/MEO/GRANT/environment/variables.txt index e14127f960808c90ae6c3133bb5f657f492dfbdd..603052eed8800f22bef121a344833af0ff018205 100644 --- a/MEO/GRANT/environment/variables.txt +++ b/MEC010p2/MEO/GRANT/environment/variables.txt @@ -1,7 +1,8 @@ *** Variables *** # Generic variables ${MEO_SCHEMA} http -${MEO_HOST} 10.192.2.172 +#${MEO_HOST} 10.192.2.172 +${MEO_HOST} 127.0.0.1 ${MEO_PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l @@ -10,8 +11,10 @@ ${apiName} granting ${apiVersion} v1 # Specific variables -${grantId} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${non_existant_grant_id} non_existant_grant_id +${GRANT_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${GRANT_ID_ACCEPTED} abcdee2b-6e50-4f33-ab09-8bf05850abcd +${NOT_EXISTING_GRANT_ID} NOT_EXISTING_GRANT_ID +${APP_INSTANCE_ID} 456 # Notifications variables diff --git a/MEC010p2/MEO/GRANT/jsons/grantBadRequest.json b/MEC010p2/MEO/GRANT/jsons/grantBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..36380ae4b6532e582e3086e25d3bbdd835ce04eb --- /dev/null +++ b/MEC010p2/MEO/GRANT/jsons/grantBadRequest.json @@ -0,0 +1,6 @@ +{ + "id": "123", + "appInstanceId": "456", + "appLcmOpOccId": "789", + "operationERROR":"INSTANTIATE" +} \ No newline at end of file diff --git a/MEC010p2/MEO/GRANT/jsons/grantBadRequest2.json b/MEC010p2/MEO/GRANT/jsons/grantBadRequest2.json new file mode 100644 index 0000000000000000000000000000000000000000..36380ae4b6532e582e3086e25d3bbdd835ce04eb --- /dev/null +++ b/MEC010p2/MEO/GRANT/jsons/grantBadRequest2.json @@ -0,0 +1,6 @@ +{ + "id": "123", + "appInstanceId": "456", + "appLcmOpOccId": "789", + "operationERROR":"INSTANTIATE" +} \ No newline at end of file diff --git a/MEC010p2/MEO/GRANT/jsons/grantRequest.json b/MEC010p2/MEO/GRANT/jsons/grantRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..7c6b0e9f419a7d1fa783577143d8d8ec22552533 --- /dev/null +++ b/MEC010p2/MEO/GRANT/jsons/grantRequest.json @@ -0,0 +1,23 @@ +{ + "id": "123", + "appInstanceId": "456", + "appLcmOpOccId": "789", + "appDId":"appDId", + "operation":"INSTANTIATE", + "addResources": [ + { + "resourceDefinitionId": "resourceDefinitionId", + "vimConnectionId": "vimConnectionId", + "resourceGroupId": "resourceGroupId", + "zoneId": "zoneId" + } + ], + "_links": { + "appLcmOpOcc": { + "href": "https://anexample.ex/" + }, + "appInstance": { + "href": "https://anexample.ex/" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/GRANT/jsons/grantRequest2.json b/MEC010p2/MEO/GRANT/jsons/grantRequest2.json new file mode 100644 index 0000000000000000000000000000000000000000..4a9a1d48bc09742bdf760c7288e8d4a3541302cb --- /dev/null +++ b/MEC010p2/MEO/GRANT/jsons/grantRequest2.json @@ -0,0 +1,22 @@ +{ + "id": "123", + "appInstanceId": "456", + "appLcmOpOccId": "789", + "operation": "OPERATE", + "addResources": [ + { + "resourceDefinitionId": "resourceDefinitionId", + "vimConnectionId": "vimConnectionId", + "resourceGroupId": "resourceGroupId", + "zoneId": "zoneId" + } + ], + "_links": { + "appLcmOpOcc": { + "href": "https://anexample.ex/" + }, + "appInstance": { + "href": "https://anexample.ex/" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/GRANT/jsons/grantRequestAsynchronous.json b/MEC010p2/MEO/GRANT/jsons/grantRequestAsynchronous.json new file mode 100644 index 0000000000000000000000000000000000000000..edc0c4c6c0aa6401adb8477600879390e9328616 --- /dev/null +++ b/MEC010p2/MEO/GRANT/jsons/grantRequestAsynchronous.json @@ -0,0 +1,22 @@ +{ + "id": "456", + "appInstanceId": "456", + "appLcmOpOccId": "789", + "operation": "INSTANTIATE", + "addResources": [ + { + "resourceDefinitionId": "resourceDefinitionId", + "vimConnectionId": "vimConnectionId", + "resourceGroupId": "resourceGroupId", + "zoneId": "zoneId" + } + ], + "_links": { + "appLcmOpOcc": { + "href": "https://anexample.ex/" + }, + "appInstance": { + "href": "https://anexample.ex/" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/GRANT/jsons/grantRequestAsynchronous2.json b/MEC010p2/MEO/GRANT/jsons/grantRequestAsynchronous2.json new file mode 100644 index 0000000000000000000000000000000000000000..b72c92367987cde50b4bb1cf78833b0c3a8a60dc --- /dev/null +++ b/MEC010p2/MEO/GRANT/jsons/grantRequestAsynchronous2.json @@ -0,0 +1,22 @@ +{ + "id": "456", + "appInstanceId": "456", + "appLcmOpOccId": "789", + "operation": "OPERATE", + "addResources": [ + { + "resourceDefinitionId": "resourceDefinitionId", + "vimConnectionId": "vimConnectionId", + "resourceGroupId": "resourceGroupId", + "zoneId": "zoneId" + } + ], + "_links": { + "appLcmOpOcc": { + "href": "https://anexample.ex/" + }, + "appInstance": { + "href": "https://anexample.ex/" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/GRANT/jsons/grantRequestInstantiate.json b/MEC010p2/MEO/GRANT/jsons/grantRequestInstantiate.json new file mode 100644 index 0000000000000000000000000000000000000000..c1c8895deac523264d53170bf354d1bf29406f78 --- /dev/null +++ b/MEC010p2/MEO/GRANT/jsons/grantRequestInstantiate.json @@ -0,0 +1,14 @@ +{ + "id": "123", + "appInstanceId": "456", + "appLcmOpOccId": "789", + "operation": "INSTANTIATE", + "_links": { + "appLcmOpOcc": { + "href": "https://anexample.ex/" + }, + "appInstance": { + "href": "https://anexample.ex/" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/GRANT/schemas/Grant.schema.json b/MEC010p2/MEO/GRANT/schemas/Grant.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..4246619a5180c1c95a47504b9d78849dd4fde47c --- /dev/null +++ b/MEC010p2/MEO/GRANT/schemas/Grant.schema.json @@ -0,0 +1,628 @@ +{ + "description": "'This type represents a grant. Refer to clause 9.5.2.3 of ETSI GS NFV-SOL 003 '", + "type": "object", + "required": [ + "id", + "appInstanceId", + "appLcmOpOccId", + "_links" + ], + "properties": { + "id": { + "type": "string" + }, + "appInstanceId": { + "description": "Identifier of application instance.", + "type": "string" + }, + "appLcmOpOccId": { + "description": "Identifier of application lifecycle management operation occurrence.", + "type": "string" + }, + "vimConnections": { + "type": "array", + "items": { + "properties": { + "accessInfo": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "extra": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "id": { + "description": "The identifier of the VIM Connection. This identifier is managed by the MEO.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "interfaceInfo": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "vimId": { + "description": "The identifier of the VIM instance. This identifier is managed by the MEO.Shall be present to address additional information about the VIM if such information has been configured into the MEPM by means outside the scope of the present document, and should be absent otherwise.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information. The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM.The set of permitted values is expected to change over time as new types or versions of VIMs become available. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "id", + "vimType" + ], + "type": "object", + "x-etsi-ref": "6.2.2.18" + } + }, + "zones": { + "type": "array", + "items": { + "properties": { + "id": { + "description": "The identifier of this ZoneInfo instance, for the purpose of referencing it from other structures in the \"Grant\" structure.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "zoneId": { + "description": "The identifier of the resource zone, as managed by the resource management layer (typically, the VIM).", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "id", + "zoneId" + ], + "type": "object", + "x-etsi-ref": "6.2.4.6f" + } + }, + "zoneGroups": { + "type": "array", + "items": { + "properties": { + "zoneId": { + "description": "References of identifiers of \"ZoneInfo\" structures, each of which provides information about a resource zone that belongs to this group.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "zoneId" + ], + "type": "object", + "x-etsi-ref": "6.2.4.7" + } + }, + "addResources": { + "type": "array", + "items": { + "properties": { + "resourceDefinitionId": { + "description": "Identifier of the related \"ResourceDefinition\" structure from the related \"GrantRequest\" structure.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceGroupId": { + "description": "Identifier of the \"infrastructure resource group\", logical grouping of virtual resources assigned to a tenant within an Infrastructure Domain, to be provided when allocating the resource.If the VIM connection referenced by \"vimConnectionId\" applies to multiple infrastructure resource groups, this attribute shall be present for new resources.If the VIM connection referenced by \"vimConnectionId\" applies to a single infrastructure resource group, this attribute may be present for new resources. This attribute shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "description": "Identifier of the VIM connection to be used to manage this resource. Shall be present for new resources, and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "zoneId": { + "description": "Reference to the identifier of the \"ZoneInfo\" structure in the \"Grant\" structure defining the resource zone into which this resource is to be placed. Shall be present for new resources if the zones concept is applicable to them (typically, Compute resources), and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "resourceDefinitionId" + ], + "type": "object", + "x-etsi-ref": "6.2.4.5" + } + }, + "tempResources": { + "type": "array", + "items": { + "properties": { + "resourceDefinitionId": { + "description": "Identifier of the related \"ResourceDefinition\" structure from the related \"GrantRequest\" structure.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceGroupId": { + "description": "Identifier of the \"infrastructure resource group\", logical grouping of virtual resources assigned to a tenant within an Infrastructure Domain, to be provided when allocating the resource.If the VIM connection referenced by \"vimConnectionId\" applies to multiple infrastructure resource groups, this attribute shall be present for new resources.If the VIM connection referenced by \"vimConnectionId\" applies to a single infrastructure resource group, this attribute may be present for new resources. This attribute shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "description": "Identifier of the VIM connection to be used to manage this resource. Shall be present for new resources, and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "zoneId": { + "description": "Reference to the identifier of the \"ZoneInfo\" structure in the \"Grant\" structure defining the resource zone into which this resource is to be placed. Shall be present for new resources if the zones concept is applicable to them (typically, Compute resources), and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "resourceDefinitionId" + ], + "type": "object", + "x-etsi-ref": "6.2.4.5" + } + }, + "removeResources": { + "type": "array", + "items": { + "properties": { + "resourceDefinitionId": { + "description": "Identifier of the related \"ResourceDefinition\" structure from the related \"GrantRequest\" structure.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceGroupId": { + "description": "Identifier of the \"infrastructure resource group\", logical grouping of virtual resources assigned to a tenant within an Infrastructure Domain, to be provided when allocating the resource.If the VIM connection referenced by \"vimConnectionId\" applies to multiple infrastructure resource groups, this attribute shall be present for new resources.If the VIM connection referenced by \"vimConnectionId\" applies to a single infrastructure resource group, this attribute may be present for new resources. This attribute shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "description": "Identifier of the VIM connection to be used to manage this resource. Shall be present for new resources, and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "zoneId": { + "description": "Reference to the identifier of the \"ZoneInfo\" structure in the \"Grant\" structure defining the resource zone into which this resource is to be placed. Shall be present for new resources if the zones concept is applicable to them (typically, Compute resources), and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "resourceDefinitionId" + ], + "type": "object", + "x-etsi-ref": "6.2.4.5" + } + }, + "updateResources": { + "type": "array", + "items": { + "properties": { + "resourceDefinitionId": { + "description": "Identifier of the related \"ResourceDefinition\" structure from the related \"GrantRequest\" structure.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceGroupId": { + "description": "Identifier of the \"infrastructure resource group\", logical grouping of virtual resources assigned to a tenant within an Infrastructure Domain, to be provided when allocating the resource.If the VIM connection referenced by \"vimConnectionId\" applies to multiple infrastructure resource groups, this attribute shall be present for new resources.If the VIM connection referenced by \"vimConnectionId\" applies to a single infrastructure resource group, this attribute may be present for new resources. This attribute shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "description": "Identifier of the VIM connection to be used to manage this resource. Shall be present for new resources, and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "zoneId": { + "description": "Reference to the identifier of the \"ZoneInfo\" structure in the \"Grant\" structure defining the resource zone into which this resource is to be placed. Shall be present for new resources if the zones concept is applicable to them (typically, Compute resources), and shall be absent for resources that have already been allocated.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "resourceDefinitionId" + ], + "type": "object", + "x-etsi-ref": "6.2.4.5" + } + }, + "vimAssets": { + "description": "Information about assets for the application that are managed by the MEO in the VIM, such as software images.", + "type": "object", + "properties": { + "softwareImages": { + "type": "array", + "items": { + "properties": { + "appDSoftwareImageId": { + "description": "Identifier which references the software image descriptor in the AppD.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "description": "Identifier of the VIM connection to access the software image referenced in this structure. ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimSoftwareImageId": { + "description": "Identifier of the software image in the resource management layer (i.e. VIM).", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "appDSoftwareImageId", + "vimSoftwareImageId" + ], + "type": "object", + "x-etsi-ref": "6.2.4.11" + } + } + } + }, + "extVirtualLinks": { + "type": "array", + "items": { + "properties": { + "extCps": { + "description": "External CPs of the application instance to be connected to this external VL.", + "items": { + "properties": { + "cpConfig": { + "description": "List of instance data that need to be configured on the CP instances created from the respective CPD.", + "items": { + "properties": { + "cpInstanceId": { + "description": "Identifier of the external CP instance to which this set of configuration parameters is requested to be applied. \n\nShall be present if this instance has already been created. ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "cpProtocolData": { + "description": "Parameters for configuring the network protocols on the link port that connects the CP to a VL. See note.", + "items": { + "properties": { + "ipOverEthernet": { + "description": "'This type represents network address data for IP over Ethernet. Refer to clause 4.4.1.10c of ETSI GS NFV SOL 003'", + "type": "object", + "properties": { + "macAddress": { + "description": "'MAC address. If this attribute is not present, it shall be chosen by the VIM'", + "type": "string" + }, + "ipAddresses": { + "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet.", + "type": "array", + "items": { + "description": "'IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet.'", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses.", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "fixedAddresses": { + "description": "Fixed addresses to assign (from the subnet defined by subnetId if provided).", + "type": "array", + "items": { + "description": "Fixed addresses to assign (from the subnet defined by subnetId if provided)", + "type": "string" + } + }, + "numDynamicAddresses": { + "description": "Number of dynamic addresses to assign (from the subnet defined by subnetId if provided)", + "type": "integer" + }, + "addressRange": { + "description": "An IP address range to be used, e.g. in case of egress connections.", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "Lowest IP address belonging to the range.", + "type": "string" + }, + "maxAddress": { + "description": "Highest IP address belonging to the range.", + "type": "string" + } + } + }, + "subnetId": { + "description": "Subnet defined by the identifier of the subnet resource in the VIM.", + "type": "string" + } + } + } + } + } + }, + "layerProtocol": { + "description": "'This type represents network address data for IP over Ethernet. Refer to clause 4.4.1.10c of ETSI GS NFV SOL 003'", + "type": "object", + "properties": { + "macAddress": { + "description": "'MAC address. If this attribute is not present, it shall be chosen by the VIM'", + "type": "string" + }, + "ipAddresses": { + "description": "List of IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet.", + "type": "array", + "items": { + "description": "'IP addresses to assign to the CP instance. Each entry represents IP address data for fixed or dynamic IP address assignment per subnet.'", + "type": "object", + "required": [ + "type" + ], + "properties": { + "type": { + "description": "The type of the IP addresses.", + "type": "string", + "enum": [ + "IPV4", + "IPV6" + ] + }, + "fixedAddresses": { + "description": "Fixed addresses to assign (from the subnet defined by subnetId if provided).", + "type": "array", + "items": { + "description": "Fixed addresses to assign (from the subnet defined by subnetId if provided)", + "type": "string" + } + }, + "numDynamicAddresses": { + "description": "Number of dynamic addresses to assign (from the subnet defined by subnetId if provided)", + "type": "integer" + }, + "addressRange": { + "description": "An IP address range to be used, e.g. in case of egress connections.", + "type": "object", + "required": [ + "minAddress", + "maxAddress" + ], + "properties": { + "minAddress": { + "description": "Lowest IP address belonging to the range.", + "type": "string" + }, + "maxAddress": { + "description": "Highest IP address belonging to the range.", + "type": "string" + } + } + }, + "subnetId": { + "description": "Subnet defined by the identifier of the subnet resource in the VIM.", + "type": "string" + } + } + } + } + } + } + }, + "required": [ + "layerProtocol" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the present document in a backwards-compatible way. In the current version of the present document, only IP over Ethernet is supported.", + "x-etsi-ref": "6.2.4.14" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "CpProtocolData" + }, + "linkPortId": { + "description": "Identifier of a pre-configured link port to which the external CP will be associated. See note.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-notes": "NOTE:\tThe following conditions apply to the attributes \"linkPortId\" and \" cpProtocolData\": \nThe \"linkPortId\" and \"cpProtocolData\" attributes shall both be absent for the deletion of an existing external CP instance addressed by cpInstanceId. \nAt least one of these attributes shall be present for a to-be-created external CP instance or an existing external CP instance.\nIf the \"linkPortId\" attribute is absent, the MEPM shall create a link port.\nIf the \"cpProtocolData\" attribute is absent, the \"linkPortId\" attribute shall be provided referencing a pre-created link port, and the MEPM can use means outside the scope of the present document to obtain the pre-configured address information for the connection point from the resource representing the link port.\nIf both \"cpProtocolData\" and \"linkportId\" are provided, the API consumer shall ensure that the cpProtocolData can be used with the pre-created link port referenced by \"linkPortId\".", + "x-etsi-ref": "6.2.4.13" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "AppExtCpConfig" + }, + "cpdId": { + "description": "The identifier of the CPD in the AppD.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "cpdId", + "cpConfig" + ], + "type": "object", + "x-etsi-ref": "6.2.4.12" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "AppExtCpData" + }, + "extLinkPorts": { + "description": "Externally provided link ports to be used to connect external connection points to this external VL. If this attribute is not present, the MEPM shall create the link ports on the external VL.", + "items": { + "properties": { + "id": { + "description": "Identifier of this link port as provided by the entity that has created the link port.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceHandle": { + "properties": { + "resourceId": { + "description": "Identifier of the resource in the scope of the VIM.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "description": "Identifier of the VIM connection to manage the resource.The applicable \"VimConnectionInfo\" structure, which is referenced by vimConnectionId, can be obtained from the \"vimConnectionInfo\" attribute of the \"AppInstance\" structure.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimLevelResourceType": { + "description": "Type of the resource in the scope of the VIM. See note.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "resourceId" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tThe value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM and can be used as information that complements the ResourceHandle. This value set is different from the value set of the \"type\" attribute in the ResourceDefinition.", + "x-etsi-ref": "6.2.4.10" + } + }, + "required": [ + "id", + "resourceHandle" + ], + "type": "object", + "x-etsi-ref": "6.2.4.9" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "ExtLinkPortData" + }, + "id": { + "description": "The identifier of the external VL instance. The identifier is assigned by the MEC entity that manages this VL instance.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "resourceId": { + "description": "The identifier of the resource in the scope of the VIM.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "vimConnectionId": { + "description": "Identifier of the VIM connection to manage this resource. ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "id", + "resourceId", + "extCps" + ], + "type": "object", + "x-etsi-ref": "6.2.4.8" + } + }, + "additionalParams": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "appLcmOpOcc", + "appInstance" + ], + "properties": { + "appLcmOpOcc": { + "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.5.2" + }, + "appInstance": { + "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.5.2" + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/AppPkgMgt.robot b/MEC010p2/MEO/PKGM/AppPkgMgt.robot new file mode 100644 index 0000000000000000000000000000000000000000..6c47a0d0fc10f4a6330f0c07efaf9de6e04ed973 --- /dev/null +++ b/MEC010p2/MEO/PKGM/AppPkgMgt.robot @@ -0,0 +1,496 @@ +''[Documentation] robot --outputdir ./outputs ./AppPkgMgt.robot +... Test Suite to validate Package Management (PKGM) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../GenericKeywords.robot +Library REST ${MEO_SCHEMA}://${MEO_HOST}:${MEO_PORT} ssl_verify=false +Library BuiltIn +Library OperatingSystem +#Library MockServerLibrary + + +*** 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) + [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} + + +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) + [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 + + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + GET all app Packages + Check HTTP Response Status Code Is 200 + FOR ${onBoardedAppPkgInfo} IN @{response['body']} + Validate Json AppPkgInfo.schema.json ${onBoardedAppPkgInfo} + END + + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + GET all onboarded app Packages + Check HTTP Response Status Code Is 200 + FOR ${onBoardedAppPkgInfo} IN @{response['body']} + Validate Json AppPkgInfo.schema.json ${onBoardedAppPkgInfo} + END + +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 + [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 + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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} + + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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} + + +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 + [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 + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Delete an individual APP Package identified by ${ON_BOARDED_APP_PKG_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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Delete an individual APP Package identified by ${NON_EXISTENT_APP_PKG_ID} + Check HTTP Response Status Code Is 404 + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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} + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Update Operational State for an app Package ${ON_BOARDED_APP_PKG_ID} AppPkgInfoModificationsBadRequest.json + Check HTTP Response Status Code Is 400 + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Update Operational State for an app Package ${NON_EXISTENT_APP_PKG_ID} AppPkgInfoModificationsBadRequest.json + Check HTTP Response Status Code Is 404 + + +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 + 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} + +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 + [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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get all APP Package subscriptions + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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} + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 204 + Check HTTP Response Body is Empty + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get an AppD from App Package identified by ${ON_BOARDED_APP_PKG_ID} + Check HTTP Response Status Code Is 200 + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get an AppD from App Package identified by ${NON_EXISTING_APPD_ID} + Check HTTP Response Status Code Is 404 + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get app Package identified by ${ON_BOARDED_APP_PKG_ID} ${ACCEPTED_CONTENT_TYPE_ZIP} + Check HTTP Response Status Code Is 200 + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get onboarded app Package identified by ${ON_BOARDED_APP_PKG_ID} ${ACCEPTED_CONTENT_TYPE_ZIP} + Check HTTP Response Status Code Is 200 + + +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 + [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_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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Submit application package ${APP_PKG_ID} + Check HTTP Response Status Code Is 202 + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Submit application package ${NOT_EXISTING_APP_PKG_ID} + Check HTTP Response Status Code Is 404 + + + +*** Keywords *** +Post Request to create new App Package Resource + [Arguments] ${content} + Log Creating a new App Package + Set Headers {"Accept":"*/*"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${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} + + +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 + [Arguments] ${key} ${value} + Log Getting all App Packages using filtering parameters + Set Headers {"Accept":"application/json"} + 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 + 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} + + +Delete an individual APP Package identified by + [Arguments] ${value} + Log Removing an App Package + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_packages/${value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Update Operational State for an app Package + [Arguments] ${appPkgId} ${content} + Log Updating an App Package + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + PATCH ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId} ${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":"${ACCEPTED_CONTENT_TYPE}"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId}/appd + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get app Package identified by + [Arguments] ${appPkgId} ${CONTENT_TYPE} + Log Getting App descriptor for App Package + Set Headers {"Accept":"${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 app Package identified by + [Arguments] ${appPkgId} ${CONTENT_TYPE} + Log Getting App descriptor for App Package + Set Headers {"Accept":"${CONTENT_TYPE}"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${appPkgId}/package_content + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Submit application package + [Arguments] ${appPkgId} + Log Getting App descriptor for App Package + Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE_ZIP}"} + Set Headers {"Authorization":"${TOKEN}"} + Put ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId}/package_content + ${output}= Output response + Set Suite Variable ${response} ${output} + +Send a request for a subscription + [Arguments] ${content} + Log Creating a new subscription + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Get all app Package subscriptions + Log Getting list of subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Get an individual APP Package subscriptions + [Arguments] ${subId} + Log Getting an individual subscription + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Delete an App Package Subscription identified by + [Arguments] ${subId} + Log Deleting a subscription + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + \ No newline at end of file diff --git a/MEO/PKGM/README.md b/MEC010p2/MEO/PKGM/README.md similarity index 100% rename from MEO/PKGM/README.md rename to MEC010p2/MEO/PKGM/README.md diff --git a/MEC010p2/MEO/PKGM/environment/variables.txt b/MEC010p2/MEO/PKGM/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..bdfa447cacf5d10a354d6c51e26e3f7e611f053d --- /dev/null +++ b/MEC010p2/MEO/PKGM/environment/variables.txt @@ -0,0 +1,52 @@ +*** Variables *** +# Generic variables +${MEO_SCHEMA} http +${MEO_HOST} 127.0.0.1 +#${MEO_HOST} 10.192.2.172 +${MEO_PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} app_pkgm +${apiVersion} v1 + +# Specific variables +${APP_PKG_NAME} appName +${APP_PKG_VERSION} APP_PKG_VERSION +${APP_NAME} appName +${CHECKSUM} SHA-256 +${OPERATIONAL_STATE} ENABLED +${ONBOARDING_STATE} CREATED +${USAGE_STATE} NOT_IN_USE +${APP_PKG_ID} 01234782-2c70-4e47-9a4e-0ee3a1a00123 +${ON_BOARDED_APP_PKG_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APPD_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${MALFORMED_FILTER_NAME} operationalStatus +${FILTER_VALUE} NOT_IN_USE +${NON_EXISTENT_APP_PKG_ID} NON_EXISTENT_APP_PKG_ID +${NON_EXISTING_APPD_ID} NON_EXISTENT_APPD_ID +${OPERATION_VALUE} DISABLE +${WRONG_OPERATION_VALUE} DISABL + +${ACCEPTED_CONTENT_TYPE} text/plain; charset=utf-8 +${ACCEPTED_CONTENT_TYPE_ZIP} application/zip +${WRONG_CONTENT_TYPE} application/json +${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NOT_EXISTING_APP_PKG_ID} NOT_EXISTING_APP_PKG_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 diff --git a/MEC010p2/MEO/PKGM/jsons/AppPkgInfoModifications.json b/MEC010p2/MEO/PKGM/jsons/AppPkgInfoModifications.json new file mode 100644 index 0000000000000000000000000000000000000000..8db7a2f3d19b6dfe81ec579956a9fa35ac3b70d0 --- /dev/null +++ b/MEC010p2/MEO/PKGM/jsons/AppPkgInfoModifications.json @@ -0,0 +1,3 @@ +{ + "operationalState": "ENABLED" +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/jsons/AppPkgInfoModificationsBadRequest.json b/MEC010p2/MEO/PKGM/jsons/AppPkgInfoModificationsBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..ea646d8ba63b153cf731f0010b0cd17dcdd4942e --- /dev/null +++ b/MEC010p2/MEO/PKGM/jsons/AppPkgInfoModificationsBadRequest.json @@ -0,0 +1,3 @@ +{ + "operationalState": "DISABL" +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/jsons/AppPkgSubscription.json b/MEC010p2/MEO/PKGM/jsons/AppPkgSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..8ab6429b50b8741d2227bbd12a0a3d9d11f8793a --- /dev/null +++ b/MEC010p2/MEO/PKGM/jsons/AppPkgSubscription.json @@ -0,0 +1,10 @@ +{ + "id": "1234", + "subscriptionType": "AppPackageOnBoardingSubscription", + "callbackUri": "http://172.22.1.7:9091", + "_links": { + "self": { + "href": "https://app_lcm/subscriptions/1234" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/jsons/AppPkgSubscriptionBadRequest.json b/MEC010p2/MEO/PKGM/jsons/AppPkgSubscriptionBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..7eb6d6a9b662ee469200a02ce73710c6dab851d4 --- /dev/null +++ b/MEC010p2/MEO/PKGM/jsons/AppPkgSubscriptionBadRequest.json @@ -0,0 +1,10 @@ +{ + "id": "1234", + "subscriptionType": "ON-BOARDING", + "callbackUri": "http://172.22.1.7:9091", + "_links": { + "self": { + "href": "https://app_lcm/subscriptions/1234" + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json b/MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json new file mode 100644 index 0000000000000000000000000000000000000000..b50ced36d2e5ba3de4e469553a795476496793f5 --- /dev/null +++ b/MEC010p2/MEO/PKGM/jsons/CreateAppPackage.json @@ -0,0 +1,28 @@ +{ + "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" + } + } + +} \ No newline at end of file diff --git a/MEO/GRANT/jsons/grantRequests.json b/MEC010p2/MEO/PKGM/jsons/CreateAppPackageBadRequest.json similarity index 50% rename from MEO/GRANT/jsons/grantRequests.json rename to MEC010p2/MEO/PKGM/jsons/CreateAppPackageBadRequest.json index 7a73a41bfdf76d6f793007240d80983a52f15f97..0e0dcd235c4973becf25f38eb4e5bb26e154c86a 100644 --- a/MEO/GRANT/jsons/grantRequests.json +++ b/MEC010p2/MEO/PKGM/jsons/CreateAppPackageBadRequest.json @@ -1,2 +1,3 @@ { + } \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/schemas/AppD.schema.json b/MEC010p2/MEO/PKGM/schemas/AppD.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..c3224523964fde1199ab69f8a05e3c5a42dd3407 --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/AppD.schema.json @@ -0,0 +1,879 @@ +{ + "properties": { + "appDId": { + "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique. See note 1.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDNSRule": { + "description": "Describes DNS rules the MEC application requires.", + "items": { + "properties": { + "dnsRuleId": { + "description": "Identifies the DNS Rule", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "domainName": { + "description": "FQDN of the DNS rule", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ipAddress": { + "description": "IP address given by the DNS rule", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "ipAddressType": { + "description": "Specifies the IP address type", + "type": "string", + "enum": [ + "IP_V6", + "IP_V4" + ] + }, + "ttl": { + "description": "Time-to-live value", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + } + }, + "required": [ + "dnsRuleId", + "domainName", + "ipAddressType", + "ipAddress" + ], + "type": "object", + "x-etsi-ref": "6.2.1.13" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "DNSRuleDescriptor" + }, + "appDVersion": { + "description": "Identifies the version of the application descriptor.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appDescription": { + "description": "Human readable description of the MEC application.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appExtCpd": { + "description": "Describes external interface(s) exposed by this MEC application.", + "items": { + "properties": { + "inherited_attributes": { + "description": "All attributes inherited from Cpd.", + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "inherited_attributes" + }, + "virtualNetworkInterfaceRequirements": { + "description": "Specifies requirements on a virtual network interface realizing the CPs instantiated from this CPD.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N" + } + }, + "required": [ + "inherited_attributes" + ], + "type": "object", + "x-etsi-ref": "6.2.1.6" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "AppExternalCpd" + }, + "appFeatureOptional": { + "description": "Describes features a MEC application may use if available.", + "items": { + "properties": { + "featureName": { + "description": "The name of the feature, for example, UserApps, UEIdentity, etc.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "version": { + "description": "The version of the feature.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "featureName", + "version" + ], + "type": "object", + "x-etsi-ref": "6.2.1.8" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "FeatureDependency" + }, + "appFeatureRequired": { + "description": "Describes features a MEC application requires to run.", + "items": { + "properties": { + "featureName": { + "description": "The name of the feature, for example, UserApps, UEIdentity, etc.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "version": { + "description": "The version of the feature.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "featureName", + "version" + ], + "type": "object", + "x-etsi-ref": "6.2.1.8" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "FeatureDependency" + }, + "appInfoName": { + "description": "Human readable name for the MEC application.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appLatency": { + "properties": { + "maxLatency": { + "description": "The value of the maximum latency in nano seconds tolerated by the MEC application. See note.", + "format": "Uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "required": [ + "maxLatency" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tThe latency is considered to be the one way end-to-end latency between the client application (e.g. in a device) and the service (i.e. the MEC Application instance).", + "x-etsi-ref": "6.2.1.14" + }, + "appName": { + "description": "Name to identify the MEC application.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appProvider": { + "description": "Provider of the application and of the AppD.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appServiceOptional": { + "description": "Describes services a MEC application may use if available.", + "items": { + "properties": { + "requestedPermissions": { + "description": "Requested permissions regarding the access of the application to the service. See clause 8.2 of ETSI GS MEC 009 [4].\nThe format of this attribute is left for the data model design stage.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Not_specified" + }, + "serCategory": { + "description": "See MEC011" + }, + "serName": { + "description": "The name of the service, for example, RNIS, LocationService, etc.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "serTransportDependencies": { + "description": "Indicates transport and serialization format dependencies of consuming the service. Defaults to REST + JSON if absent. See note.", + "items": { + "properties": { + "labels": { + "description": "Set of labels that allow to define groups of transport bindings. The mechanism of the grouping is defined below this table.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "serializers": { + "description": "Information about the serializers in this transport binding, as defined in the SerializerTypes type in ETSI GS MEC 011 [i.4]. Support for at least one of the entries is required in conjunction with the transport.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "SerializerTypes" + }, + "transport": { + "properties": { + "protocol": { + "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "security": { + "description": "See MEC011" + }, + "type": { + "type": "string" + }, + "version": { + "description": "The version of the protocol used.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "type", + "protocol", + "version", + "security" + ], + "type": "object", + "x-etsi-ref": "6.2.1.19" + } + }, + "required": [ + "transport", + "serializers", + "labels" + ], + "type": "object", + "x-etsi-ref": "6.2.1.18" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "TransportDependency" + }, + "version": { + "description": "The version of the service.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "serName", + "version" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tThis attribute indicates groups of transport bindings that a service-consuming MEC application supports for the consumption of the MEC service defined by this ServiceDependency structure. If at least one of the indicated groups is supported by the service it may be consumed by the application.", + "x-etsi-ref": "6.2.1.17" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "ServiceDependency" + }, + "appServiceProduced": { + "description": "Describes services a MEC application is able to produce to the platform or other MEC applications. Only relevant for service-producing apps.", + "items": { + "description": "'The ServiceDescriptor data type describes a MEC service produced by a service-providing MEC application.'", + "type": "object", + "required": [ + "serName", + "version" + ], + "properties": { + "serName": { + "description": "The name of the service, for example, RNIS, LocationService, etc.", + "type": "string" + }, + "serCategory": { + "description": "See MEC011" + }, + "version": { + "description": "The version of the service.", + "type": "string" + }, + "transportsSupported": { + "description": "'Indicates transports and serialization formats supported made available to the service-consuming application. Defaults to REST + JSON if absent.'", + "type": "object", + "required": [ + "featureName", + "version" + ], + "properties": { + "transport": { + "properties": { + "protocol": { + "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "security": { + "description": "See MEC011" + }, + "type": { + "type": "string" + }, + "version": { + "description": "The version of the protocol used.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "type", + "protocol", + "version", + "security" + ], + "type": "object", + "x-etsi-ref": "6.2.1.19" + }, + "serializers": { + "description": "'Information about the serializers in this binding, as defined in the SerializerTypes type in ETSI GS MEC 011 '", + "type": "array", + "minItems": 1, + "items": { + "type": "string" + } + } + } + } + } + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "ServiceDescriptor" + }, + "appServiceRequired": { + "description": "Describes services a MEC application requires to run.", + "items": { + "properties": { + "requestedPermissions": { + "description": "Requested permissions regarding the access of the application to the service. See clause 8.2 of ETSI GS MEC 009 [4].\nThe format of this attribute is left for the data model design stage.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Not_specified" + }, + "serCategory": { + "description": "See MEC011" + }, + "serName": { + "description": "The name of the service, for example, RNIS, LocationService, etc.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "serTransportDependencies": { + "description": "Indicates transport and serialization format dependencies of consuming the service. Defaults to REST + JSON if absent. See note.", + "items": { + "properties": { + "labels": { + "description": "Set of labels that allow to define groups of transport bindings. The mechanism of the grouping is defined below this table.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "serializers": { + "description": "Information about the serializers in this transport binding, as defined in the SerializerTypes type in ETSI GS MEC 011 [i.4]. Support for at least one of the entries is required in conjunction with the transport.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "SerializerTypes" + }, + "transport": { + "properties": { + "protocol": { + "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "security": { + "description": "See MEC011" + }, + "type": { + "type": "string" + }, + "version": { + "description": "The version of the protocol used.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "type", + "protocol", + "version", + "security" + ], + "type": "object", + "x-etsi-ref": "6.2.1.19" + } + }, + "required": [ + "transport", + "serializers", + "labels" + ], + "type": "object", + "x-etsi-ref": "6.2.1.18" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "TransportDependency" + }, + "version": { + "description": "The version of the service.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "serName", + "version" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tThis attribute indicates groups of transport bindings that a service-consuming MEC application supports for the consumption of the MEC service defined by this ServiceDependency structure. If at least one of the indicated groups is supported by the service it may be consumed by the application.", + "x-etsi-ref": "6.2.1.17" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "ServiceDependency" + }, + "appSoftVersion": { + "description": "Identifies the version of software of the MEC application.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appTrafficRule": { + "description": "Describes traffic rules the MEC application requires.", + "items": { + "properties": { + "action": { + "description": "'Identifies the action of the MEC host data plane, when a packet matches the trafficFilter.'", + "type": "string", + "enum": [ + "DROP", + "FORWARD_DECAPSULATED", + "FORWARD_AS_IS", + "PASSTHROUGH", + "DUPLICATED_DECAPSULATED", + "DUPLICATE_AS_IS" + ] + }, + "dstInterface": { + "type": "array", + "minItems": 0, + "maxItems": 2, + "items": { + "properties": { + "dstIPAddress": { + "description": "If the interface type is IP, the destination address identifies the IP address of the destination. Only used for dstInterface.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-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", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "interfaceType": { + "description": "Type of interface.", + "type": "string", + "enum": [ + "TUNNEL", + "MAC", + "IP" + ] + }, + "srcMACAddress": { + "description": "If the interface type is MAC, the source address identifies the MAC address of the interface.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "tunnelInfo": { + "properties": { + "tunnelDstAddress": { + "description": "Destination address of the tunnel.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "tunnelSpecificData": { + "type": "string" + }, + "tunnelSrcAddress": { + "description": "Source address of the tunnel.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "tunnelType": { + "description": "Type of tunnel.", + "type": "string", + "enum": [ + "GTP-U", + "GRE" + ] + } + }, + "required": [ + "tunnelType", + "tunnelDstAddress", + "tunnelSrcAddress" + ], + "type": "object", + "x-etsi-ref": "6.2.1.12" + } + }, + "required": [ + "interfaceType" + ], + "type": "object", + "x-etsi-ref": "6.2.1.11" + } + }, + "filterType": { + "description": "Definition of filter type: per FLOW or PACKET", + "type": "string", + "enum": [ + "FLOW", + "PACKET" + ] + }, + "priority": { + "description": "Priority of this traffic rule. If traffic rule conflicts, the one with higher priority take precedence.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Int" + }, + "trafficFilter": { + "description": "The filter used to identify specific flow/packets that need to be handled by the MEC host.", + "items": { + "properties": { + "dSCP": { + "description": "Used to match all IPv4 packets that have the same DSCP.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "dstAddress": { + "description": "A IP address or a range of IP addresses.For IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses.For IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "dstPort": { + "description": "A port or a range of ports.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "dstTunnelPort": { + "description": "Used for GTP tunnel based traffic rule.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "protocol": { + "description": "Specify the protocol of the traffic filter.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "qCI": { + "description": "Used to match all packets that have the same QCI.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "srcAddress": { + "description": "An IP address or a range of IP addresses.For IPv4, the IP address could be an IP address plus mask, or an individual IP address, or a range of IP addresses.For IPv6, the IP address could be an IP prefix, or a range of IP prefixes.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "srcPort": { + "description": "A port or a range of ports.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "srcTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "srcTunnelPort": { + "description": "Used for GTP tunnel based traffic rule.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "tC": { + "description": "Used to match all IPv6 packets that have the same TC.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Int" + }, + "tag": { + "description": "Used for tag based traffic rule.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + }, + "tgtTunnelAddress": { + "description": "Used for GTP tunnel based traffic rule.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "String" + } + }, + "type": "object", + "x-etsi-ref": "6.2.1.10" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "TrafficFilter" + }, + "trafficRuleId": { + "description": "Identifies the traffic rule.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "trafficRuleId", + "filterType", + "priority", + "trafficFilter", + "action" + ], + "type": "object", + "x-etsi-ref": "6.2.1.9" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "TrafficRuleDescriptor" + }, + "changeAppInstanceStateOpConfig": { + "description": "NFV", + "type": "string" + }, + "mecVersion": { + "description": "Identifies version(s) of MEC system compatible with the MEC application described in this version of the AppD.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "swImageDescriptor": { + "description": "Ref NFV", + "type": "string" + }, + "terminateAppInstanceOpConfig": { + "description": "NFV", + "type": "string", + "x-etsi-ref": "6.2.2.9" + }, + "transportDependencies": { + "description": "Transports, if any, that this application requires to be provided by the platform. These transports will be used by the application to deliver services provided by this application. Only relevant for service-producing apps. See note 2.", + "items": { + "properties": { + "labels": { + "description": "Set of labels that allow to define groups of transport bindings. The mechanism of the grouping is defined below this table.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "serializers": { + "description": "Information about the serializers in this transport binding, as defined in the SerializerTypes type in ETSI GS MEC 011 [i.4]. Support for at least one of the entries is required in conjunction with the transport.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "SerializerTypes" + }, + "transport": { + "properties": { + "protocol": { + "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "security": { + "description": "See MEC011" + }, + "type": { + "type": "string" + }, + "version": { + "description": "The version of the protocol used.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "type", + "protocol", + "version", + "security" + ], + "type": "object", + "x-etsi-ref": "6.2.1.19" + } + }, + "required": [ + "transport", + "serializers", + "labels" + ], + "type": "object", + "x-etsi-ref": "6.2.1.18" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "TransportDependency" + }, + "virtualComputeDescriptor": { + "description": "Ref NFV", + "type": "string" + }, + "virtualStorageDescriptor": { + "description": "Defines descriptors of virtual storage resources to be used by the MEC application.", + "items": { + "description": "Ref NFV", + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "VirtualStorageDescriptor" + } + }, + "required": [ + "appDId", + "appName", + "appProvider", + "appSoftVersion", + "appDVersion", + "mecVersion", + "appDescription", + "virtualComputeDescriptor", + "swImageDescriptor" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tThe appDId shall be used as the unique identifier of the application package that contains this AppD.\nNOTE 2:\tThis attribute indicates groups of transport bindings which a service-producing MEC application requires to be supported by the platform in order to be able to produce its services. At least one of the indicated groups needs to be supported to fulfil the requirements.", + "x-etsi-ref": "6.2.1.2" +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/schemas/AppPkgInfo.schema.json b/MEC010p2/MEO/PKGM/schemas/AppPkgInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..06783a72a2489c5dcc4126c4d10d20600d15106c --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/AppPkgInfo.schema.json @@ -0,0 +1,159 @@ +{ + "description": "'The data type AppPkgInfo represents the parameters for an application package resource'", + "type": "object", + "required": [ + "id", + "appDId", + "appName", + "appSoftwareVersion", + "appDVersion", + "checksum", + "softwareImages", + "onboardingState", + "operationalState", + "usageState", + "_links" + ], + "properties": { + "id": { + "description": "Identifier of the onboarded application package.", + "type": "string" + }, + "appDId": { + "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique.", + "type": "string" + }, + "appProvider": { + "description": "Provider of the application and of the AppD.", + "type": "string" + }, + "appName": { + "description": "Name to identify the MEC application.", + "type": "string" + }, + "appSoftwareVersion": { + "description": "Software version of the application. This is updated when there is any change to the software in the onboarded application package.", + "type": "string" + }, + "appDVersion": { + "description": "Identifies the version of the application descriptor.", + "type": "string" + }, + "checksum": { + "description": "", + "properties": { + "algorithm": { + "description": " Name of the algorithm used to generate the checksum, as defined in ETSI GS NFV-SOL 004. For example, SHA-256, SHA-512.", + "type": "string" + }, + "hash": { + "description": "'String 1 The hexadecimal value of the checksum'", + "type": "string" + } + }, + "required": [ + "algorithm", + "hash" + ], + "type": "object" + }, + "softwareImages": { + "description": "Information of application software image in application package. Type is TBD" + }, + "additionalArtifacts": { + "description": "Additional information of application package artifacts that are not application software images. Type is TBD" + }, + "onboardingState": { + "description": "Onboarding state of application package", + "type": "string", + "format": "enum", + "enum": [ + "CREATED", + "UPLOADING", + "PROCESSING", + "ONBOARDED" + ] + }, + "operationalState": { + "description": "Operational state of the onboarded application package: •ENABLED: the application package can be used for instantiation of new application instances. •DISABLED: the application package cannot be used for further application instantiation requests.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "usageState": { + "description": "Usage state of the onboarded instance of the application package", + "type": "string", + "format": "enum", + "enum": [ + "IN_USE", + "NOT_IN_USE" + ] + }, + "userDefinedData": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self", + "appD", + "appPkgContent" + ], + "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.5.2" + }, + "appD": { + "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.5.2" + }, + "appPkgContent": { + "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.5.2" + } + } + } + } + } \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/schemas/AppPkgInfoModifications.schema.json b/MEC010p2/MEO/PKGM/schemas/AppPkgInfoModifications.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..508820625d91b1f7f86df492ec632488228c1e04 --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/AppPkgInfoModifications.schema.json @@ -0,0 +1,16 @@ +{ + "description": "'The data type represents the operational state for an application package resource'", + "type": "object", + "required": [ + "operationalState" + ], + "properties": { + "operationalState": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/schemas/AppPkgNotification.schema.json b/MEC010p2/MEO/PKGM/schemas/AppPkgNotification.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..5a9542ed0c382a9cdcc7512724691b2534a6d760 --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/AppPkgNotification.schema.json @@ -0,0 +1,98 @@ +{ + "description": "'This data type represents an application package management notification for informing the subscribers about onboarding application package resources. The notification is triggered when a new application package is onboarded'", + "type": "object", + "required": [ + "id", + "notificationType", + "subscriptionId", + "timeStamp", + "appPkgId", + "appDId", + "operationalState", + "_links" + ], + "properties": { + "id": { + "description": "''", + "type": "string" + }, + "notificationType": { + "description": "Discriminator for the different notification types", + "type": "string", + "enum": [ + "AppPackageOnBoarded", + "AppPacakgeEnabled", + "AppPacakgeDisabled", + "AppPackageDeleted" + ] + }, + "subscriptionId": { + "description": "Identifier of the subscription related to this notification.", + "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.2.5.4" + }, + "appPkgId": { + "description": "Identifier of the onboarded application package.", + "type": "string" + }, + "appDId": { + "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique.", + "type": "string" + }, + "operationalState": { + "type": "string", + "enum": [ + "DISABLED", + "ENABLED" + ] + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "subscription" + ], + "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.5.2" + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/schemas/AppPkgSubscriptionInfo.schema.json b/MEC010p2/MEO/PKGM/schemas/AppPkgSubscriptionInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..13f916143cb0c2dd2648f8d3e8f7bcd392d904f8 --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/AppPkgSubscriptionInfo.schema.json @@ -0,0 +1,55 @@ +{ + "description": "'The data type represents a subscription to notification of application package management for the onboarding, or operational state change of application package'", + "type": "object", + "required": [ + "id", + "subscriptionType", + "callbackUri", + "_links" + ], + "properties": { + "id": { + "description": "''", + "type": "string" + }, + "subscriptionType": { + "description": "Subscribed notification type.", + "type": "string", + "enum": [ + "AppPackageOnBoardingSubscription", + "AppPacakgeOperationChange", + "AppPackageDeletion" + ] + }, + "callbackUri": { + "description": "The URI of the endpoint for the notification to be sent to.", + "type": "string", + "format": "uri" + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self" + ], + "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.5.2" + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/schemas/AppPkgSubscriptionLinkList.schema.json b/MEC010p2/MEO/PKGM/schemas/AppPkgSubscriptionLinkList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..ccad36e227f57184dae91c93c8df9b8052da8e65 --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/AppPkgSubscriptionLinkList.schema.json @@ -0,0 +1,61 @@ +{ + "description": "'The data type represents a subscription link list of notification on application package management'", + "type": "object", + "required": [ + "_links" + ], + "properties": { + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self" + ], + "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.5.2" + }, + "subscriptions": { + "type": "array", + "items": { + "description": "'The data type represents the input parameters of \"subscription operation\" to notification of application package management for the onboarding, or operational state change of application package.'", + "type": "object", + "required": [ + "href", + "subsctiptionType" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + }, + "subsctiptionType": { + "description": "'Subscribed notification type'", + "type": "string", + "enum": [ + "AppPackageOnBoardingSubscription", + "AppPacakgeOperationChange", + "AppPackageDeletion" + ] + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEO/PKGM/schemas/CreateAppPkg.schema.json b/MEC010p2/MEO/PKGM/schemas/CreateAppPkg.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..ffbb40b6c533e84e53ab0d12ab238a9dfd5cb250 --- /dev/null +++ b/MEC010p2/MEO/PKGM/schemas/CreateAppPkg.schema.json @@ -0,0 +1,57 @@ +{ + "properties": { + "appPkgName": { + "description": "Name of the application package to be onboarded.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appPkgPath": { + "type": "string" + }, + "appPkgVersion": { + "description": "Version of the application package to be onboarded.\nThe appPkgName with appPkgVersion can be used to uniquely identify the application package.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "appProvider": { + "description": "The provider's name of the application package to be onboarded.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "checksum": { + "description": "", + "properties": { + "algorithm": { + "description": " Name of the algorithm used to generate the checksum, as defined in ETSI GS NFV-SOL 004. For example, SHA-256, SHA-512.", + "type": "string" + }, + "hash": { + "description": "'String 1 The hexadecimal value of the checksum'", + "type": "string" + } + }, + "required": [ + "algorithm", + "hash" + ], + "type": "object" + }, + "userDefinedData": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + } + }, + "required": [ + "appPkgName", + "appPkgVersion", + "checksum", + "appPkgPath" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tIt is for further study how to convey appPkgPath, and align with ETSI GS NFV-SOL 005 [i.7].", + "x-etsi-ref": "6.2.3.2" +} \ No newline at end of file diff --git a/MEC010p2/MEPM/LCM/PlatformConfiguration.robot b/MEC010p2/MEPM/LCM/PlatformConfiguration.robot new file mode 100644 index 0000000000000000000000000000000000000000..00632c9e56c817d045139f181cd1149b6233f2ef --- /dev/null +++ b/MEC010p2/MEPM/LCM/PlatformConfiguration.robot @@ -0,0 +1,58 @@ +''[Documentation] robot --outputdir ./outputs ./PlatformConfiguration.robot +... Test Suite to validate Platform Configuration operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../GenericKeywords.robot +Library REST ${MEPM_SCHEMA}://${MEPM_HOST}:${MEPM_PORT} ssl_verify=false +Library BuiltIn +Library OperatingSystem + + +*** Test Cases *** +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 + + Request to configure Platform ${APP_INSTANCE_ID} ConfigPlatformForAppRequest + Check HTTP Response Status Code Is 202 + Check Response Header contains Location + + +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 + + Request to configure Platform ${APP_INSTANCE_ID} ConfigPlatformForAppRequestBadRequest + Check HTTP Response Status Code Is 400 + + + +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 + + Request to configure Platform ${NOT_EXISTING_APP_INSTANCE_ID} ConfigPlatformForAppRequest + Check HTTP Response Status Code Is 404 + + +*** Keywords *** +Request to configure Platform + [Argument] ${appInstanceId} ${content} + Log Request to configure platform + 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/${appInstanceId}/configure_platform_for_app ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + \ No newline at end of file diff --git a/MEC010p2/MEPM/LCM/environment/variables.txt b/MEC010p2/MEPM/LCM/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..705a3af62afa4105710382003322fc0fee6ed86d --- /dev/null +++ b/MEC010p2/MEPM/LCM/environment/variables.txt @@ -0,0 +1,15 @@ +*** Variables *** +# Generic variables +${MEPM_SCHEMA} http +${MEPM_HOST} 127.0.0.1 +${MEPM_PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} app_lcm +${apiVersion} v1 + + +# Specific variables +${APP_INSTANCE_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${NOT_EXISTING_APP_INSTANCE_ID} NOT_EXISTING_APP_INSTANCE_ID \ No newline at end of file diff --git a/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequest.json b/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..2c6e92f9ddbff1f8f6eb90a1a88d6a48d15aa7f2 --- /dev/null +++ b/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequest.json @@ -0,0 +1,5 @@ +{ + "appServiceRequired": [{ + "sernName": "serviceName" + }] +} \ No newline at end of file diff --git a/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequestBadRequest.json b/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequestBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..79d582966112b245b96d3b614165c24a1c942873 --- /dev/null +++ b/MEC010p2/MEPM/LCM/json/ConfigPlatformForAppRequestBadRequest.json @@ -0,0 +1,5 @@ +{ + "appServiceWrongRequired": [{ + "sernName": "serviceName" + }] +} \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/AppPkgMgt.robot b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot new file mode 100644 index 0000000000000000000000000000000000000000..e45756f868b4bca437d504afed47fbc7076bb676 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/AppPkgMgt.robot @@ -0,0 +1,446 @@ +''[Documentation] robot --outputdir ./outputs ./AppPkgMgt.robot +... Test Suite to validate 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 + + +*** 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 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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + GET all APP Packages + Check HTTP Response Status Code Is 200 + FOR ${appPkg} IN @{response['body']} + Validate Json AppPkgInfo.schema.json ${appPkg} + END + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + GET all onboarded APP Packages + Check HTTP Response Status Code Is 200 + FOR ${appPkg} IN @{response['body']} + Validate Json AppPkgInfo.schema.json ${appPkg} + END + +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 + [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 + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + GET an APP Package identified by ${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']} ${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 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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + GET an onboarded APP Package identified by ${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']} ${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 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 + [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 + + +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 + [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} + + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Send a request for a subscription AppPkgSubscriptionBadRequest + 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 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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get all APP Package subscriptions + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get an individual APP Package subscriptions ${SUBSCRIPTION_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} + + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + 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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Delete an App Package Subscription identified by ${SUBSCRIPTION_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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + +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 + [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 2.2.1, clause 7.3.6.3.2 + ... ETSI GS MEC 010-2 2.2.1, clause 6.2.1.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get AppD by ${APPD_ID} + Check HTTP Response Status Code Is 200 + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get AppD by ${NON_EXISTENT_APPD_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 2.2.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 2.2.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 2.2.1, clause 7.3.7.3.2 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get application package by AppId ${APP_PKG_ID} + Check HTTP Response Status Code Is 200 + +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 + [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS + Get onboarded application package by AppdId ${APPD_ID} + Check HTTP Response Status Code Is 200 + + +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 + 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 2.2.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 + Log Getting all App Packages + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Post ${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 + [Arguments] ${key} ${value} + Log Getting all App Packages using filtering parameters + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + 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 + 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 + ${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":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/onboarded_app_packages/${appdId}/package_content + ${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 + 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} + +Get all APP Package subscriptions + Log Getting list of subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + +Get an individual APP Package subscriptions + [Arguments] ${subId} + Log Getting an individual subscription + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Delete an App Package Subscription identified by + [Arguments] ${subId} + Log Deleting a subscription + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} + ${output}= Output response + Set Suite Variable ${response} ${output} diff --git a/MEO/UEAPPCTX/README.md b/MEC010p2/MEPM/PKGM/README.md similarity index 100% rename from MEO/UEAPPCTX/README.md rename to MEC010p2/MEPM/PKGM/README.md diff --git a/MEC010p2/MEPM/PKGM/environment/variables.txt b/MEC010p2/MEPM/PKGM/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..b71bde6b1c7d229cc9a662b988a2bdf90fb903ae --- /dev/null +++ b/MEC010p2/MEPM/PKGM/environment/variables.txt @@ -0,0 +1,25 @@ +*** Variables *** +# Generic variables +${MEPM_SCHEMA} http +${MEPM_HOST} 127.0.0.1 +${MEPM_PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} app_pkgm +${apiVersion} v1 +${ACCEPTED_CONTENT_TYPE} text/plain + + +# Specific variables +${APP_PKG_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APPD_ID} appdId +${NOT_EXISTING_APP_INSTANCE_ID} NOT_EXISTING_APP_INSTANCE_ID +${CALLBACK_URI} http://some.url/somepath +${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${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 diff --git a/MEC010p2/MEPM/PKGM/jsons/AppPkgSubscription.json b/MEC010p2/MEPM/PKGM/jsons/AppPkgSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..391ec3ae2f477f7f357b09484ef600e737a74127 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/jsons/AppPkgSubscription.json @@ -0,0 +1,4 @@ +{ + "callbackUri": "http://some.url/somepath", + "subsctiptionType": "AppPackageOnBoardingSubscription" +} \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/jsons/AppPkgSubscriptionBadRequest.json b/MEC010p2/MEPM/PKGM/jsons/AppPkgSubscriptionBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..a94317ce6cacdf65353b4253143d74d29501349e --- /dev/null +++ b/MEC010p2/MEPM/PKGM/jsons/AppPkgSubscriptionBadRequest.json @@ -0,0 +1,4 @@ +{ + "callbackUri": "http://some.url/somepath", + "subscriptionType": "ON-BOARDING" +} \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/schemas/AppPkgInfo.schema.json b/MEC010p2/MEPM/PKGM/schemas/AppPkgInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3a9a46964209c95aae5f142f113468d28c3e32e6 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/schemas/AppPkgInfo.schema.json @@ -0,0 +1,169 @@ +{ + "description": "'The data type AppPkgInfo represents the parameters for an application package resource'", + "type": "object", + "required": [ + "id", + "appDId", + "appName", + "appSoftwareVersion", + "appDVersion", + "checksum", + "softwareImages", + "onboardingState", + "operationalState", + "usageState", + "mecInfo", + "_links" + ], + "properties": { + "id": { + "description": "Identifier of the onboarded application package.", + "type": "string" + }, + "appDId": { + "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique.", + "type": "string" + }, + "appProvider": { + "description": "Provider of the application and of the AppD.", + "type": "string" + }, + "appName": { + "description": "Name to identify the MEC application.", + "type": "string" + }, + "appSoftwareVersion": { + "description": "Software version of the application. This is updated when there is any change to the software in the onboarded application package.", + "type": "string" + }, + "appDVersion": { + "description": "Identifies the version of the application descriptor.", + "type": "string" + }, + "checksum": { + "description": "", + "properties": { + "algorithm": { + "description": " Name of the algorithm used to generate the checksum, as defined in ETSI GS NFV-SOL 004. For example, SHA-256, SHA-512.", + "type": "string" + }, + "hash": { + "description": "'String 1 The hexadecimal value of the checksum'", + "type": "string" + } + }, + "required": [ + "algorithm", + "hash" + ], + "type": "object" + }, + "softwareImages": { + "description": "Information of application software image in application package. Type is TBD" + }, + "additionalArtifacts": { + "description": "Additional information of application package artifacts that are not application software images. Type is TBD" + }, + "onboardingState": { + "description": "Onboarding state of application package", + "type": "string", + "format": "enum", + "enum": [ + "CREATED", + "UPLOADING", + "PROCESSING", + "ONBOARDED" + ] + }, + "operationalState": { + "description": "Operational state of the onboarded application package: •ENABLED: the application package can be used for instantiation of new application instances. •DISABLED: the application package cannot be used for further application instantiation requests.", + "type": "string", + "enum": [ + "ENABLED", + "DISABLED" + ] + }, + "usageState": { + "description": "Usage state of the onboarded instance of the application package", + "type": "string", + "format": "enum", + "enum": [ + "IN_USE", + "NOT_IN_USE" + ] + }, + "mecInfo": { + "description": "", + "type": "array", + "items": { + "type": "string" + } + }, + + + "userDefinedData": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self", + "appD", + "appPkgContent" + ], + "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.5.2" + }, + "appD": { + "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.5.2" + }, + "appPkgContent": { + "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.5.2" + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/schemas/AppPkgSubscriptionInfo.schema.json b/MEC010p2/MEPM/PKGM/schemas/AppPkgSubscriptionInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..81141b988b03cf3ba6b877409b214a86218f0808 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/schemas/AppPkgSubscriptionInfo.schema.json @@ -0,0 +1,55 @@ +{ + "description": "'The data type represents a subscription to notification of application package management for the onboarding, or operational state change of application package'", + "type": "object", + "required": [ + "id", + "subscriptionType", + "callbackUri", + "_links" + ], + "properties": { + "id": { + "description": "''", + "type": "string" + }, + "subscriptionType": { + "description": "Subscribed notification type.", + "type": "string", + "enum": [ + "AppPackageOnBoardingSubscription", + "AppPacakgeOperationChangeSubscription", + "AppPackageDeletionSubscription" + ] + }, + "callbackUri": { + "description": "The URI of the endpoint for the notification to be sent to.", + "type": "string", + "format": "uri" + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self" + ], + "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.5.2" + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEPM/PKGM/schemas/AppPkgSubscriptionLinkList.schema.json b/MEC010p2/MEPM/PKGM/schemas/AppPkgSubscriptionLinkList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..84302c82019c577ecec7e205a1a3f5143cba5c95 --- /dev/null +++ b/MEC010p2/MEPM/PKGM/schemas/AppPkgSubscriptionLinkList.schema.json @@ -0,0 +1,61 @@ +{ + "description": "'The data type represents a subscription link list of notification on application package management'", + "type": "object", + "required": [ + "_links" + ], + "properties": { + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self" + ], + "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.5.2" + }, + "subscriptions": { + "type": "array", + "items": { + "description": "'The data type represents the input parameters of \"subscription operation\" to notification of application package management for the onboarding, or operational state change of application package.'", + "type": "object", + "required": [ + "href", + "subsctiptionType" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + }, + "subsctiptionType": { + "description": "'Subscribed notification type'", + "type": "string", + "enum": [ + "AppPackageOnBoardingSubscription", + "AppPacakgeOperationChangeSubscription", + "AppPackageDeletionSubscription" + ] + } + } + } + } + } + } + } + } \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/AppInstanceMgmt.robot b/MEC010p2/MEX/LCM/AppInstanceMgmt.robot new file mode 100644 index 0000000000000000000000000000000000000000..45d7cb0c0781a7e358e2e4211306c25365431e61 --- /dev/null +++ b/MEC010p2/MEX/LCM/AppInstanceMgmt.robot @@ -0,0 +1,568 @@ +''[Documentation] robot --outputdir ./outputs ./AppInstanceMgmt.robot +... Test Suite to validate App Instance Management operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../GenericKeywords.robot +Library REST ${MEPM_SCHEMA}://${MEPM_HOST}:${MEPM_PORT} ssl_verify=false +Library BuiltIn +Library OperatingSystem + + +*** 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 + Create new App Instance CreateAppInstanceRequest + Check HTTP Response Status Code Is 201 + 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']['instantiationState']} NOT_INSTANTIATED + + +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 + 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 + GET all APP Instances + Check HTTP Response Status Code Is 200 + + FOR ${appInstance} IN @{response['body']} + Validate Json AppInstanceInfo.schema.json ${appInstance} + Log ${appInstance} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${appInstance}[id] ${APP_INSTANCE_ID} + Exit For Loop If ${passed} + END + Should Be True ${passed} + + + +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} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AppInstanceInfo + Log ${response['body']} + Should Be Equal As Strings ${response['body']['id']} ${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 + 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} + 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 + Delete APP Instance ${NOT_EXISTING_APP_INSTANCE_ID} + Check HTTP Response Status Code Is 404 + + +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 + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + +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 + Instantiate App Request ${APP_INSTANCE_ID} InstantiateAppRequestBadRequest + Check HTTP Response Status Code Is 400 + + + +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 + Instantiate App Request ${NOT_EXISTING_APP_INSTANCE_ID} InstantiateAppRequest + Check HTTP Response Status Code Is 404 + + + +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 + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + +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 + Terminate App Request ${APP_INSTANCE_ID} TerminateAppRequestBadRequest + Check HTTP Response Status Code Is 400 + + +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 + Terminate App Request ${NOT_EXISTING_APP_INSTANCE_ID} TerminateAppRequest + Check HTTP Response Status Code Is 404 + + +TPC_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 + Operate App Request ${APP_INSTANCE_ID} OperateAppRequest + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + + +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 + 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 + Operate App Request ${NOT_EXISTING_APP_INSTANCE_ID} OperateAppRequest + Check HTTP Response Status Code Is 404 + + + +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 + 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} + 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} + + +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 + GET App LCM op Occ ${NOT_EXISTING_APP_LCM_OP_OCC_ID} + Check HTTP Response Status Code Is 404 + + + + +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 + + 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} + + + +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 + + 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 + + Send a request for retrieving all subscriptions + Check HTTP Response Status Code Is 200 + Validate Json AppInstanceSubscriptionLinkList.schema.json ${response}[body] + +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} + Check HTTP Response Status Code Is 200 + Should Be Equal As Strings ${response['body']['id']} ${SUBSCRIPTION_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 + + Send a request for retrieving a subscription ${NOT_EXISTING_SUBSCRIPTION_ID} + Check HTTP Response Status Code Is 404 + + +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} + 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 + 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 + Check HTTP Response Status Code Is 202 + + +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 + Check HTTP Response Status Code Is 400 + +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 + Cancel on going LCM Operation ${NOT_EXISTING_APP_LCM_OP_OCC_ID} CancelMode + Check HTTP Response Status Code Is 404 + + + +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} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is AppLcmOpOcc + + +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 + Fail on going LCM Operation ${NOT_EXISTING_APP_LCM_OP_OCC_ID} + Check HTTP Response Status Code Is 404 + + +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 + Retry on going LCM Operation ${APP_LCM_OP_OCC_ID} + Check HTTP Response Status Code Is 200 + + +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 + Retry on going LCM Operation ${NOT_EXISTING_APP_LCM_OP_OCC_ID} + 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} + + +GET all APP Instances + Log Get all App Instances + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/app_instances + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +GET APP Instance + [Arguments] ${app_instance_id} + Log Get single App Instance + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/app_instances/${app_instance_id} + ${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} + + + +Instantiate App Request + [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}/app_instances/${appInstanceId}/instantiate ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Terminate App Request + [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}/app_instances/${appInstanceId}/terminate ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Operate App Request + [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}/app_instances/${appInstanceId}/operate ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +GET all App LCM op Occs + Log Get all App LCM Operation occurrences + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/app_lcm_op_occs + ${output}= Output response + Set Suite Variable ${response} ${output} + + + + +GET App LCM op Occ + [Arguments] ${appLcmOpOccsId} + Log Get App LCM Operation occurrence + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/app_lcm_op_occs/${appLcmOpOccsId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Send a request for a subscription + [Arguments] ${content} + Log Creating a new subscription + 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} + + + + +Send a request for retrieving all subscriptions + Log Get all subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Send a request for retrieving a subscription + [Arguments] ${subscriptionId} + Log Get all subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Send a request for deleting a subscription + [Arguments] ${subscriptionId} + Log Get all subscriptions + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Cancel on going LCM Operation + [Arguments] ${appLcmOccOpId} ${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}/app_lcm_op_occs/${appLcmOccOpId}/cancel ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Fail on going LCM Operation + [Arguments] ${appLcmOccOpId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Post ${apiRoot}/${apiName}/${apiVersion}/app_lcm_op_occs/${appLcmOccOpId}/fail + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retry on going LCM Operation + [Arguments] ${appLcmOccOpId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Post ${apiRoot}/${apiName}/${apiVersion}/app_lcm_op_occs/${appLcmOccOpId}/retry + ${output}= Output response + Set Suite Variable ${response} ${output} diff --git a/MEC010p2/MEX/LCM/environment/variables.txt b/MEC010p2/MEX/LCM/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..a82e2bb9ad0cdbbcd5957a008babca8a861afa56 --- /dev/null +++ b/MEC010p2/MEX/LCM/environment/variables.txt @@ -0,0 +1,23 @@ +*** Variables *** +# Generic variables +${MEPM_SCHEMA} http +${MEPM_HOST} 127.0.0.1 +${MEPM_PORT} 8081 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} app_lcm +${apiVersion} v1 + +# Specific variables +${NOT_EXISTING_APP_INSTANCE_ID} NOT_EXISTING_APP_INSTANCE_ID +${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f +${APPD_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 +${APP_LCM_OP_OCC_ID} abceee2b-6e50-4f33-ab09-8bf05850abcd +${NOT_EXISTING_APP_LCM_OP_OCC_ID} NOT_EXISTING_APP_LCM_OP_OCC_ID +${NON_EXISTENT_APP_PKG_ID} NON_EXISTENT_APP_PKG_ID +${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 diff --git a/MEC010p2/MEX/LCM/jsons/AppInstSubscriptionRequest.json b/MEC010p2/MEX/LCM/jsons/AppInstSubscriptionRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..07355404832bab16f5186cceb1ff2d831f773b8a --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/AppInstSubscriptionRequest.json @@ -0,0 +1,4 @@ +{ + "subscriptionType": "AppInstanceStateChangeSubscription", + "callbackUri": "https://callback.uri/path" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/AppInstSubscriptionRequestBadRequest.json b/MEC010p2/MEX/LCM/jsons/AppInstSubscriptionRequestBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..52fa7c3c1717a12a0d5c94828db4a5f89ce543e6 --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/AppInstSubscriptionRequestBadRequest.json @@ -0,0 +1,4 @@ +{ + "callbackERRORUri": "AppInstanceStateChangeSubscription", + "callbackUri": "https://callback.uri/path" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/CancelMode.json b/MEC010p2/MEX/LCM/jsons/CancelMode.json new file mode 100644 index 0000000000000000000000000000000000000000..1efafeb3813b87792e3a988cfa07638797744f78 --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/CancelMode.json @@ -0,0 +1,3 @@ +{ + "CancelMode": "GRACEFUL" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/CancelModeBadRequest.json b/MEC010p2/MEX/LCM/jsons/CancelModeBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..23f30ebf47d49cf4d1e11fb4b7c8240cba99ef16 --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/CancelModeBadRequest.json @@ -0,0 +1,3 @@ +{ + "CancelMode": "GRACEFULLL" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/CreateAppInstanceRequest.json b/MEC010p2/MEX/LCM/jsons/CreateAppInstanceRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..3691ba6ce55af3f45f518ea1313f56a99e904b5a --- /dev/null +++ b/MEC010p2/MEX/LCM/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/MEC010p2/MEX/LCM/jsons/CreateAppInstanceRequestBadRequest.json b/MEC010p2/MEX/LCM/jsons/CreateAppInstanceRequestBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..3eedcaadc10b169095cb92ec74af9add17663842 --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/CreateAppInstanceRequestBadRequest.json @@ -0,0 +1,5 @@ +{ + "appDDDId": "e0deee2b-6e50-4f33-ab09-8bf0585025d3", + "appInstanceDescription": "description", + "appInstanceName": "name" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/InstantiateAppRequest.json b/MEC010p2/MEX/LCM/jsons/InstantiateAppRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..cfcb77c942bfa7c6cf6c191484be3cc9685db0d8 --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/InstantiateAppRequest.json @@ -0,0 +1,9 @@ +{ + "selectedMECHostInfo": [{ + "hostId": { + "key1": 123, + "key2": 456 + }, + "hostName": "hostname" + }] +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/InstantiateAppRequestBadRequest.json b/MEC010p2/MEX/LCM/jsons/InstantiateAppRequestBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..034b3acf620662ab3dd5c8505f32300e42697b6c --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/InstantiateAppRequestBadRequest.json @@ -0,0 +1,10 @@ +{ + "appERRORId": "1234", + "selectedMECHostInfo": [{ + "hostId": { + "key1": 123, + "key2": 456 + }, + "hostName": "hostname" + }] +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/OperateAppRequest.json b/MEC010p2/MEX/LCM/jsons/OperateAppRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..472fae858503ec60f4089d2094646c0da0a67d3c --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/OperateAppRequest.json @@ -0,0 +1,3 @@ +{ + "changeStateTo": "STARTED" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/OperateAppRequestBadRequest.json b/MEC010p2/MEX/LCM/jsons/OperateAppRequestBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..e881c4e59e38e67c563e5570e59e9d79384322a4 --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/OperateAppRequestBadRequest.json @@ -0,0 +1,3 @@ +{ + "changeERRORStateTo": "STARTED" +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/TerminateAppRequest.json b/MEC010p2/MEX/LCM/jsons/TerminateAppRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..9066b57e5772a41e010cc606f8bc5f386f8e7e5a --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/TerminateAppRequest.json @@ -0,0 +1,4 @@ +{ + "terminationType": "FORCEFUL", + "gracefulTerminationTimeout": 0 +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/jsons/TerminateAppRequestBadRequest.json b/MEC010p2/MEX/LCM/jsons/TerminateAppRequestBadRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..1aceaba1be3966c34d3ff406c28737d3700cd2d6 --- /dev/null +++ b/MEC010p2/MEX/LCM/jsons/TerminateAppRequestBadRequest.json @@ -0,0 +1,4 @@ +{ + "terminationERRORType": "FORCEFUL", + "gracefulTerminationTimeout": 0 +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/schemas/AppInstSubscriptionRequest.schema.json b/MEC010p2/MEX/LCM/schemas/AppInstSubscriptionRequest.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..b807f5362ce7cae42feeb41c461fb935511357be --- /dev/null +++ b/MEC010p2/MEX/LCM/schemas/AppInstSubscriptionRequest.schema.json @@ -0,0 +1,104 @@ +{ + "type": "object", + "required": [ + "subscriptionType", + "callbackUri" + ], + "properties": { + "subscriptionType": { + "description": "Shall be set to AppInstanceStateChange.", + "type": "string" + }, + "callbackUri": { + "description": "The URI of the endpoint for the notification to be sent to.", + "type": "string", + "format": "uri" + }, + "appInstanceState": { + "description": "Only send notifications for application instances that are in one of the states listed in this attribute. If this attribute is absent, match all states.", + "type": "string", + "format": "enum", + "enum": [ + "NOT_INSTANTIATED", + "STARTED", + "STOPPED" + ] + }, + "appInstanceSubscriptionFilter": { + "description": "'This data type represents subscription filter criteria to match application instances. '", + "type": "object", + "required": [ + "appInstSelectorType" + ], + "properties": { + "appInstSelectorType": { + "description": "0 = void", + "type": "string", + "enum": [ + "VOID", + "APP_IDENTITY", + "APP_NAME", + "APP_D_ID", + "APP_FROM_PROVIDER" + ] + }, + "appInstances": { + "type": "array", + "items": { + "description": "If appInstIdSelector = APP_IDENTITY match existing application instances with an application instance identifier listed in this attribute.", + "type": "string" + } + }, + "appsFromProviders": { + "type": "array", + "items": { + "description": "'Present only if appInstIdSelector = APP_FROM_PROVIDER. Match existing application instances, or those created in the future whilst the subscription is active, that belong to applications from certain providers.'", + "type": "object", + "required": [ + "appProvider" + ], + "properties": { + "appProvider": { + "description": "Provider of the application and of the AppD.", + "type": "string" + }, + "appProducts": { + "description": "'If present, match application instances that belong to application products with certain product names, from one particular provider.'", + "type": "object", + "required": [ + "appName" + ], + "properties": { + "appName": { + "description": "Name to identify the MEC application.", + "type": "string" + }, + "versions": { + "description": "'If present, match application instances that belong to application products with certain versions and a certain product name, from one particular provider.'", + "type": "object", + "required": [ + "appSoftVersion" + ], + "properties": { + "appSoftVersion": { + "description": "Identifies the version of software of the MEC application.", + "type": "string" + }, + "appDVersion": { + "type": "array", + "items": { + "description": "Identifies the version of the application descriptor.", + "type": "string" + } + } + } + } + } + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/schemas/AppInstanceInfo.schema.json b/MEC010p2/MEX/LCM/schemas/AppInstanceInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..875a946a760a0ffb67f5573eb66ecad0e08b0cfa --- /dev/null +++ b/MEC010p2/MEX/LCM/schemas/AppInstanceInfo.schema.json @@ -0,0 +1,197 @@ + { + "description": "'The data type of AppInstanceInfo represents the parameters of instantiated application instance resources.'", + "type": "object", + "required": [ + "id", + "appDId", + "appProvider", + "appName", + "appSoftVersion", + "appDVersion", + "appPkgId", + "instantiationState", + "_links" + ], + "properties": { + "id": { + "description": "Identifier of application instance.", + "type": "string" + }, + "appInstanceName": { + "description": "Name of the application instance.", + "type": "string" + }, + "appInstanceDescription": { + "description": "Human-readable description of the application instance to be created.", + "type": "string" + }, + "appDId": { + "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique.", + "type": "string" + }, + "appProvider": { + "description": "Provider of the application and of the AppD.", + "type": "string" + }, + "appName": { + "description": "Name to identify the MEC application.", + "type": "string" + }, + "appSoftVersion": { + "description": "Identifies the version of software of the MEC application.", + "type": "string" + }, + "appDVersion": { + "description": "Identifies the version of the application descriptor.", + "type": "string" + }, + "appPkgId": { + "description": "Identifier of the onboarded application package.", + "type": "string" + }, + "vimConnectionInfo": { + "type": "array", + "items": { + "properties": { + "accessInfo": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "extra": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "id": { + "description": "The identifier of the VIM Connection. This identifier is managed by the MEO.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "interfaceInfo": { + "description": "'This data type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of key-value pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259'", + "type": "object", + "additionalProperties": true + }, + "vimId": { + "description": "The identifier of the VIM instance. This identifier is managed by the MEO.Shall be present to address additional information about the VIM if such information has been configured into the MEPM by means outside the scope of the present document, and should be absent otherwise.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "vimType": { + "description": "Discriminator for the different types of the VIM information.The value of this attribute determines the structure of the \"interfaceInfo\" and \"accessInfo\" attributes, based on the type of the VIM.The set of permitted values is expected to change over time as new types or versions of VIMs become available. ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "id", + "vimType" + ], + "type": "object", + "x-etsi-ref": "6.2.2.18" + } + }, + "instantiationState": { + "description": "Instantiation state of the application instance", + "type": "string", + "enum": [ + "NOT_INSTANTIATED", + "INSTANTIATED" + ] + }, + "instantiatedAppState": { + "description": "'Information specific to an instantiated application. This attribute shall be present if the instantiationState attribute value is INSTANTIATED.'", + "type": "object", + "required": [ + "operationalState" + ], + "properties": { + "operationalState": { + "description": "Operational state is applicable in the instantiation state INSTANTIATED", + "type": "string", + "enum": [ + "STARTED", + "STOPPED" + ] + } + } + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self" + ], + "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.5.2" + }, + "instantiate": { + "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.5.2" + }, + "terminate": { + "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.5.2" + }, + "operate": { + "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.5.2" + } + } + } + } + } \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/schemas/AppInstanceSubscriptionLinkList.schema.json b/MEC010p2/MEX/LCM/schemas/AppInstanceSubscriptionLinkList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..57be3c7b50ea31409623f2390c4857c645ce754a --- /dev/null +++ b/MEC010p2/MEX/LCM/schemas/AppInstanceSubscriptionLinkList.schema.json @@ -0,0 +1,61 @@ +{ + "description": "'The data type represents a subscription link list of notification on application package management'", + "type": "object", + "required": [ + "_links" + ], + "properties": { + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self" + ], + "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.5.2" + }, + "subscriptions": { + "type": "array", + "items": { + "description": "'The data type represents the input parameters of \"subscription operation\" to notification of application package management for the onboarding, or operational state change of application package.'", + "type": "object", + "required": [ + "href", + "subsctiptionType" + ], + "properties": { + "href": { + "description": "The URI referring to the subscription.", + "type": "string", + "format": "uri" + }, + "subsctiptionType": { + "description": "'Subscribed notification type'", + "type": "string", + "enum": [ + "AppPackageOnBoardingSubscription", + "AppPacakgeOperationChangeSubscription", + "AppPackageDeletionSubscription" + ] + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/MEC010p2/MEX/LCM/schemas/AppLcmOpOcc.schema.json b/MEC010p2/MEX/LCM/schemas/AppLcmOpOcc.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..9494bd120bf2ff1baaab9d488c13e2a7a20ccc63 --- /dev/null +++ b/MEC010p2/MEX/LCM/schemas/AppLcmOpOcc.schema.json @@ -0,0 +1,138 @@ +{ + "description": "'This data type represents an application lifecycle management operation occurrence'", + "type": "object", + "required": [ + "id", + "operationState", + "stateEnteredTime", + "startTime", + "lcmOperation", + "_links" + ], + "properties": { + "id": { + "description": "'Identifier of the subscription to application LCM operation occurrence notification'", + "type": "string" + }, + "operationState": { + "description": "Operation state", + "type": "string", + "format": "enum", + "enum": [ + "STARTING", + "PROCESSING", + "COMPLETED", + "FAILED" + ] + }, + "stateEnteredTime": { + "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.2.5.4" + }, + "startTime": { + "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.2.5.4" + }, + "lcmOperation": { + "description": "Type of the actual LCM operation represented by this application instance LCM operation occurrence", + "type": "string", + "format": "enum", + "enum": [ + "INSTATIATE", + "OPERATE", + "TERMINATE" + ] + }, + "operationParams": { + "description": "'Input parameters of the LCM operation. This attribute shall be formatted according to the request data type of the related LCM operation.'", + "type": "string", + "enum": [ + "INSTANTIATE", + "OPERATE", + "TERMINATE" + ] + }, + "_links": { + "description": "Links to resources related to this resource.", + "type": "object", + "required": [ + "self", + "appInstance" + ], + "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.5.2" + }, + "appInstance": { + "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.5.2" + } + } + } + } + } \ No newline at end of file diff --git a/SRV/APPSAQ/PlatAppServices.robot b/MEC011/SRV/APPSAQ/PlatAppServices.robot similarity index 82% rename from SRV/APPSAQ/PlatAppServices.robot rename to MEC011/SRV/APPSAQ/PlatAppServices.robot index 0f118f4c32adbdb80459bd82e96ff7271b8fd707..8e4e3ac6df2cecbc7170498c9f097e70c118e1aa 100644 --- a/SRV/APPSAQ/PlatAppServices.robot +++ b/MEC011/SRV/APPSAQ/PlatAppServices.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating Application Service Availability Query (APPSAQ) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false @@ -13,13 +13,13 @@ Default Tags TC_MEC_SRV_APPSAQ *** Test Cases *** -TC_MEC_SRV_APPSAQ_001_OK +TP_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 V2.1.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 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -28,12 +28,12 @@ TC_MEC_SRV_APPSAQ_001_OK Check HTTP Response Body Json Schema Is ServiceInfoList -TC_MEC_SRV_APPSAQ_001_BR +TP_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 V2.1.1, clause 8.2.6.3.1 + ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.6.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -42,12 +42,12 @@ TC_MEC_SRV_APPSAQ_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_APPSAQ_002_OK +TP_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 V2.1.1, clause 8.2.6.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -58,12 +58,12 @@ TC_MEC_SRV_APPSAQ_002_OK Check Response Contains ${response['body']} serName ${NEW_SERVICE_NAME} -TC_MEC_SRV_APPSAQ_002_BR +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.1.1, clause 8.2.6.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -71,12 +71,12 @@ TC_MEC_SRV_APPSAQ_002_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_APPSAQ_002_NF +TP_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 V2.1.1, clause 8.2.6.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -84,12 +84,12 @@ TC_MEC_SRV_APPSAQ_002_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_APPSAQ_003_OK +TP_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 V2.1.1, clause 8.2.7.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -99,24 +99,24 @@ TC_MEC_SRV_APPSAQ_003_OK Check Response Contains ${response['body']} serInstanceId ${SERVICE_ID} -TC_MEC_SRV_APPSAQ_003_NF +TP_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 V2.1.1, clause 8.2.7.3.1 + ... Reference ETSI GS MEC 011 V2.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 -TC_MEC_SRV_APPSAQ_004_OK +TP_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 V2.1.1, clause 8.2.7.3.2 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -126,12 +126,12 @@ TC_MEC_SRV_APPSAQ_004_OK Check Response Contains ${response['body']} version ${SVC_NEW_VERSION} -TC_MEC_SRV_APPSAQ_004_BR +TP_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 V2.1.1, clause 8.2.7.3.2 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -139,12 +139,12 @@ TC_MEC_SRV_APPSAQ_004_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_APPSAQ_004_NF +TP_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 V2.1.1, clause 8.2.7.3.2 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -152,39 +152,25 @@ TC_MEC_SRV_APPSAQ_004_NF Check HTTP Response Status Code Is 404 -TC_MEC_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 V2.1.1, clause 8.2.7.3.2 - ... OpenAPI https://forge.etsi.org/rep/mec/gs011-app-enablement-api/blob/master/MecServiceMgmtApi.yaml#/definitions/ServiceInfo - - [Tags] PIC_MEC_PLAT PIC_SERVICES - Update service with invalid etag ${APP_INSTANCE_ID} ${SERVICE_ID} ServiceInfoUpdated - Check HTTP Response Status Code Is 412 - - -TC_MEC_SRV_APPSAQ_005_OK +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 V2.1.1, clause 8.2.7.3.1 + ... 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 - [Tags] PIC_MEC_PLAT PIC_SERVICES - Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} + [Tags] PIC_MEC_PLAT PIC_SERVICES + Remove individual service ${APP_INSTANCE_ID} ${SERVICE_ID} Check HTTP Response Status Code Is 204 -TC_MEC_SRV_APPSAQ_005_NF +TP_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 V2.1.1, clause 8.2.7.3.1 - + ... Reference ETSI GS MEC 011 V2.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 @@ -196,6 +182,7 @@ 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 {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services?${key}=${value} ${output}= Output response Set Suite Variable ${response} ${output} @@ -203,6 +190,7 @@ Get a list of mecService of an application instance with parameters Get a list of mecService of an application instance [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services ${output}= Output response @@ -213,9 +201,11 @@ 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} + Log ${appInstanceId} Post ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services ${body} ${output}= Output response Set Suite Variable ${response} ${output} @@ -225,6 +215,7 @@ Get individual service [Arguments] ${appInstanceId} ${serviceName} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services/${serviceName} ${output}= Output response Set Suite Variable ${response} ${output} @@ -234,6 +225,7 @@ Update service Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + #Set Headers {"Content-Type":"*/*"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} PUT ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services/${serviceId} ${body} @@ -241,17 +233,11 @@ Update service Set Suite Variable ${response} ${output} - -Update service with invalid etag - [Arguments] ${appInstanceId} ${serviceId} ${content} - Set Headers {"If-Match": ${INVALID_ETAG}} - Update service ${appInstanceId} ${serviceId} ${content} - - Remove individual service [Arguments] ${appInstanceId} ${serviceName} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Delete ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/services/${serviceName} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/MEO/UEAPPS/README.md b/MEC011/SRV/APPSAQ/README.md similarity index 100% rename from MEO/UEAPPS/README.md rename to MEC011/SRV/APPSAQ/README.md diff --git a/SRV/APPSAQ/environment/variables.txt b/MEC011/SRV/APPSAQ/environment/variables.txt similarity index 84% rename from SRV/APPSAQ/environment/variables.txt rename to MEC011/SRV/APPSAQ/environment/variables.txt index 5b218f862cb092d7b6764391342a3593044be895..e2331ca9e785aaff92b4c4f3777667ebde8c23f0 100644 --- a/SRV/APPSAQ/environment/variables.txt +++ b/MEC011/SRV/APPSAQ/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l @@ -10,7 +10,7 @@ ${apiName} mec_service_mgmt ${apiVersion} v1 # Specific variables -${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 diff --git a/SRV/APPSAQ/jsons/ServiceInfo.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfo.json similarity index 100% rename from SRV/APPSAQ/jsons/ServiceInfo.json rename to MEC011/SRV/APPSAQ/jsons/ServiceInfo.json diff --git a/SRV/APPSAQ/jsons/ServiceInfoError.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfoError.json similarity index 100% rename from SRV/APPSAQ/jsons/ServiceInfoError.json rename to MEC011/SRV/APPSAQ/jsons/ServiceInfoError.json diff --git a/SRV/APPSAQ/jsons/ServiceInfoUpdated.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdated.json similarity index 100% rename from SRV/APPSAQ/jsons/ServiceInfoUpdated.json rename to MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdated.json diff --git a/SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json b/MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json similarity index 100% rename from SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json rename to MEC011/SRV/APPSAQ/jsons/ServiceInfoUpdatedError.json diff --git a/MEC011/SRV/APPSAQ/schemas/ServiceInfo.schema.json b/MEC011/SRV/APPSAQ/schemas/ServiceInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..97620dfa144d5d310524c3100aefe6137126887c --- /dev/null +++ b/MEC011/SRV/APPSAQ/schemas/ServiceInfo.schema.json @@ -0,0 +1,309 @@ +{ + "ServiceInfo": { + "description": "This type represents the general information of a MEC service.", + "type": "object", + "required": [ + "serName", + "version", + "state", + "transportInfo", + "serializer" + ], + "properties": { + "serInstanceId": { + "description": "Identifier of the service instance assigned by the MEC platform.", + "type": "string", + "readOnly": true, + "example": "ServiceInstance123" + }, + "serName": { + "description": "The name of the service. This is how the service producing MEC application identifies the service instance it produces.", + "type": "string", + "example": "ExampleService" + }, + "serCategory": { + "description": "This type represents the category reference", + "type": "object", + "required": [ + "href", + "id", + "name", + "version" + ], + "properties": { + "href": { + "description": "Reference of the catalogue", + "type": "string", + "format": "uri", + "example": "/example/catalogue1" + }, + "id": { + "description": "Unique identifier of the category", + "type": "string", + "example": "id12345" + }, + "name": { + "description": "Name of the category, example values include RNI, Location & Bandwidth Management", + "type": "string", + "example": "RNI" + }, + "version": { + "description": "Category version", + "type": "string", + "example": "version1" + } + } + }, + "version": { + "description": "Service version", + "type": "string", + "example": "ServiceVersion1" + }, + "state": { + "description": "This enumeration defines the possible states of a service.", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE", + "SUSPENDED" + ], + "example": "ACTIVE" + }, + "transportInfo": { + "description": "This type represents the general information of a MEC service.", + "type": "object", + "required": [ + "id", + "name", + "type", + "protocol", + "version", + "endpoint", + "security" + ], + "properties": { + "id": { + "description": "The identifier of this transport", + "type": "string", + "example": "TransId12345" + }, + "name": { + "description": "The name of this transport", + "type": "string", + "example": "REST" + }, + "description": { + "description": "Human-readable description of this transport", + "type": "string", + "example": "REST API" + }, + "type": { + "description": "The enumeration TransportType represents types of transports", + "type": "string", + "enum": [ + "REST_HTTP", + "MB_TOPIC_BASED", + "MB_ROUTING", + "MB_PUBSUB", + "RPC", + "RPC_STREAMING", + "WEBSOCKET" + ], + "example": "REST_HTTP" + }, + "protocol": { + "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", + "type": "string", + "example": "HTTP" + }, + "version": { + "description": "The version of the protocol used", + "type": "string", + "example": "2.0" + }, + "endpoint": { + "description": "This type represents information about a transport endpoint", + "type": "object", + "oneOf": [{ + "description": "Entry point information of the service as string, formatted according to URI syntax", + "type": "object", + "required": [ + "uris" + ], + "properties": { + "uris": { + "type": "array", + "minItems": 0, + "items": { + "description": "Entry point information of the service", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/service/EntryPoint" + } + } + } + }, + { + "description": "Entry point information of the service as one or more pairs of IP address and port", + "type": "object", + "required": [ + "addresses" + ], + "properties": { + "addresses": { + "type": "array", + "minItems": 0, + "items": { + "description": "A IP address and port pair", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "Host portion of the address", + "type": "string", + "example": "192.0.2.0" + }, + "port": { + "description": "Port portion of the address", + "type": "integer", + "format": "uint32", + "example": 8080 + } + } + } + } + } + }, + { + "description": "Entry point information of the service in a format defined by an implementation, or in an external specification.", + "type": "object", + "required": [ + "alternative" + ], + "properties": { + "alternative": { + "type": "object" + } + } + } + ] + }, + "security": { + "description": "This type represents security information related to a transport", + "type": "object", + "properties": { + "oAuth2Info": { + "description": "Parameters related to use of OAuth 2.0", + "required": [ + "grantTypes", + "tokenEndpoint" + ], + "properties": { + "grantTypes": { + "description": "List of supported OAuth 2.0 grant types.", + "type": "array", + "minItems": 1, + "maxItems": 4, + "items": { + "description": "OAuth 2.0 grant type", + "type": "string", + "enum": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_IMPLICIT_GRANT", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_CLIENT_CREDENTIALS" + ], + "example": "OAUTH2_CLIENT_CREDENTIALS" + } + }, + "tokenEndpoint": { + "description": "The token endpoint", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/security/TokenEndPoint" + } + }, + "type": "object" + } + } + }, + "implSpecificInfo": { + "description": "Additional implementation specific details of the transport", + "type": "object" + } + } + }, + "serializer": { + "description": "The enumeration represents types of serializers", + "type": "string", + "enum": [ + "JSON", + "XML", + "PROTOBUF3" + ], + "example": "JSON" + }, + "scopeOfLocality": { + "description": "The scope of locality as expressed by \"consumedLocalOnly\" and \"isLocal\". If absent, defaults to MEC_HOST", + "type": "string", + "enum": [ + "MEC_SYSTEM", + "MEC_HOST", + "NFVI_POP", + "ZONE", + "ZONE_GROUP", + "NFVI_NODE" + ], + "example": "MEC_SYSTEM" + }, + "consumedLocalOnly": { + "description": "Indicate whether the service can only be consumed by the MEC applications located in the same locality (as defined by scopeOfLocality) as this service instance.", + "type": "boolean", + "example": false + }, + "isLocal": { + "description": "Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application.", + "type": "boolean", + "example": true + }, + "livenessInterval": { + "type": "integer" + }, + "_links": { + "type": "object", + "required": [ + "self" + ], + "properties": { + "self": { + "description": "This type represents a type of link and may be referenced from data structures", + "type": "object", + "properties": { + "href": { + "description": "URI referring to a resource", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/example" + } + } + }, + "liveness": { + "description": "This type represents a type of link and may be referenced from data structures", + "type": "object", + "properties": { + "href": { + "description": "URI referring to a resource", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/example" + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/SRV/APPSAQ/schemas/ServiceInfoList.schema.json b/MEC011/SRV/APPSAQ/schemas/ServiceInfoList.schema.json similarity index 100% rename from SRV/APPSAQ/schemas/ServiceInfoList.schema.json rename to MEC011/SRV/APPSAQ/schemas/ServiceInfoList.schema.json diff --git a/SRV/APPSUB/PlatAppSubscriptions.robot b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot similarity index 78% rename from SRV/APPSUB/PlatAppSubscriptions.robot rename to MEC011/SRV/APPSUB/PlatAppSubscriptions.robot index 611df12c78f7d3c1593f9fc445e3c9879a5fe55a..3154e0f5f89e1ddfc66aec0bb30c0acd576cc162 100644 --- a/SRV/APPSUB/PlatAppSubscriptions.robot +++ b/MEC011/SRV/APPSUB/PlatAppSubscriptions.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating Application Subscriptions (APPSUB) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,12 +13,12 @@ Default Tags TC_MEC_SRV_APPSUB *** Test Cases *** -TC_MEC_SRV_APPSUB_001_OK +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.3.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -27,24 +27,24 @@ TC_MEC_SRV_APPSUB_001_OK Check HTTP Response Body Json Schema Is SubscriptionsLinkList -TC_MEC_SRV_APPSUB_001_NF +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.3.3.1 + ... Reference ETSI GS MEC 011 V2.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 -TC_MEC_SRV_APPSUB_002_OK +TP_MEC_MEC011_SRV_APPSUB_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.1.1, clause 7.2.3.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -56,12 +56,12 @@ TC_MEC_SRV_APPSUB_002_OK Check Response Contains ${response['body']} callbackReference ${APP_TERM_NOTIF_CALLBACK_URI} -TC_MEC_SRV_APPSUB_003_OK +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.4.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -71,36 +71,50 @@ TC_MEC_SRV_APPSUB_003_OK Check Response Contains ${response['body']} subscriptionType AppTerminationNotificationSubscription -TC_MEC_SRV_APPSUB_003_NF + +TP_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 + ... + ... Reference ETSI GS MEC 011 V2.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 + Check HTTP Response Body Json Schema Is AppTerminationNotificationSubscription + + +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.4.3.1 + ... Reference ETSI GS MEC 011 V2.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 -TC_MEC_SRV_APPSUB_004_OK +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.4.3.5 + ... Reference ETSI GS MEC 011 V2.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 -TC_MEC_SRV_APPSUB_004_NF +TP_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 ... - ... Reference ETSI GS MEC 011 V2.0.9, clause 7.2.4.3.5 + ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.4.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES Remove subscription ${NON_EXISTENT_APP_INSTANCE_ID} ${SUBSCRIPTION_ID} @@ -112,6 +126,7 @@ Get Subscriptions List [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions ${output}= Output response Set Suite Variable ${response} ${output} @@ -121,6 +136,7 @@ Create new subscription Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} Post ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions ${body} @@ -132,6 +148,8 @@ Get individual subscription [Arguments] ${appInstanceId} ${subscriptionId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions/${subscriptionId} ${output}= Output response Set Suite Variable ${response} ${output} @@ -140,6 +158,7 @@ Remove subscription [Arguments] ${appInstanceId} ${subscriptionId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Delete ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions/${subscriptionId} ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEPM/PKGM/README.md b/MEC011/SRV/APPSUB/README.md similarity index 100% rename from MEPM/PKGM/README.md rename to MEC011/SRV/APPSUB/README.md diff --git a/SRV/APPSUB/environment/variables.txt b/MEC011/SRV/APPSUB/environment/variables.txt similarity index 94% rename from SRV/APPSUB/environment/variables.txt rename to MEC011/SRV/APPSUB/environment/variables.txt index c28506fc614921a925dc3dc9843c1ae081490899..c66b1e95290f06a0c6074ab0d3d76bd71ad9ae6b 100644 --- a/SRV/APPSUB/environment/variables.txt +++ b/MEC011/SRV/APPSUB/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json b/MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json similarity index 100% rename from SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json rename to MEC011/SRV/APPSUB/jsons/AppTerminationNotificationSubscription.json diff --git a/SRV/APPSUB/schemas/AppTerminationNotificationSubscription.schema.json b/MEC011/SRV/APPSUB/schemas/AppTerminationNotificationSubscription.schema.json similarity index 100% rename from SRV/APPSUB/schemas/AppTerminationNotificationSubscription.schema.json rename to MEC011/SRV/APPSUB/schemas/AppTerminationNotificationSubscription.schema.json diff --git a/SRV/APPSUB/schemas/AppTerminationNotificationSubscriptions.schema.json b/MEC011/SRV/APPSUB/schemas/AppTerminationNotificationSubscriptions.schema.json similarity index 100% rename from SRV/APPSUB/schemas/AppTerminationNotificationSubscriptions.schema.json rename to MEC011/SRV/APPSUB/schemas/AppTerminationNotificationSubscriptions.schema.json diff --git a/SRV/APPSUB/schemas/SubscriptionsLinkList.schema.json b/MEC011/SRV/APPSUB/schemas/SubscriptionsLinkList.schema.json similarity index 100% rename from SRV/APPSUB/schemas/SubscriptionsLinkList.schema.json rename to MEC011/SRV/APPSUB/schemas/SubscriptionsLinkList.schema.json diff --git a/SRV/CONF/PlatConfirmation.robot b/MEC011/SRV/CONFTASK/PlatConfirmation.robot similarity index 80% rename from SRV/CONF/PlatConfirmation.robot rename to MEC011/SRV/CONFTASK/PlatConfirmation.robot index c619ff1b9e76e7a942adba0033a659bb6657c90c..f4edb9a410718fc061642caaa4b5948a8d9ca731 100644 --- a/SRV/CONF/PlatConfirmation.robot +++ b/MEC011/SRV/CONFTASK/PlatConfirmation.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating DNS rules (DNS) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -16,12 +16,12 @@ Default Tags TC_MEC_SRV_CONF *** Test Cases *** -TC_MEC_SRV_CONF_001_OK +TP_MEC_MEC011_SRV_CONFTASK_001_OK [Documentation] - ... Check that the IUT responds with an acknowledge - ... when requested graceful termination/stop of a MEC Application instance + ... Check that the IUT responds that it has completed + ... the application level termination ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.11.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -29,12 +29,12 @@ TC_MEC_SRV_CONF_001_OK Check HTTP Response Status Code Is 204 -TC_MEC_SRV_CONF_001_NF +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.11.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -44,12 +44,12 @@ TC_MEC_SRV_CONF_001_NF -TC_MEC_SRV_CONF_002_OK +TP_MEC_MEC011_SRV_CONFTASK_002_OK [Documentation] ... Check that the IUT responds with an acknowledge ... when requested readiness status for a MEC Application instance ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.12.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -57,12 +57,12 @@ TC_MEC_SRV_CONF_002_OK Check HTTP Response Status Code Is 204 -TC_MEC_SRV_CONF_002_NF +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.12.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -78,7 +78,7 @@ Request termination of MEC Application Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - PUT ${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} @@ -90,6 +90,6 @@ Request readiness status of MEC Application Set Headers {"Authorization":"${TOKEN}"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - PUT ${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/SRV/AMS/README.md b/MEC011/SRV/CONFTASK/README.md similarity index 100% rename from SRV/AMS/README.md rename to MEC011/SRV/CONFTASK/README.md diff --git a/SRV/CONF/environment/variables.txt b/MEC011/SRV/CONFTASK/environment/variables.txt similarity index 94% rename from SRV/CONF/environment/variables.txt rename to MEC011/SRV/CONFTASK/environment/variables.txt index 183991b3e8619c680ead1c4b2bc2a854179da8c2..81a8328be20beca428ce418769074cf80d2c4539 100644 --- a/SRV/CONF/environment/variables.txt +++ b/MEC011/SRV/CONFTASK/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/SRV/CONF/jsons/AppReadyConfirmation.json b/MEC011/SRV/CONFTASK/jsons/AppReadyConfirmation.json similarity index 100% rename from SRV/CONF/jsons/AppReadyConfirmation.json rename to MEC011/SRV/CONFTASK/jsons/AppReadyConfirmation.json diff --git a/SRV/CONF/jsons/AppTerminationConfirmation.json b/MEC011/SRV/CONFTASK/jsons/AppTerminationConfirmation.json similarity index 100% rename from SRV/CONF/jsons/AppTerminationConfirmation.json rename to MEC011/SRV/CONFTASK/jsons/AppTerminationConfirmation.json diff --git a/SRV/CONF/schemas/AppReadyConfirmation.schema.json b/MEC011/SRV/CONFTASK/schemas/AppReadyConfirmation.schema.json similarity index 100% rename from SRV/CONF/schemas/AppReadyConfirmation.schema.json rename to MEC011/SRV/CONFTASK/schemas/AppReadyConfirmation.schema.json diff --git a/SRV/CONF/schemas/AppTerminationConfirmation.schema.json b/MEC011/SRV/CONFTASK/schemas/AppTerminationConfirmation.schema.json similarity index 100% rename from SRV/CONF/schemas/AppTerminationConfirmation.schema.json rename to MEC011/SRV/CONFTASK/schemas/AppTerminationConfirmation.schema.json diff --git a/SRV/DNS/PlatDnsRules.robot b/MEC011/SRV/DNS/PlatDnsRules.robot similarity index 78% rename from SRV/DNS/PlatDnsRules.robot rename to MEC011/SRV/DNS/PlatDnsRules.robot index 80a0c18beefa57cb428192fa8cf32f3ff2dfaca1..883e195f74452cff1084dde6fe2d3213c87252ce 100644 --- a/SRV/DNS/PlatDnsRules.robot +++ b/MEC011/SRV/DNS/PlatDnsRules.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating DNS rules (DNS) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -16,12 +16,12 @@ Default Tags TC_MEC_SRV_DNS *** Test Cases *** -TC_MEC_SRV_DNS_001_OK +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.9.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -30,12 +30,12 @@ TC_MEC_SRV_DNS_001_OK Check HTTP Response Body Json Schema Is DnsRuleList -TC_MEC_SRV_DNS_002_OK +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.1.1, clause 7.2.10.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -45,24 +45,24 @@ TC_MEC_SRV_DNS_002_OK Check Response Contains ${response['body']} dnsRuleId ${DNS_RULE_ID} -TC_MEC_SRV_DNS_002_NF +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.1.1, clause 7.2.10.3.1 + ... Reference ETSI GS MEC 011 V2.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 -TC_MEC_SRV_DNS_003_OK +TP_MEC_MEC011_SRV_DNS_003_OK [Documentation] ... Check that the IUT updates a specific DNS rule ... when commanded by a MEC Application ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.10.3.2 + ... 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 @@ -72,12 +72,12 @@ TC_MEC_SRV_DNS_003_OK Check Response Contains ${response['body']} ipAddress ${SOME_IP_ADDRESS} -TC_MEC_SRV_DNS_003_BR +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.10.3.2 + ... 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 @@ -85,12 +85,12 @@ TC_MEC_SRV_DNS_003_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_DNS_003_NF +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 7.2.10.3.2 + ... 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 @@ -98,17 +98,18 @@ TC_MEC_SRV_DNS_003_NF Check HTTP Response Status Code Is 404 -TC_MEC_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.1.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 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 @@ -117,6 +118,7 @@ Get list of active DNS rules [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules ${output}= Output response Set Suite Variable ${response} ${output} @@ -126,6 +128,7 @@ Get individual DNS rule [Arguments] ${appInstanceId} ${dnsRuleId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/dns_rules/${dnsRuleId} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/SRV/APPSAQ/README.md b/MEC011/SRV/DNS/README.md similarity index 100% rename from SRV/APPSAQ/README.md rename to MEC011/SRV/DNS/README.md diff --git a/SRV/DNS/environment/variables.txt b/MEC011/SRV/DNS/environment/variables.txt similarity index 94% rename from SRV/DNS/environment/variables.txt rename to MEC011/SRV/DNS/environment/variables.txt index 1ab92ff9e402bb7a1f3c8005c8cf2cee99795cf2..bed8e739a7f91a5ec2141d55c902ea10fc0fbe24 100644 --- a/SRV/DNS/environment/variables.txt +++ b/MEC011/SRV/DNS/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/SRV/DNS/jsons/DnsRuleUpdate.json b/MEC011/SRV/DNS/jsons/DnsRuleUpdate.json similarity index 100% rename from SRV/DNS/jsons/DnsRuleUpdate.json rename to MEC011/SRV/DNS/jsons/DnsRuleUpdate.json diff --git a/SRV/DNS/jsons/DnsRuleUpdateError.json b/MEC011/SRV/DNS/jsons/DnsRuleUpdateError.json similarity index 100% rename from SRV/DNS/jsons/DnsRuleUpdateError.json rename to MEC011/SRV/DNS/jsons/DnsRuleUpdateError.json diff --git a/SRV/DNS/schemas/DnsRule.schema.json b/MEC011/SRV/DNS/schemas/DnsRule.schema.json similarity index 100% rename from SRV/DNS/schemas/DnsRule.schema.json rename to MEC011/SRV/DNS/schemas/DnsRule.schema.json diff --git a/SRV/DNS/schemas/DnsRuleList.schema.json b/MEC011/SRV/DNS/schemas/DnsRuleList.schema.json similarity index 100% rename from SRV/DNS/schemas/DnsRuleList.schema.json rename to MEC011/SRV/DNS/schemas/DnsRuleList.schema.json diff --git a/MEC011/SRV/LIV/Liveness.robot b/MEC011/SRV/LIV/Liveness.robot new file mode 100644 index 0000000000000000000000000000000000000000..2e7e3102d5abebbebc23a3763e7811948beb27ce --- /dev/null +++ b/MEC011/SRV/LIV/Liveness.robot @@ -0,0 +1,86 @@ +*** Settings *** + +Documentation +... A test suite for validating Application Subscriptions (APPSUB) operations. + +Resource ../../../GenericKeywords.robot +Resource environment/variables.txt +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem + + +*** Test Cases *** + +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 + + [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 + + + +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 + + [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 + [Documentation] + ... Check that the IUT updates the liveness of a MEC service instance + ... when requested by a MEC Application + + [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 200 + Check HTTP Response Body Json Schema Is ServiceLivenessInfo + Check Response Contains ${response['body']} state ACTIVE + +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 + + [Tags] PIC_MEC_PLAT PIC_SERVICES + Set Headers {"Authorization":"${TOKEN}"} + + ${file}= Catenate SEPARATOR= jsons/ ServiceLivenessUpdateError .json + ${body}= Get File ${file} + Update MEC service liveness ${URL_SERVICE_MEC_LIVENESS} ${body} + Check HTTP Response Status Code Is 400 + + +*** Keywords *** +Individual MEC service liveness + [Arguments] ${URL_MEC_SERVICE_LIVENESS} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} + Get ${URL_MEC_SERVICE_LIVENESS} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Update MEC service liveness + [Arguments] ${URL_MEC_SERVICE_LIVENESS} ${body} + Set Headers {"Accept":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Patch ${URL_MEC_SERVICE_LIVENESS} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + \ No newline at end of file diff --git a/SRV/APPSUB/README.md b/MEC011/SRV/LIV/README.md similarity index 100% rename from SRV/APPSUB/README.md rename to MEC011/SRV/LIV/README.md diff --git a/MEC011/SRV/LIV/environment/variables.txt b/MEC011/SRV/LIV/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..e711cbdb446f7e026c536de45acf8af281ae28fd --- /dev/null +++ b/MEC011/SRV/LIV/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} mec_app_support +${apiVersion} v1 + +# 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 diff --git a/MEC011/SRV/LIV/jsons/ServiceLivenessUpdate.json b/MEC011/SRV/LIV/jsons/ServiceLivenessUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..255ddbd626791e36dfb09157728fc163ff7a205d --- /dev/null +++ b/MEC011/SRV/LIV/jsons/ServiceLivenessUpdate.json @@ -0,0 +1,3 @@ +{ + "state": "ACTIVE" +} \ No newline at end of file diff --git a/MEC011/SRV/LIV/jsons/ServiceLivenessUpdateError.json b/MEC011/SRV/LIV/jsons/ServiceLivenessUpdateError.json new file mode 100644 index 0000000000000000000000000000000000000000..78b4a72f1160b1d7c7b9961454d6781539f558ed --- /dev/null +++ b/MEC011/SRV/LIV/jsons/ServiceLivenessUpdateError.json @@ -0,0 +1,3 @@ +{ + "state": "INACTIVE" +} \ No newline at end of file diff --git a/MEC011/SRV/LIV/schemas/ServiceLivenessInfo.schema.json b/MEC011/SRV/LIV/schemas/ServiceLivenessInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..0a68027cbf0250cd03f3ed4524f0b111c55f22cb --- /dev/null +++ b/MEC011/SRV/LIV/schemas/ServiceLivenessInfo.schema.json @@ -0,0 +1,41 @@ +{ + "description": "the liveness information of a MEC service instance", + "type": "object", + "required": [ + "state", + "timeStamp", + "interval" + ], + "properties": { + "state": { + "description": "This enumeration defines the possible states of a service.", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE", + "SUSPENDED" + ], + "example": "ACTIVE" + }, + "timeStamp": { + "type": "object", + "required": [ + "seconds", + "nanoSeconds" + ], + "properties": { + "seconds": { + "type": "integer", + "format": "uint32" + }, + "nanoSeconds": { + "type": "integer", + "format": "uint32" + } + } + }, + "interval": { + "type": "integer" + } + } +} \ No newline at end of file diff --git a/SRV/BWA/README.md b/MEC011/SRV/README.md similarity index 100% rename from SRV/BWA/README.md rename to MEC011/SRV/README.md diff --git a/SRV/SAQ/PlatServices.robot b/MEC011/SRV/SAQ/PlatServices.robot similarity index 83% rename from SRV/SAQ/PlatServices.robot rename to MEC011/SRV/SAQ/PlatServices.robot index 10c254df42f1bec105446c8995612220c63c6623..8843f5f07dbb1b7d19af83a49130970cc0ef9f24 100644 --- a/SRV/SAQ/PlatServices.robot +++ b/MEC011/SRV/SAQ/PlatServices.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating Service Availability Query (SAQ) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -14,12 +14,12 @@ Default Tags TC_MEC_SRV_SAQ *** Test Cases *** -TC_MEC_SRV_SAQ_001_OK +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 8.2.3.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -28,24 +28,24 @@ TC_MEC_SRV_SAQ_001_OK Check HTTP Response Body Json Schema Is ServiceInfoList -TC_MEC_SRV_SAQ_001_BR +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 8.2.3.3.1 + ... Reference ETSI GS MEC 011 V2.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} Check HTTP Response Status Code Is 400 -TC_MEC_SRV_SAQ_002_OK +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 8.2.4.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -55,12 +55,12 @@ TC_MEC_SRV_SAQ_002_OK Check Response Contains ${response['body']} serInstanceId ${SERVICE_ID} -TC_MEC_SRV_SAQ_002_NF +TP_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 ... - ... Reference ETSI GS MEC 011 V2.1.1, clause 8.2.4.3.1 + ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.4.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get specific MEC service ${NON_EXISTENT_SERVICE_ID} @@ -72,6 +72,7 @@ Get list of available MEC services with parameters [Arguments] ${key}=None ${value}=None Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/services?${key}=${value} ${output}= Output response Set Suite Variable ${response} ${output} @@ -79,6 +80,7 @@ Get list of available MEC services with parameters Get list of available MEC services Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/services ${output}= Output response Set Suite Variable ${response} ${output} @@ -87,6 +89,7 @@ Get specific MEC service [Arguments] ${serviceId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/services/${serviceId} ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/SRV/CONF/README.md b/MEC011/SRV/SAQ/README.md similarity index 100% rename from SRV/CONF/README.md rename to MEC011/SRV/SAQ/README.md diff --git a/SRV/SAQ/environment/variables.txt b/MEC011/SRV/SAQ/environment/variables.txt similarity index 94% rename from SRV/SAQ/environment/variables.txt rename to MEC011/SRV/SAQ/environment/variables.txt index fcdf75ea4116ae050f06dadd3a2d052411c1419a..36785814968ae94f817b57908470345a94ee8fc1 100644 --- a/SRV/SAQ/environment/variables.txt +++ b/MEC011/SRV/SAQ/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/MEC011/SRV/SAQ/schemas/ServiceInfo.schema.json b/MEC011/SRV/SAQ/schemas/ServiceInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..061534085f161ef75e0870841c2cf8618d24a295 --- /dev/null +++ b/MEC011/SRV/SAQ/schemas/ServiceInfo.schema.json @@ -0,0 +1,307 @@ +{ + "description": "This type represents the general information of a MEC service.", + "type": "object", + "required": [ + "serName", + "version", + "state", + "transportInfo", + "serializer" + ], + "properties": { + "serInstanceId": { + "description": "Identifier of the service instance assigned by the MEC platform.", + "type": "string", + "readOnly": true, + "example": "ServiceInstance123" + }, + "serName": { + "description": "The name of the service. This is how the service producing MEC application identifies the service instance it produces.", + "type": "string", + "example": "ExampleService" + }, + "serCategory": { + "description": "This type represents the category reference", + "type": "object", + "required": [ + "href", + "id", + "name", + "version" + ], + "properties": { + "href": { + "description": "Reference of the catalogue", + "type": "string", + "format": "uri", + "example": "/example/catalogue1" + }, + "id": { + "description": "Unique identifier of the category", + "type": "string", + "example": "id12345" + }, + "name": { + "description": "Name of the category, example values include RNI, Location & Bandwidth Management", + "type": "string", + "example": "RNI" + }, + "version": { + "description": "Category version", + "type": "string", + "example": "version1" + } + } + }, + "version": { + "description": "Service version", + "type": "string", + "example": "ServiceVersion1" + }, + "state": { + "description": "This enumeration defines the possible states of a service.", + "type": "string", + "enum": [ + "ACTIVE", + "INACTIVE", + "SUSPENDED" + ], + "example": "ACTIVE" + }, + "transportInfo": { + "description": "This type represents the general information of a MEC service.", + "type": "object", + "required": [ + "id", + "name", + "type", + "protocol", + "version", + "endpoint", + "security" + ], + "properties": { + "id": { + "description": "The identifier of this transport", + "type": "string", + "example": "TransId12345" + }, + "name": { + "description": "The name of this transport", + "type": "string", + "example": "REST" + }, + "description": { + "description": "Human-readable description of this transport", + "type": "string", + "example": "REST API" + }, + "type": { + "description": "The enumeration TransportType represents types of transports", + "type": "string", + "enum": [ + "REST_HTTP", + "MB_TOPIC_BASED", + "MB_ROUTING", + "MB_PUBSUB", + "RPC", + "RPC_STREAMING", + "WEBSOCKET" + ], + "example": "REST_HTTP" + }, + "protocol": { + "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", + "type": "string", + "example": "HTTP" + }, + "version": { + "description": "The version of the protocol used", + "type": "string", + "example": "2.0" + }, + "endpoint": { + "description": "This type represents information about a transport endpoint", + "type": "object", + "oneOf": [{ + "description": "Entry point information of the service as string, formatted according to URI syntax", + "type": "object", + "required": [ + "uris" + ], + "properties": { + "uris": { + "type": "array", + "minItems": 0, + "items": { + "description": "Entry point information of the service", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/service/EntryPoint" + } + } + } + }, + { + "description": "Entry point information of the service as one or more pairs of IP address and port", + "type": "object", + "required": [ + "addresses" + ], + "properties": { + "addresses": { + "type": "array", + "minItems": 0, + "items": { + "description": "A IP address and port pair", + "type": "object", + "required": [ + "host", + "port" + ], + "properties": { + "host": { + "description": "Host portion of the address", + "type": "string", + "example": "192.0.2.0" + }, + "port": { + "description": "Port portion of the address", + "type": "integer", + "format": "uint32", + "example": 8080 + } + } + } + } + } + }, + { + "description": "Entry point information of the service in a format defined by an implementation, or in an external specification.", + "type": "object", + "required": [ + "alternative" + ], + "properties": { + "alternative": { + "type": "object" + } + } + } + ] + }, + "security": { + "description": "This type represents security information related to a transport", + "type": "object", + "properties": { + "oAuth2Info": { + "description": "Parameters related to use of OAuth 2.0", + "required": [ + "grantTypes", + "tokenEndpoint" + ], + "properties": { + "grantTypes": { + "description": "List of supported OAuth 2.0 grant types.", + "type": "array", + "minItems": 1, + "maxItems": 4, + "items": { + "description": "OAuth 2.0 grant type", + "type": "string", + "enum": [ + "OAUTH2_AUTHORIZATION_CODE", + "OAUTH2_IMPLICIT_GRANT", + "OAUTH2_RESOURCE_OWNER", + "OAUTH2_CLIENT_CREDENTIALS" + ], + "example": "OAUTH2_CLIENT_CREDENTIALS" + } + }, + "tokenEndpoint": { + "description": "The token endpoint", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/security/TokenEndPoint" + } + }, + "type": "object" + } + } + }, + "implSpecificInfo": { + "description": "Additional implementation specific details of the transport", + "type": "object" + } + } + }, + "serializer": { + "description": "The enumeration represents types of serializers", + "type": "string", + "enum": [ + "JSON", + "XML", + "PROTOBUF3" + ], + "example": "JSON" + }, + "scopeOfLocality": { + "description": "The scope of locality as expressed by \"consumedLocalOnly\" and \"isLocal\". If absent, defaults to MEC_HOST", + "type": "string", + "enum": [ + "MEC_SYSTEM", + "MEC_HOST", + "NFVI_POP", + "ZONE", + "ZONE_GROUP", + "NFVI_NODE" + ], + "example": "MEC_SYSTEM" + }, + "consumedLocalOnly": { + "description": "Indicate whether the service can only be consumed by the MEC applications located in the same locality (as defined by scopeOfLocality) as this service instance.", + "type": "boolean", + "example": false + }, + "isLocal": { + "description": "Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application.", + "type": "boolean", + "example": true + }, + "livenessInterval": { + "type": "integer" + }, + "_links": { + "type": "object", + "required": [ + "self" + ], + "properties": { + "self": { + "description": "This type represents a type of link and may be referenced from data structures", + "type": "object", + "properties": { + "href": { + "description": "URI referring to a resource", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/example" + } + } + }, + "liveness": { + "description": "This type represents a type of link and may be referenced from data structures", + "type": "object", + "properties": { + "href": { + "description": "URI referring to a resource", + "type": "string", + "format": "uri", + "example": "/mecSerMgmtApi/example" + } + } + } + } + } + } + } \ No newline at end of file diff --git a/SRV/APPSAQ/schemas/ServiceInfo.schema.json b/MEC011/SRV/SAQ/schemas/ServiceInfo.schema.json_OLD similarity index 100% rename from SRV/APPSAQ/schemas/ServiceInfo.schema.json rename to MEC011/SRV/SAQ/schemas/ServiceInfo.schema.json_OLD diff --git a/SRV/SAQ/schemas/ServiceInfoList.schema.json b/MEC011/SRV/SAQ/schemas/ServiceInfoList.schema.json similarity index 100% rename from SRV/SAQ/schemas/ServiceInfoList.schema.json rename to MEC011/SRV/SAQ/schemas/ServiceInfoList.schema.json diff --git a/SRV/SRVSUB/PlatSrvSubscriptions.robot b/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot similarity index 85% rename from SRV/SRVSUB/PlatSrvSubscriptions.robot rename to MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot index 7b61bf7b836e44057eac680ac96be0d8df2f81dc..1c9edc801fe7d4bee478275124d3bd74003c366e 100644 --- a/SRV/SRVSUB/PlatSrvSubscriptions.robot +++ b/MEC011/SRV/SRVSUB/PlatSrvSubscriptions.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating Service Subscriptions (SRVSUB) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,12 +13,12 @@ Default Tags TC_MEC_SRV_SRVSUB *** Test Cases *** -TC_MEC_SRV_SRVSUB_001_OK +TP_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.1.1, clause 8.2.8.3.1 + ... 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 @@ -27,24 +27,24 @@ TC_MEC_SRV_SRVSUB_001_OK Check HTTP Response Body Json Schema Is SubscriptionLinkList -TC_MEC_SRV_SRVSUB_001_NF +TP_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.1.1, clause 8.2.8.3.1 + ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.8.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of subscriptions ${NON_EXISTENT_INSTANCE_ID} Check HTTP Response Status Code Is 404 -TC_MEC_SRV_SRVSUB_002_OK +TP_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.1.1, clause 8.2.8.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -56,12 +56,12 @@ TC_MEC_SRV_SRVSUB_002_OK Check Response Contains ${response['body']} callbackReference ${APP_SRVSUB_NOTIF_CALLBACK_URI} -TC_MEC_SRV_SRVSUB_002_BR +TP_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.1.1, clause 8.2.8.3.4 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -69,12 +69,12 @@ TC_MEC_SRV_SRVSUB_002_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_SRVSUB_003_OK +TP_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.1.1, clause 8.2.9.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -84,36 +84,36 @@ TC_MEC_SRV_SRVSUB_003_OK Check Response Contains ${response['body']} subscriptionType SerAvailabilityNotificationSubscription -TC_MEC_SRV_SRVSUB_003_NF +TP_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.1.1, clause 8.2.9.3.1 + ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.9.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 -TC_MEC_SRV_SRVSUB_004_OK +TP_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.1.1, clause 8.2.9.3.5 + ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.9.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES Remove subscription ${APP_INSTANCE_ID} ${SUBSCRIPTION_ID} Check HTTP Response Status Code Is 204 -TC_MEC_SRV_SRVSUB_004_NF +TP_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.1.1, clause 8.2.9.3.5 + ... Reference ETSI GS MEC 011 V2.2.1, clause 8.2.9.3.5 [Tags] PIC_MEC_PLAT PIC_SERVICES Remove subscription ${NON_EXISTENT_INSTANCE_ID} ${SUBSCRIPTION_ID} @@ -125,6 +125,7 @@ Get list of subscriptions [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions ${output}= Output response Set Suite Variable ${response} ${output} @@ -144,6 +145,7 @@ Get individual subscription [Arguments] ${appInstanceId} ${subscriptionId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions/${subscriptionId} ${output}= Output response Set Suite Variable ${response} ${output} @@ -152,6 +154,7 @@ Remove subscription [Arguments] ${appInstanceId} ${subscriptionId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Delete ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/subscriptions/${subscriptionId} ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/SRV/DNS/README.md b/MEC011/SRV/SRVSUB/README.md similarity index 100% rename from SRV/DNS/README.md rename to MEC011/SRV/SRVSUB/README.md diff --git a/SRV/SRVSUB/environment/variables.txt b/MEC011/SRV/SRVSUB/environment/variables.txt similarity index 94% rename from SRV/SRVSUB/environment/variables.txt rename to MEC011/SRV/SRVSUB/environment/variables.txt index 726b694a152a28425f16114a82983929eccfbdca..0e357a5e786a2c028d819cc5b9e6db72f2100899 100644 --- a/SRV/SRVSUB/environment/variables.txt +++ b/MEC011/SRV/SRVSUB/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscription.json b/MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscription.json similarity index 100% rename from SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscription.json rename to MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscription.json diff --git a/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json b/MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json similarity index 100% rename from SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json rename to MEC011/SRV/SRVSUB/jsons/SerAvailabilityNotificationSubscriptionError.json diff --git a/SRV/SRVSUB/schemas/SerAvailabilityNotificationSubscription.schema.json b/MEC011/SRV/SRVSUB/schemas/SerAvailabilityNotificationSubscription.schema.json similarity index 96% rename from SRV/SRVSUB/schemas/SerAvailabilityNotificationSubscription.schema.json rename to MEC011/SRV/SRVSUB/schemas/SerAvailabilityNotificationSubscription.schema.json index 26682d5b5b0302222d83fe1987fee6d044477daf..e84043b7cecc7fb2268f87ebf749a79c654efb68 100644 --- a/SRV/SRVSUB/schemas/SerAvailabilityNotificationSubscription.schema.json +++ b/MEC011/SRV/SRVSUB/schemas/SerAvailabilityNotificationSubscription.schema.json @@ -42,6 +42,13 @@ "filteringCriteria": { "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.", "type": "object", + "not": { + "required": [ + "serInstanceIds", + "serNames", + "serCategories" + ] + }, "properties": { "serInstanceIds": { "description": "Identifiers of service instances about which to report events.", @@ -111,7 +118,8 @@ "type": "string", "enum": [ "ACTIVE", - "INACTIVE" + "INACTIVE", + "SUSPENDED" ], "example": "ACTIVE" } diff --git a/SRV/SRVSUB/schemas/SubscriptionLink.schema.json b/MEC011/SRV/SRVSUB/schemas/SubscriptionLink.schema.json similarity index 100% rename from SRV/SRVSUB/schemas/SubscriptionLink.schema.json rename to MEC011/SRV/SRVSUB/schemas/SubscriptionLink.schema.json diff --git a/SRV/SRVSUB/schemas/SubscriptionLinkList.schema.json b/MEC011/SRV/SRVSUB/schemas/SubscriptionLinkList.schema.json similarity index 100% rename from SRV/SRVSUB/schemas/SubscriptionLinkList.schema.json rename to MEC011/SRV/SRVSUB/schemas/SubscriptionLinkList.schema.json diff --git a/SRV/TIME/PlatTiming.robot b/MEC011/SRV/TIME/PlatTiming.robot similarity index 82% rename from SRV/TIME/PlatTiming.robot rename to MEC011/SRV/TIME/PlatTiming.robot index 63c90325352f5c6f5ab62f4f6098797336878896..e93be9e9bbc261bfde74b56a6858a7aac291ea95 100644 --- a/SRV/TIME/PlatTiming.robot +++ b/MEC011/SRV/TIME/PlatTiming.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating Timing capabilities (TIME) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -14,12 +14,12 @@ Default Tags TC_MEC_SRV_TIME *** Test Cases *** -TC_MEC_SRV_TIME_001_OK +TP_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.1.1, clause 7.2.5.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -28,12 +28,12 @@ TC_MEC_SRV_TIME_001_OK Check HTTP Response Body Json Schema Is TimingCaps -TC_MEC_SRV_TIME_002_OK +TP_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.1.1, clause 7.2.6.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -47,12 +47,14 @@ Get time capabilities Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Get ${apiRoot}/${apiName}/${apiVersion}/timing/timing_caps + Set Headers {"Content-Type":"*/*"} ${output}= Output response Set Suite Variable ${response} ${output} Get current time Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/timing/current_time ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/SRV/FAIS/README.md b/MEC011/SRV/TIME/README.md similarity index 100% rename from SRV/FAIS/README.md rename to MEC011/SRV/TIME/README.md diff --git a/SRV/TIME/environment/variables.txt b/MEC011/SRV/TIME/environment/variables.txt similarity index 91% rename from SRV/TIME/environment/variables.txt rename to MEC011/SRV/TIME/environment/variables.txt index 8837e3089a85f450441456a96c69748a3e76a517..3ae69ae51ee7dc3489e726b5608c5bec284534d5 100644 --- a/SRV/TIME/environment/variables.txt +++ b/MEC011/SRV/TIME/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/SRV/TIME/schemas/CurrentTime.schema.json b/MEC011/SRV/TIME/schemas/CurrentTime.schema.json similarity index 100% rename from SRV/TIME/schemas/CurrentTime.schema.json rename to MEC011/SRV/TIME/schemas/CurrentTime.schema.json diff --git a/SRV/TIME/schemas/TimingCaps.schema.json b/MEC011/SRV/TIME/schemas/TimingCaps.schema.json similarity index 100% rename from SRV/TIME/schemas/TimingCaps.schema.json rename to MEC011/SRV/TIME/schemas/TimingCaps.schema.json diff --git a/SRV/TRAF/PlatTrafficRules.robot b/MEC011/SRV/TRAF/PlatTrafficRules.robot similarity index 78% rename from SRV/TRAF/PlatTrafficRules.robot rename to MEC011/SRV/TRAF/PlatTrafficRules.robot index f8cf514ca89ea001206f44e243bb836b74efc419..1bf634bc7aab8ed9197f95e5e8118b085fe34ed7 100644 --- a/SRV/TRAF/PlatTrafficRules.robot +++ b/MEC011/SRV/TRAF/PlatTrafficRules.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating Traffic rules (TRAF) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,12 +13,12 @@ Default Tags TC_MEC_SRV_TRAF *** Test Cases *** -TC_MEC_SRV_TRAF_001_OK +TP_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.1.1, clause 7.2.7.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -27,24 +27,24 @@ TC_MEC_SRV_TRAF_001_OK Check HTTP Response Body Json Schema Is TrafficRuleList -TC_MEC_SRV_TRAF_001_NF +TP_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.0.9, clause 7.2.8.3.1 + ... Reference ETSI GS MEC 011 V2.2.1, clause 7.2.8.3.1 [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of traffic rules ${NON_EXISTENT_APP_INSTANCE_ID} Check HTTP Response Status Code Is 404 -TC_MEC_SRV_TRAF_002_OK +TP_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.1.1, clause 7.2.8.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -54,12 +54,12 @@ TC_MEC_SRV_TRAF_002_OK Check Response Contains ${response['body']} trafficRuleId ${TRAFFIC_RULE_ID} -TC_MEC_SRV_TRAF_003_OK +TP_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.1.1, clause 7.2.8.3.2 + ... 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 @@ -70,12 +70,12 @@ TC_MEC_SRV_TRAF_003_OK Check Response Contains ${response['body']} action DROP -TC_MEC_SRV_TRAF_003_BR +TP_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.1.1, clause 7.2.8.3.2 + ... 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 @@ -83,36 +83,37 @@ TC_MEC_SRV_TRAF_003_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_TRAF_003_NF +TP_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.1.1, clause 7.2.8.3.2 + ... 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 ${APP_INSTANCE_ID} ${NON_EXISTENT_TRAFFIC_RULE_ID} TrafficRuleUpdate Check HTTP Response Status Code Is 404 - -TC_MEC_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.1.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 +## 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 *** Keywords *** Get list of traffic rules [Arguments] ${appInstanceId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/traffic_rules ${output}= Output response Set Suite Variable ${response} ${output} @@ -121,6 +122,7 @@ Get individual traffic rule [Arguments] ${appInstanceId} ${trafficRuleId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/applications/${appInstanceId}/traffic_rules/${trafficRuleId} ${output}= Output response Set Suite Variable ${response} ${output} @@ -130,6 +132,7 @@ Update a traffic rule 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}/applications/${appInstanceId}/traffic_rules/${trafficRuleId} ${body} diff --git a/SRV/README.md b/MEC011/SRV/TRAF/README.md similarity index 100% rename from SRV/README.md rename to MEC011/SRV/TRAF/README.md diff --git a/SRV/TRAF/environment/variables.txt b/MEC011/SRV/TRAF/environment/variables.txt similarity index 94% rename from SRV/TRAF/environment/variables.txt rename to MEC011/SRV/TRAF/environment/variables.txt index 616d47dbba00d3be15ffea3cf49822e964c8c2cb..74db1cc81e0af0957b8ee80fecbea7f24636b718 100644 --- a/SRV/TRAF/environment/variables.txt +++ b/MEC011/SRV/TRAF/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/SRV/TRAF/jsons/TrafficRuleUpdate.json b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json similarity index 100% rename from SRV/TRAF/jsons/TrafficRuleUpdate.json rename to MEC011/SRV/TRAF/jsons/TrafficRuleUpdate.json diff --git a/SRV/TRAF/jsons/TrafficRuleUpdateError.json b/MEC011/SRV/TRAF/jsons/TrafficRuleUpdateError.json similarity index 100% rename from SRV/TRAF/jsons/TrafficRuleUpdateError.json rename to MEC011/SRV/TRAF/jsons/TrafficRuleUpdateError.json diff --git a/SRV/TRAF/schemas/TrafficRule.schema.json b/MEC011/SRV/TRAF/schemas/TrafficRule.schema.json similarity index 100% rename from SRV/TRAF/schemas/TrafficRule.schema.json rename to MEC011/SRV/TRAF/schemas/TrafficRule.schema.json diff --git a/SRV/TRAF/schemas/TrafficRuleList.schema.json b/MEC011/SRV/TRAF/schemas/TrafficRuleList.schema.json similarity index 100% rename from SRV/TRAF/schemas/TrafficRuleList.schema.json rename to MEC011/SRV/TRAF/schemas/TrafficRuleList.schema.json diff --git a/SRV/TRANS/PlatTransport.robot b/MEC011/SRV/TRANS/PlatTransport.robot similarity index 81% rename from SRV/TRANS/PlatTransport.robot rename to MEC011/SRV/TRANS/PlatTransport.robot index ade483f8076ab46abfbfb30fa9790be044f6a3da..6dd57cc963be378cac8309ef2c8b7d24824ec7c9 100644 --- a/SRV/TRANS/PlatTransport.robot +++ b/MEC011/SRV/TRANS/PlatTransport.robot @@ -3,7 +3,7 @@ Documentation ... A test suite for validating Transport (TRANS) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,12 +13,12 @@ Default Tags TC_MEC_SRV_TRANS *** Test Cases *** -TC_MEC_SRV_TRANS_001_OK +TP_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.1.1, clause 8.2.5.3.1 + ... 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 [Tags] PIC_MEC_PLAT PIC_SERVICES @@ -30,6 +30,7 @@ TC_MEC_SRV_TRANS_001_OK Get list of available transports Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Type":"*/*"} Get ${apiRoot}/${apiName}/${apiVersion}/transports ${output}= Output response Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/SRV/RLOCLOOK/README.md b/MEC011/SRV/TRANS/README.md similarity index 100% rename from SRV/RLOCLOOK/README.md rename to MEC011/SRV/TRANS/README.md diff --git a/SRV/TRANS/environment/variables.txt b/MEC011/SRV/TRANS/environment/variables.txt similarity index 93% rename from SRV/TRANS/environment/variables.txt rename to MEC011/SRV/TRANS/environment/variables.txt index 54a9fa3966b372918a594fd5cee455bdd9991795..f5a43dd1fc5697332990eea5997fff6c52d2000d 100644 --- a/SRV/TRANS/environment/variables.txt +++ b/MEC011/SRV/TRANS/environment/variables.txt @@ -1,7 +1,7 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 +${HOST} 127.0.0.1 ${PORT} 8081 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/SRV/TRANS/schemas/TransportInfoList.schema.json b/MEC011/SRV/TRANS/schemas/TransportInfoList.schema.json similarity index 100% rename from SRV/TRANS/schemas/TransportInfoList.schema.json rename to MEC011/SRV/TRANS/schemas/TransportInfoList.schema.json diff --git a/SRV/RNIS/README.md b/MEC012/SRV/RNIS/README.md similarity index 100% rename from SRV/RNIS/README.md rename to MEC012/SRV/RNIS/README.md diff --git a/SRV/RNIS/RnisNotifications.robot b/MEC012/SRV/RNIS/RnisNotifications.robot similarity index 76% rename from SRV/RNIS/RnisNotifications.robot rename to MEC012/SRV/RNIS/RnisNotifications.robot index 1e1ea97ef5c2222d50e450718e7f493c97aab474..6e5613d05d26da905e775c511ea14f28025ac952 100644 --- a/SRV/RNIS/RnisNotifications.robot +++ b/MEC012/SRV/RNIS/RnisNotifications.robot @@ -3,26 +3,28 @@ *** Settings *** Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +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 *** Test Cases *** -Cell change notification - [Documentation] TC_MEC_SRV_RNIS_001_OK +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 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_uri}${callback_endpoint}/cell_change body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -31,16 +33,17 @@ Cell change notification Clear Requests ${callback_endpoint} -RAB Establishment notification - [Documentation] TC_MEC_SRV_RNIS_002_OK +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 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_uri}${callback_endpoint}/rab_est body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -49,16 +52,17 @@ RAB Establishment notification Clear Requests ${callback_endpoint} -RAB modification notification - [Documentation] TC_MEC_SRV_RNIS_003_OK +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 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_uri}${callback_endpoint}/rab_mod body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -67,16 +71,17 @@ RAB modification notification Clear Requests ${callback_endpoint} -RAB release notification - [Documentation] TC_MEC_SRV_RNIS_004_OK +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 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_uri}${callback_endpoint}/rab_rel body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -85,16 +90,17 @@ RAB release notification Clear Requests ${callback_endpoint} -UE measurement notification - [Documentation] TC_MEC_SRV_RNIS_005_OK +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 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_uri}${callback_endpoint}/MeasRepUeNotification body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -103,16 +109,17 @@ UE measurement notification Clear Requests ${callback_endpoint} -UE timing advance notification - [Documentation] TC_MEC_SRV_RNIS_006_OK +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 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_uri}${callback_endpoint}/MeasTaNotification body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -121,16 +128,17 @@ UE timing advance notification Clear Requests ${callback_endpoint} -UE carrier aggregation reconfiguration notification - [Documentation] TC_MEC_SRV_RNIS_007_OK +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 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_uri}${callback_endpoint}/CaReconfSubscription body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -139,16 +147,17 @@ UE carrier aggregation reconfiguration notification Clear Requests ${callback_endpoint} -S1-U bearer notification - [Documentation] TC_MEC_SRV_RNIS_008_OK +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_uri}${callback_endpoint}/S1BearerSubscription body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -165,8 +174,9 @@ TC_MEC_SRV_RNIS_009_OK 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_uri}${callback_endpoint}/meas_rep_ue body_type="JSON_SCHEMA" body=${json} - &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + &{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 @@ -184,7 +194,8 @@ TC_MEC_SRV_RNIS_009_OK # ${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} - # &{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204 + #&{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 diff --git a/SRV/RNIS/RnisQuery_BI_BO.robot b/MEC012/SRV/RNIS/RnisQuery_BI_BO.robot similarity index 74% rename from SRV/RNIS/RnisQuery_BI_BO.robot rename to MEC012/SRV/RNIS/RnisQuery_BI_BO.robot index efd22f109e30e9eabef6ab2f2cbb62c7615912ea..172fb0d14cd86bd7ff6b357b4b06325697876462 100644 --- a/SRV/RNIS/RnisQuery_BI_BO.robot +++ b/MEC012/SRV/RNIS/RnisQuery_BI_BO.robot @@ -3,93 +3,94 @@ *** Settings *** Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +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 *** -Request RabInfo info using wrong parameters - [Documentation] TC_MEC_SRV_RNIS_016_BR +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 ... 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 - Check ProblemDetails 400 + Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 400 -Request RabInfo info using non existing cell id - [Documentation] TC_MEC_SRV_RNIS_016_BR +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 ... 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 404 - Check ProblemDetails 404 + 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 - -Request Plmn info using wrong parameters - [Documentation] TC_MEC_SRV_RNIS_017_BR +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 ... 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 - Check ProblemDetails 400 + Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 400 -Request Plmn info using non existing application id - [Documentation] TC_MEC_SRV_RNIS_017_NF +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 ... 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 404 - Check ProblemDetails 404 + 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 -Request S1Bearer info using wrong parameters - [Documentation] TC_MEC_SRV_RNIS_018_BR +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 ... 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 - Check ProblemDetails 400 + Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 400 -Request S1Bearer info using non existing cell id - [Documentation] TC_MEC_SRV_RNIS_018_BR +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 ... 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 404 - Check ProblemDetails 404 + 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 -Request L2Meas info using wrong parameters - [Documentation] TC_MEC_SRV_RNIS_019_BR +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 ... 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 - Check ProblemDetails 400 + Run Keyword If ${PIC_PROBLEM_DETAILS_ON_4xx} == 1 Check ProblemDetails 400 -Request L2Meas info using non existing cell id - [Documentation] TC_MEC_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 ... 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 404 - Check ProblemDetails 404 - + Check HTTP Response Status Code Is 200 + # TODO Check the returned list is empty *** Keywords *** Get RabInfo info using wrong parameters @@ -98,7 +99,7 @@ Get RabInfo info using wrong parameters Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get /exampleAPI/rni/v2/queries/rab_info?c_id=${C_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/rab_info?c_id=${C_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -108,7 +109,7 @@ Get RabInfo info using non existing cell id Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get /exampleAPI/rni/v2/queries/rab_info?cell_id=${NOT_EXISTENT_CELL_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/rab_info?cell_id=${NOT_EXISTENT_CELL_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -119,7 +120,7 @@ Get Plmn info using wrong parameters Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get /exampleAPI/rni/v2/queries/plmn_info?app_id=${APP_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?app_id=${APP_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -130,7 +131,7 @@ Get Plmn info using non existing application id Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get /exampleAPI/rni/v2/queries/plmn_info?app_ins_id=${NOT_EXISTENT_APP_INS_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/plmn_info?app_ins_id=${NOT_EXISTENT_APP_INS_ID} ${output}= Output response Set Suite Variable ${response} ${output} @@ -141,7 +142,7 @@ Get S1Bearer info using wrong parameters Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Get /exampleAPI/rni/v2/queries/s1_bearer_info?c_id=${C_ID} + Get ${apiRoot}/rni/${apiVersion}/queries/s1_bearer_info?c_id=${C_ID} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/SRV/RNIS/RnisQuery_BV.robot b/MEC012/SRV/RNIS/RnisQuery_BV.robot similarity index 86% rename from SRV/RNIS/RnisQuery_BV.robot rename to MEC012/SRV/RNIS/RnisQuery_BV.robot index 2ba3f34bd8cc5eb8672c2bdcbf548f1909716069..17722be12f668bf3f22f84486b13a64d71ebb362 100644 --- a/SRV/RNIS/RnisQuery_BV.robot +++ b/MEC012/SRV/RNIS/RnisQuery_BV.robot @@ -3,38 +3,38 @@ *** Settings *** Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +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 *** -Request RabInfo info - [Documentation] TC_MEC_SRV_RNIS_016_OK +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 RabInfos + Check HTTP Response Body Json Schema Is RabInfo Check RabInfo ${response['body']} -Request Plmn info - [Documentation] TC_MEC_SRV_RNIS_017_OK +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']} + Check PlmnInfo ${response['body'][0]} -Request S1Bearer info - [Documentation] TC_MEC_SRV_RNIS_018_OK +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 @@ -43,15 +43,16 @@ Request S1Bearer info Check HTTP Response Body Json Schema Is S1BearerInfos #log ${response['body']} Check S1BearerInfo ${response['body']} - -Request L2Meas info - [Documentation] TC_MEC_SRV_RNIS_019_OK + + +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 Layer2MeasInfos + Check HTTP Response Body Json Schema Is L2Meas Check L2MeasInfo ${response['body']} diff --git a/SRV/RNIS/RnisSubscriptions_BI_BO.robot b/MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot similarity index 79% rename from SRV/RNIS/RnisSubscriptions_BI_BO.robot rename to MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot index f513c717e3b6d63cfdf35643fe4ab0d7868c28e8..0a05314ccfb956441e81f25289a97fe7c6bd4687 100644 --- a/SRV/RNIS/RnisSubscriptions_BI_BO.robot +++ b/MEC012/SRV/RNIS/RnisSubscriptions_BI_BO.robot @@ -3,16 +3,14 @@ *** Settings *** Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +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 *** -Request RNIS subscription list using bad parameters - [Documentation] TC_MEC_SRV_RNIS_011_BR +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 @@ -20,15 +18,14 @@ Request RNIS subscription list using bad parameters Check HTTP Response Status Code Is 400 -Create RNIS subscription using bad parameters - [Documentation] TC_MEC_SRV_RNIS_012_BR +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": "${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}}} + 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 diff --git a/SRV/RNIS/RnisSubscriptions_BV.robot b/MEC012/SRV/RNIS/RnisSubscriptions_BV.robot similarity index 78% rename from SRV/RNIS/RnisSubscriptions_BV.robot rename to MEC012/SRV/RNIS/RnisSubscriptions_BV.robot index f351d342681e55c462b96ae9b804626db5cf5ed2..44301fe702412252b15baed3cbcbb5998fd91aa6 100644 --- a/SRV/RNIS/RnisSubscriptions_BV.robot +++ b/MEC012/SRV/RNIS/RnisSubscriptions_BV.robot @@ -4,57 +4,59 @@ *** Settings *** Library OperatingSystem Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +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 *** -Request RNIS subscription list - [Documentation] TC_MEC_SRV_RNIS_011_OK +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 - Check Subscription ${response['body']} ${SUBSCRIPTION_VALUE} + # 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} -Create RNIS subscription - [Documentation] TC_MEC_SRV_RNIS_012_OK +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 CellChangeSubscription + Post RNIS subscription request CellChangeSubscriptionRequest Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is CellChangeSubscriptionRequest + Check HTTP Response Body Json Schema Is CellChangeSubscription Check CellChangeSubscription ${response['body']} -Get an Individual RNIS subscription - [Documentation] TC_MEC_SRV_RNIS_013_OK +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 CellChangeSubscriptionRequest + Check HTTP Response Body Json Schema Is CellChangeSubscription -Update an Individual RNIS subscription - [Documentation] TC_MEC_SRV_RNIS_014_OK +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 CellChangeSubscriptionRequest + Check HTTP Response Body Json Schema Is CellChangeSubscription -Remove an Individual RNIS subscription - [Documentation] TC_MEC_SRV_RNIS_015_OK + +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 @@ -79,7 +81,11 @@ Post RNIS subscription request Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - ${body} Get File jsons/CellChangeSubscriptionRequest.json + ${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} @@ -94,7 +100,7 @@ Get Individual RNIS Subscription 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 @@ -102,10 +108,13 @@ Update Individual RNIS Subscription 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 diff --git a/SRV/RNIS/environment/pics.txt b/MEC012/SRV/RNIS/environment/pics.txt similarity index 100% rename from SRV/RNIS/environment/pics.txt rename to MEC012/SRV/RNIS/environment/pics.txt diff --git a/SRV/RNIS/environment/variables.txt b/MEC012/SRV/RNIS/environment/variables.txt similarity index 53% rename from SRV/RNIS/environment/variables.txt rename to MEC012/SRV/RNIS/environment/variables.txt index d66fb53e73cde544bff20a4aaa1c3de23e89b297..8853f8d96d4ec0422c3f0c1918695f8c0c17a717 100644 --- a/SRV/RNIS/environment/variables.txt +++ b/MEC012/SRV/RNIS/environment/variables.txt @@ -1,36 +1,35 @@ *** Variables *** ${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} 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://meAppClient.example.com/rni/v1/notifications/cell_change/77777 -${SUBSCRIPTION_VALUE} {'href': '${HREF}', 'subscriptionType': '${SUBSCRIPTION_TYPE}'} -${CELL_ID} 0x800000A -${C_ID} 0xFFFFFFF +${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} 01 +${APP_INS_ID} ${APP_ID} 10 ${NOT_EXISTENT_APP_INS_ID} 99 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${apiRoot} +${apiRoot} /example ${apiVersion} v2 +${PIC_PROBLEM_DETAILS_ON_4xx} 0 # Notifications variables ${MOCK_SERVER_JAR} ../../../bin/mockserver-netty-5.5.0-jar-with-dependencies.jar -${callback_port} 9091 -${callback_uri} http://192.168.56.103:${callback_port} -${callback_endpoint} /subscriptions +${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 diff --git a/SRV/RNIS/jsons/CellChangeSubscriptionRequest.json b/MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequest.json similarity index 100% rename from SRV/RNIS/jsons/CellChangeSubscriptionRequest.json rename to MEC012/SRV/RNIS/jsons/CellChangeSubscriptionRequest.json diff --git a/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json b/MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json similarity index 100% rename from SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json rename to MEC012/SRV/RNIS/jsons/UpdateCellChangeSubscriptionRequest.json diff --git a/SRV/RNIS/resources/LocationAPI.robot b/MEC012/SRV/RNIS/resources/LocationAPI.robot similarity index 100% rename from SRV/RNIS/resources/LocationAPI.robot rename to MEC012/SRV/RNIS/resources/LocationAPI.robot diff --git a/SRV/RNIS/resources/RadioNetworkInformationAPI.robot b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot similarity index 78% rename from SRV/RNIS/resources/RadioNetworkInformationAPI.robot rename to MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot index 05edc8fb85737f73445e0240594420731389bf1e..51323d4182be85895502c43b2fc2fd419e2fb897 100644 --- a/SRV/RNIS/resources/RadioNetworkInformationAPI.robot +++ b/MEC012/SRV/RNIS/resources/RadioNetworkInformationAPI.robot @@ -1,7 +1,7 @@ *** Settings *** Resource ../environment/variables.txt -Resource ../../../pics.txt -Resource ../../../GenericKeywords.robot +Resource ../../../../pics.txt +Resource ../../../../GenericKeywords.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false Library JSONSchemaLibrary schemas/ @@ -19,16 +19,14 @@ Check Subscription Check CellChangeSubscription [Arguments] ${received_value} - Should Be Equal ${received_value['_links']['self']} ${LINKS_SELF} + Should Be Equal ${received_value['_links']['self']['href']} ${LINKS_SELF} Check RabInfo [Arguments] ${received_value} log ${received_value} - Should Be Equal As Strings ${received_value['appInstanceId']} ${APP_INS_ID} Should Not Be Empty ${received_value['requestId']} - Should Be Equal As Strings ${received_value['cellUserInfo'][0]['ecgi']['cellId']} ${CELL_ID} - + 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} @@ -46,4 +44,4 @@ Check S1BearerInfo Check L2MeasInfo [Arguments] ${received_value} log ${received_value} - Should Be Equal As Strings ${received_value['cellInfo']['ecgi']['cellId']} ${CELL_ID} + Should Be Equal As Strings ${received_value['cellInfo'][0]['ecgi']['cellId']} ${CELL_ID} diff --git a/SRV/RNIS/schemas/CaReconfSubscription.schema.json b/MEC012/SRV/RNIS/schemas/CaReconfSubscription.schema.json similarity index 100% rename from SRV/RNIS/schemas/CaReconfSubscription.schema.json rename to MEC012/SRV/RNIS/schemas/CaReconfSubscription.schema.json diff --git a/SRV/RNIS/schemas/CellChangeNotification.schema.json b/MEC012/SRV/RNIS/schemas/CellChangeNotification.schema.json similarity index 100% rename from SRV/RNIS/schemas/CellChangeNotification.schema.json rename to MEC012/SRV/RNIS/schemas/CellChangeNotification.schema.json diff --git a/SRV/RNIS/schemas/CellChangeSubscription.schema.json b/MEC012/SRV/RNIS/schemas/CellChangeSubscription.schema.json similarity index 100% rename from SRV/RNIS/schemas/CellChangeSubscription.schema.json rename to MEC012/SRV/RNIS/schemas/CellChangeSubscription.schema.json diff --git a/SRV/RNIS/schemas/L2Meas.schema.json b/MEC012/SRV/RNIS/schemas/L2Meas.schema.json similarity index 100% rename from SRV/RNIS/schemas/L2Meas.schema.json rename to MEC012/SRV/RNIS/schemas/L2Meas.schema.json diff --git a/SRV/RNIS/schemas/L2MeasInfos.schema.json b/MEC012/SRV/RNIS/schemas/L2MeasInfos.schema.json similarity index 100% rename from SRV/RNIS/schemas/L2MeasInfos.schema.json rename to MEC012/SRV/RNIS/schemas/L2MeasInfos.schema.json diff --git a/SRV/RNIS/schemas/MeasRepUeNotification.schema.json b/MEC012/SRV/RNIS/schemas/MeasRepUeNotification.schema.json similarity index 100% rename from SRV/RNIS/schemas/MeasRepUeNotification.schema.json rename to MEC012/SRV/RNIS/schemas/MeasRepUeNotification.schema.json diff --git a/SRV/RNIS/schemas/MeasTaSubscription.schema.json b/MEC012/SRV/RNIS/schemas/MeasTaSubscription.schema.json similarity index 100% rename from SRV/RNIS/schemas/MeasTaSubscription.schema.json rename to MEC012/SRV/RNIS/schemas/MeasTaSubscription.schema.json diff --git a/SRV/RNIS/schemas/NrMeasRepUeSubscription.schema.json b/MEC012/SRV/RNIS/schemas/NrMeasRepUeSubscription.schema.json similarity index 100% rename from SRV/RNIS/schemas/NrMeasRepUeSubscription.schema.json rename to MEC012/SRV/RNIS/schemas/NrMeasRepUeSubscription.schema.json diff --git a/SRV/RNIS/schemas/PlmnInfo.schema.json b/MEC012/SRV/RNIS/schemas/PlmnInfo.schema.json similarity index 100% rename from SRV/RNIS/schemas/PlmnInfo.schema.json rename to MEC012/SRV/RNIS/schemas/PlmnInfo.schema.json diff --git a/SRV/RNIS/schemas/PlmnInfos.schema.json b/MEC012/SRV/RNIS/schemas/PlmnInfos.schema.json similarity index 100% rename from SRV/RNIS/schemas/PlmnInfos.schema.json rename to MEC012/SRV/RNIS/schemas/PlmnInfos.schema.json diff --git a/SRV/RNIS/schemas/RabEstNotification.schema.json b/MEC012/SRV/RNIS/schemas/RabEstNotification.schema.json similarity index 100% rename from SRV/RNIS/schemas/RabEstNotification.schema.json rename to MEC012/SRV/RNIS/schemas/RabEstNotification.schema.json diff --git a/SRV/RNIS/schemas/RabInfo.schema.json b/MEC012/SRV/RNIS/schemas/RabInfo.schema.json similarity index 97% rename from SRV/RNIS/schemas/RabInfo.schema.json rename to MEC012/SRV/RNIS/schemas/RabInfo.schema.json index c3be426815e053c535769658963eef842ac17aa9..bb3c80831db46022713e68bc6622b46683adadf7 100644 --- a/SRV/RNIS/schemas/RabInfo.schema.json +++ b/MEC012/SRV/RNIS/schemas/RabInfo.schema.json @@ -57,10 +57,7 @@ "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", + "type": "number", "x-etsi-mec-cardinality": "1", "x-etsi-mec-origin-type": "Enum" }, @@ -152,4 +149,4 @@ "x-etsi-ref": "6.5.3" } } -} \ No newline at end of file +} diff --git a/SRV/RNIS/schemas/RabInfos.schema.json b/MEC012/SRV/RNIS/schemas/RabInfos.schema.json similarity index 100% rename from SRV/RNIS/schemas/RabInfos.schema.json rename to MEC012/SRV/RNIS/schemas/RabInfos.schema.json diff --git a/SRV/RNIS/schemas/RabModNotification.schema.json b/MEC012/SRV/RNIS/schemas/RabModNotification.schema.json similarity index 100% rename from SRV/RNIS/schemas/RabModNotification.schema.json rename to MEC012/SRV/RNIS/schemas/RabModNotification.schema.json diff --git a/SRV/RNIS/schemas/RabRelNotification.schema.json b/MEC012/SRV/RNIS/schemas/RabRelNotification.schema.json similarity index 100% rename from SRV/RNIS/schemas/RabRelNotification.schema.json rename to MEC012/SRV/RNIS/schemas/RabRelNotification.schema.json diff --git a/SRV/RNIS/schemas/S1BearerInfo.schema.json b/MEC012/SRV/RNIS/schemas/S1BearerInfo.schema.json similarity index 100% rename from SRV/RNIS/schemas/S1BearerInfo.schema.json rename to MEC012/SRV/RNIS/schemas/S1BearerInfo.schema.json diff --git a/SRV/RNIS/schemas/S1BearerInfos.schema.json b/MEC012/SRV/RNIS/schemas/S1BearerInfos.schema.json similarity index 100% rename from SRV/RNIS/schemas/S1BearerInfos.schema.json rename to MEC012/SRV/RNIS/schemas/S1BearerInfos.schema.json diff --git a/SRV/RNIS/schemas/S1BearerSubscription.schema.json b/MEC012/SRV/RNIS/schemas/S1BearerSubscription.schema.json similarity index 100% rename from SRV/RNIS/schemas/S1BearerSubscription.schema.json rename to MEC012/SRV/RNIS/schemas/S1BearerSubscription.schema.json diff --git a/SRV/RNIS/schemas/SubscriptionLinkList.schema.json b/MEC012/SRV/RNIS/schemas/SubscriptionLinkList.schema.json similarity index 100% rename from SRV/RNIS/schemas/SubscriptionLinkList.schema.json rename to MEC012/SRV/RNIS/schemas/SubscriptionLinkList.schema.json diff --git a/SRV/RLOCLOOK/PlatRadioNodeLocation.robot b/MEC013/SRV/RLOCLOOK/PlatRadioNodeLocation.robot similarity index 86% rename from SRV/RLOCLOOK/PlatRadioNodeLocation.robot rename to MEC013/SRV/RLOCLOOK/PlatRadioNodeLocation.robot index aaa807f9f484935b056a1b49847056d848784858..11e4ced2ca1235839ea32e06ed1c02503ab6695b 100644 --- a/SRV/RLOCLOOK/PlatRadioNodeLocation.robot +++ b/MEC013/SRV/RLOCLOOK/PlatRadioNodeLocation.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating Radio Node Location Lookup (RLOCLOOK) operations. -Resource ../../GenericKeywords.robot +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,7 +14,7 @@ Default Tags TC_MEC_SRV_RLOCLOOK *** Test Cases *** -TC_MEC_SRV_RLOCLOOK_001_OK +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 @@ -25,10 +26,10 @@ TC_MEC_SRV_RLOCLOOK_001_OK Get the access points list ${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']['accessPointList']['zoneId']} ${ZONE_ID} -TC_MEC_SRV_RLOCLOOK_001_NF +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 @@ -45,7 +46,7 @@ Get the access points list [Arguments] ${zoneId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/zones/${zoneId}/accessPoints + Get ${apiRoot}/${apiName}/${apiVersion}/queries/zones/${zoneId}/accessPoints ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/SRV/SAQ/README.md b/MEC013/SRV/RLOCLOOK/README.md similarity index 100% rename from SRV/SAQ/README.md rename to MEC013/SRV/RLOCLOOK/README.md diff --git a/SRV/RLOCLOOK/environment/variables.txt b/MEC013/SRV/RLOCLOOK/environment/variables.txt similarity index 100% rename from SRV/RLOCLOOK/environment/variables.txt rename to MEC013/SRV/RLOCLOOK/environment/variables.txt diff --git a/MEC013/SRV/RLOCLOOK/schemas/AccessPointInfo.schema.json b/MEC013/SRV/RLOCLOOK/schemas/AccessPointInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..5bf6106275f2e33d040873ba2088add0e9e776f7 --- /dev/null +++ b/MEC013/SRV/RLOCLOOK/schemas/AccessPointInfo.schema.json @@ -0,0 +1,245 @@ +{ + "type": "object", + "properties": { + "accessPointInfo": { + "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 deg to +90 deg. 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 deg to +180 deg. 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 deg to 180 deg, 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", + "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'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:

1 = HORIZONTAL

2 = HORIZONTAL_VERTICAL

3 = HORIZONTAL_UNCERT

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" + } + } +} \ No newline at end of file diff --git a/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.json b/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..2a37408f034eacecfab37db3eb2aad2d9e503676 --- /dev/null +++ b/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.json @@ -0,0 +1,270 @@ +{ + "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:

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", + "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:

1 = HORIZONTAL

2 = HORIZONTAL_VERTICAL

3 = HORIZONTAL_UNCERT

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 diff --git a/SRV/RLOCLOOK/schemas/AccessPointList.schema.v1.1.1.json b/MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.v1.1.1.json similarity index 100% rename from SRV/RLOCLOOK/schemas/AccessPointList.schema.v1.1.1.json rename to MEC013/SRV/RLOCLOOK/schemas/AccessPointList.schema.v1.1.1.json diff --git a/SRV/UEAREASUB/PlatUeAreaSubscription.robot b/MEC013/SRV/UEAREASUB/PlatUeAreaSubscription.robot similarity index 93% rename from SRV/UEAREASUB/PlatUeAreaSubscription.robot rename to MEC013/SRV/UEAREASUB/PlatUeAreaSubscription.robot index 1bdc1f9ef5d8d5aed4bb657664427a9d459176d3..35eb1170e9699033bb5d03b61549fdac01096631 100644 --- a/SRV/UEAREASUB/PlatUeAreaSubscription.robot +++ b/MEC013/SRV/UEAREASUB/PlatUeAreaSubscription.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating UE Area Subscribe (UEAREASUB) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,7 +14,7 @@ Default Tags TC_MEC_SRV_UEAREASUB *** Test Cases *** -TC_MEC_SRV_UEAREASUB_001_OK +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 @@ -30,7 +31,7 @@ TC_MEC_SRV_UEAREASUB_001_OK -TC_MEC_SRV_UEAREASUB_001_BR +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 @@ -42,7 +43,7 @@ TC_MEC_SRV_UEAREASUB_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_UEAREASUB_002_OK +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 @@ -54,7 +55,7 @@ TC_MEC_SRV_UEAREASUB_002_OK Check HTTP Response Status Code Is 204 -TC_MEC_SRV_UEAREASUB_002_NF +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 diff --git a/SRV/SRVSUB/README.md b/MEC013/SRV/UEAREASUB/README.md similarity index 100% rename from SRV/SRVSUB/README.md rename to MEC013/SRV/UEAREASUB/README.md diff --git a/SRV/UEAREASUB/environment/variables.txt b/MEC013/SRV/UEAREASUB/environment/variables.txt similarity index 100% rename from SRV/UEAREASUB/environment/variables.txt rename to MEC013/SRV/UEAREASUB/environment/variables.txt diff --git a/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json b/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..17b185bf2813579d602252751c22af5b74bb6d3d --- /dev/null +++ b/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json @@ -0,0 +1,17 @@ +{ + "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 new file mode 100644 index 0000000000000000000000000000000000000000..337880370f87affc6fe003a5848e47eabc7d5691 --- /dev/null +++ b/MEC013/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json @@ -0,0 +1,17 @@ +{ + "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/schemas/CircleNotificationSubscription.schema.json b/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..84f4a28f6a731357923960954f2c507bef5d4c24 --- /dev/null +++ b/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json @@ -0,0 +1,177 @@ +{ + "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/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json b/MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json similarity index 100% rename from SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json rename to MEC013/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.v1.1.1.json diff --git a/MEC013/SRV/UEAREASUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEAREASUB/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..c7c8284e28dfbdd585aa5dca51b777560a30ea31 --- /dev/null +++ b/MEC013/SRV/UEAREASUB/schemas/NotificationSubscriptionList.schema.json @@ -0,0 +1,715 @@ +{ + "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/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot b/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot similarity index 92% rename from SRV/UEDISTLOOK/PlatUeDistanceLookup.robot rename to MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot index 6cc9c8d951ed16f6f4253799e1474d6c2eefe785..74dc0b1d55bebaeda29cfcbdca05caa8369e13b2 100644 --- a/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot +++ b/MEC013/SRV/UEDISTLOOK/PlatUeDistanceLookup.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating UE Distance Lookup (UEDISTLOOK) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -17,7 +18,7 @@ ${response} *** Test Cases *** -TC_MEC_SRV_UEDISTLOOK_001_OK +TC_MEC_MEC013_SRV_UEDISTLOOK_001_OK [Documentation] ... Check that the IUT responds with the distance to a UE ... when queried by a MEC Application @@ -35,7 +36,7 @@ TC_MEC_SRV_UEDISTLOOK_001_OK Check HTTP Response Body Json Schema Is TerminalDistance -TC_MEC_SRV_UEDISTLOOK_001_BR +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 diff --git a/SRV/TIME/README.md b/MEC013/SRV/UEDISTLOOK/README.md similarity index 100% rename from SRV/TIME/README.md rename to MEC013/SRV/UEDISTLOOK/README.md diff --git a/SRV/UEDISTLOOK/environment/variables.txt b/MEC013/SRV/UEDISTLOOK/environment/variables.txt similarity index 100% rename from SRV/UEDISTLOOK/environment/variables.txt rename to MEC013/SRV/UEDISTLOOK/environment/variables.txt diff --git a/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json b/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..ccee80aa3c7a00fba3b0266c1dd071bee60fc1a5 --- /dev/null +++ b/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json @@ -0,0 +1,50 @@ +{ + "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/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json b/MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json similarity index 100% rename from SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json rename to MEC013/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.v1.1.1.json diff --git a/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot b/MEC013/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot similarity index 92% rename from SRV/UEDISTSUB/PlatUeDistanceSubscription.robot rename to MEC013/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot index 2db3839f1257485d9a7423b33149ea74b32b8594..fd3e3a51f1ccb4c8bda2d8341febf9c4187d0be5 100644 --- a/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot +++ b/MEC013/SRV/UEDISTSUB/PlatUeDistanceSubscription.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating UE Distance Subscribe (UEDISTSUB) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,7 +14,7 @@ Default Tags TC_MEC_SRV_UEDISTSUB *** Test Cases *** -TC_MEC_SRV_UEDISTSUB_001_OK +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 @@ -31,7 +32,7 @@ TC_MEC_SRV_UEDISTSUB_001_OK Check Result Contains ${response['body']['distanceNotificationSubscription']} referenceAddress ${UEDISTSUB_IP_ADDRESS} -TC_MEC_SRV_UEDISTSUB_001_BR +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 @@ -43,7 +44,7 @@ TC_MEC_SRV_UEDISTSUB_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_UEDISTSUB_002_OK +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 @@ -55,7 +56,7 @@ TC_MEC_SRV_UEDISTSUB_002_OK Check HTTP Response Status Code Is 204 -TC_MEC_SRV_UEDISTSUB_002_NF +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 diff --git a/SRV/TRAF/README.md b/MEC013/SRV/UEDISTSUB/README.md similarity index 100% rename from SRV/TRAF/README.md rename to MEC013/SRV/UEDISTSUB/README.md diff --git a/SRV/UEDISTSUB/environment/variables.txt b/MEC013/SRV/UEDISTSUB/environment/variables.txt similarity index 100% rename from SRV/UEDISTSUB/environment/variables.txt rename to MEC013/SRV/UEDISTSUB/environment/variables.txt diff --git a/SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json b/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json similarity index 100% rename from SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json rename to MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscription.json diff --git a/SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json b/MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json similarity index 100% rename from SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json rename to MEC013/SRV/UEDISTSUB/jsons/DistanceNotificationSubscriptionError.json diff --git a/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json b/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..cfa696350851e711f3d75b16615bba9fc8f6febf --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json @@ -0,0 +1,174 @@ +{ + "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/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json b/MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json similarity index 100% rename from SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json rename to MEC013/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.v1.1.1.json diff --git a/MEC013/SRV/UEDISTSUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEDISTSUB/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3a495cdf2901ada65ccef735d6f744843db6c861 --- /dev/null +++ b/MEC013/SRV/UEDISTSUB/schemas/NotificationSubscriptionList.schema.json @@ -0,0 +1,715 @@ +{ + "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/SRV/UEINFOLOOK/PlatUeInformationLookup.robot b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot similarity index 85% rename from SRV/UEINFOLOOK/PlatUeInformationLookup.robot rename to MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot index 8a5ba3f085a0894334fceb54294c275e2cd60edd..2f12c916f3ccb8a6477f82da4ec13188df9d5fcb 100644 --- a/SRV/UEINFOLOOK/PlatUeInformationLookup.robot +++ b/MEC013/SRV/UEINFOLOOK/PlatUeInformationLookup.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating UE Information Lookup (UEINFOLOOK) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,7 +14,7 @@ Default Tags TC_MEC_SRV_UEINFOLOOK *** Test Cases *** -TC_MEC_SRV_UEINFOLOOK_001_OK +TC_MEC_MEC013_SRV_UEINFOLOOK_001_OK [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 @@ -27,7 +28,7 @@ TC_MEC_SRV_UEINFOLOOK_001_OK Check HTTP Response Body Json Schema Is UserList -TC_MEC_SRV_UEINFOLOOK_001_BR +TC_MEC_MEC013_SRV_UEINFOLOOK_001_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -39,7 +40,7 @@ TC_MEC_SRV_UEINFOLOOK_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_UEINFOLOOK_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 @@ -49,13 +50,14 @@ TC_MEC_SRV_UEINFOLOOK_001_NF [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of users with filter address ${ACR_UNKNOWN_IP} - Check HTTP Response Status Code Is 404 + Check HTTP Response Status Code Is 200 + # TODO add check that list is empty *** Keywords *** Get list of users with filter [Arguments] ${key} ${value} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/users?${key}=${value} + Get ${apiRoot}/${apiName}/${apiVersion}/queries/users?${key}=${value} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/SRV/TRANS/README.md b/MEC013/SRV/UEINFOLOOK/README.md similarity index 100% rename from SRV/TRANS/README.md rename to MEC013/SRV/UEINFOLOOK/README.md diff --git a/SRV/UEINFOLOOK/environment/variables.txt b/MEC013/SRV/UEINFOLOOK/environment/variables.txt similarity index 100% rename from SRV/UEINFOLOOK/environment/variables.txt rename to MEC013/SRV/UEINFOLOOK/environment/variables.txt diff --git a/SRV/UEINFOLOOK/jsons/UserList.json b/MEC013/SRV/UEINFOLOOK/jsons/UserList.json similarity index 100% rename from SRV/UEINFOLOOK/jsons/UserList.json rename to MEC013/SRV/UEINFOLOOK/jsons/UserList.json diff --git a/SRV/UEINFOLOOK/schemas/UserList.schema.json b/MEC013/SRV/UEINFOLOOK/schemas/UserList.schema.json similarity index 96% rename from SRV/UEINFOLOOK/schemas/UserList.schema.json rename to MEC013/SRV/UEINFOLOOK/schemas/UserList.schema.json index f32b4edcb97d50de0eabd897156403468a6eb35c..65aefa0403d6e630728b6314856dee4373f7bdaf 100644 --- a/SRV/UEINFOLOOK/schemas/UserList.schema.json +++ b/MEC013/SRV/UEINFOLOOK/schemas/UserList.schema.json @@ -65,7 +65,7 @@ "type": "number" }, "latitude": { - "description": "Location latitude, expressed in the range -90° to +90°. Cardinality greater than one only if \"shape\" equals 7.", + "description": "Location latitude, expressed in the range -90 deg to +90 deg. Cardinality greater than one only if \"shape\" equals 7.", "items": { "type": "number" }, @@ -74,7 +74,7 @@ "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.", + "description": "Location longitude, expressed in the range -180 deg to +180 deg. Cardinality greater than one only if \"shape\" equals 7.", "items": { "type": "number" }, diff --git a/SRV/UEINFOSUB/PlatUeInformationSubscription.robot b/MEC013/SRV/UEINFOSUB/PlatUeInformationSubscription.robot similarity index 95% rename from SRV/UEINFOSUB/PlatUeInformationSubscription.robot rename to MEC013/SRV/UEINFOSUB/PlatUeInformationSubscription.robot index dff29f71416c6e01874ed7fe4cf947fe66df32fc..2431cb420f2bafa0853c49c2172f3f5ec77d2f6d 100644 --- a/SRV/UEINFOSUB/PlatUeInformationSubscription.robot +++ b/MEC013/SRV/UEINFOSUB/PlatUeInformationSubscription.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating UE Information Subscription (UEINFOSUB) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,7 +14,7 @@ Default Tags TC_MEC_SRV_UEINFOSUB *** Test Cases *** -TC_MEC_SRV_UEINFOSUB_001_OK +TC_MEC_MEC013_SRV_UEINFOSUB_001_OK [Documentation] ... Check that the IUT acknowledges the UE information change subscription request ... when commanded by a MEC Application and notifies it when the location changes @@ -30,7 +31,7 @@ TC_MEC_SRV_UEINFOSUB_001_OK Should Be Equal As Strings ${response['body']['zonalTrafficSubscription']['callbackReference']} ${ZONAL_TRAF_NOTIF_CALLBACK_URI} -TC_MEC_SRV_UEINFOSUB_001_BR +TC_MEC_MEC013_SRV_UEINFOSUB_001_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -43,7 +44,7 @@ TC_MEC_SRV_UEINFOSUB_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_UEINFOSUB_002_OK +TC_MEC_MEC013_SRV_UEINFOSUB_002_OK [Documentation] ... Check that the IUT acknowledges the cancellation of UE information change notifications ... when commanded by a MEC Application diff --git a/SRV/UEAREASUB/README.md b/MEC013/SRV/UEINFOSUB/README.md similarity index 100% rename from SRV/UEAREASUB/README.md rename to MEC013/SRV/UEINFOSUB/README.md diff --git a/SRV/UEINFOSUB/environment/variables.txt b/MEC013/SRV/UEINFOSUB/environment/variables.txt similarity index 100% rename from SRV/UEINFOSUB/environment/variables.txt rename to MEC013/SRV/UEINFOSUB/environment/variables.txt diff --git a/SRV/UEINFOSUB/jsons/ZonalTrafficSubscription.json b/MEC013/SRV/UEINFOSUB/jsons/ZonalTrafficSubscription.json similarity index 100% rename from SRV/UEINFOSUB/jsons/ZonalTrafficSubscription.json rename to MEC013/SRV/UEINFOSUB/jsons/ZonalTrafficSubscription.json diff --git a/SRV/UEINFOSUB/jsons/ZonalTrafficSubscriptionError.json b/MEC013/SRV/UEINFOSUB/jsons/ZonalTrafficSubscriptionError.json similarity index 100% rename from SRV/UEINFOSUB/jsons/ZonalTrafficSubscriptionError.json rename to MEC013/SRV/UEINFOSUB/jsons/ZonalTrafficSubscriptionError.json diff --git a/MEC013/SRV/UEINFOSUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UEINFOSUB/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3a495cdf2901ada65ccef735d6f744843db6c861 --- /dev/null +++ b/MEC013/SRV/UEINFOSUB/schemas/NotificationSubscriptionList.schema.json @@ -0,0 +1,715 @@ +{ + "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/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.json b/MEC013/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..e0d6fb6eda4a067ffe09460347e316c20a4727f8 --- /dev/null +++ b/MEC013/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.json @@ -0,0 +1,89 @@ +{ + "type": "object", + "properties": { + "zonalTrafficSubscription": { + "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" + } + } +} \ No newline at end of file diff --git a/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.v1.1.1.json b/MEC013/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.v1.1.1.json similarity index 100% rename from SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.v1.1.1.json rename to MEC013/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.v1.1.1.json diff --git a/SRV/UELOCLOOK/PlatUeLocationLookup.robot b/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot similarity index 82% rename from SRV/UELOCLOOK/PlatUeLocationLookup.robot rename to MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot index e9923a6bffe28dd460df054fbd279a59b6f7bfdd..fbe984114a976e7d46efb49a223e6fe7ff6a85d4 100644 --- a/SRV/UELOCLOOK/PlatUeLocationLookup.robot +++ b/MEC013/SRV/UELOCLOOK/PlatUeLocationLookup.robot @@ -3,8 +3,8 @@ Documentation ... A test suite for validating UE Location Lookup (UELOCLOOK) operations. - -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -16,7 +16,7 @@ ${response} *** Test Cases *** -TC_MEC_SRV_UELOCLOOK_001_OK +TC_MEC_MEC013_SRV_UELOCLOOK_001_OK [Documentation] ... Check that the IUT responds with a list for the location of User Equipments ... when queried by a MEC Application @@ -30,8 +30,7 @@ TC_MEC_SRV_UELOCLOOK_001_OK Check HTTP Response Body Json Schema Is UserList Check Result Contains ${response['body']['userList']['user']} zoneId ${ZONE_ID} - -TC_MEC_SRV_UELOCLOOK_001_BR +TC_MEC_MEC013_SRV_UELOCLOOK_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 +38,10 @@ TC_MEC_SRV_UELOCLOOK_001_BR ... Reference ETSI GS MEC 013 V2.1.1, clause 7.3.3 [Tags] PIC_MEC_PLAT PIC_SERVICES - Get list of user equipments zone ${ZONE_ID} + Get list of user equipments z0n3 ${ZONE_ID} Check HTTP Response Status Code Is 400 - -TC_MEC_SRV_UELOCLOOK_001_NF +TC_MEC_MEC013_SRV_UELOCLOOK_001_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -52,12 +50,9 @@ TC_MEC_SRV_UELOCLOOK_001_NF [Tags] PIC_MEC_PLAT PIC_SERVICES Get list of user equipments zoneId ${NON_EXISTENT_ZONE_ID} - Check HTTP Response Status Code Is 404 - - - + Check HTTP Response Status Code Is 200 -TC_MEC_SRV_UELOCLOOK_002_OK +TC_MEC_MEC013_SRV_UELOCLOOK_002_OK [Documentation] ... Check that the IUT responds with a User Equipment information ... when queried by a MEC Application @@ -66,12 +61,13 @@ TC_MEC_SRV_UELOCLOOK_002_OK ... OpenAPI https://forge.etsi.org/gitlab/mec/gs013-location-api/blob/master/LocationAPI.yaml#/definitions/UserInfo [Tags] PIC_MEC_PLAT PIC_SERVICES - Get specific user equipments ${USER_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is UserInfo + Log Deprecated + # Get specific user equipments ${USER_ID} + # Check HTTP Response Status Code Is 200 + # Check HTTP Response Body Json Schema Is UserInfo -TC_MEC_SRV_UELOCLOOK_002_NF +TC_MEC_MEC013_SRV_UELOCLOOK_002_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -87,7 +83,7 @@ Get list of user equipments [Arguments] ${key} ${value} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/users?${key}=${value} + Get ${apiRoot}/${apiName}/${apiVersion}/queries/users?${key}=${value} ${output}= Output response Set Suite Variable ${response} ${output} @@ -96,6 +92,6 @@ Get specific user equipments [Arguments] ${userId} Set Headers {"Accept":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/users/${userId} + Get ${apiRoot}/${apiName}/${apiVersion}/queries/users/${userId} ${output}= Output response Set Suite Variable ${response} ${output} diff --git a/SRV/UEDISTLOOK/README.md b/MEC013/SRV/UELOCLOOK/README.md similarity index 100% rename from SRV/UEDISTLOOK/README.md rename to MEC013/SRV/UELOCLOOK/README.md diff --git a/SRV/UELOCLOOK/environment/variables.txt b/MEC013/SRV/UELOCLOOK/environment/variables.txt similarity index 100% rename from SRV/UELOCLOOK/environment/variables.txt rename to MEC013/SRV/UELOCLOOK/environment/variables.txt diff --git a/MEC013/SRV/UELOCLOOK/schemas/UserInfo.schema.json b/MEC013/SRV/UELOCLOOK/schemas/UserInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..e479e0c8fe331cae09874b664096258012d0c48c --- /dev/null +++ b/MEC013/SRV/UELOCLOOK/schemas/UserInfo.schema.json @@ -0,0 +1,253 @@ +{ + "type": "object", + "properties": { + "userInfo": { + "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": { + "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 deg to +90 deg. 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 deg to +180 deg. 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 deg to 180 deg, 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", + "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:

1 = HORIZONTAL

2 = HORIZONTAL_VERTICAL

3 = HORIZONTAL_UNCERT

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" + }, + "resourceURL": { + "description": "Self-referring URL, see note 1.", + "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": "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" + }, + "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": "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" + } + } +} \ No newline at end of file diff --git a/MEC013/SRV/UELOCLOOK/schemas/UserList.schema.json b/MEC013/SRV/UELOCLOOK/schemas/UserList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..aab1badb67a58c9073fbfd46c4924a45114651c7 --- /dev/null +++ b/MEC013/SRV/UELOCLOOK/schemas/UserList.schema.json @@ -0,0 +1,274 @@ +{ + "type": "object", + "properties": { + "userList": { + "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": { + "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": { + "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 deg to +90 deg. 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 deg to +180 deg. 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 deg to 180 deg, 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", + "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:

1 = HORIZONTAL

2 = HORIZONTAL_VERTICAL

3 = HORIZONTAL_UNCERT

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" + }, + "resourceURL": { + "description": "Self-referring URL, see note 1.", + "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": "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" + }, + "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": "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" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UserInfo" + } + }, + "required": [ + "resourceURL" + ], + "type": "object" + } + } +} \ No newline at end of file diff --git a/SRV/UELOCSUB/PlatUeLocationSubscription.robot b/MEC013/SRV/UELOCSUB/PlatUeLocationSubscription.robot similarity index 84% rename from SRV/UELOCSUB/PlatUeLocationSubscription.robot rename to MEC013/SRV/UELOCSUB/PlatUeLocationSubscription.robot index 0b32cb9986cd57b7f68b5a53a770a003f9d6f1c2..ec1cbaeec855b0c7064577048ae2e365f0eb2472 100644 --- a/SRV/UELOCSUB/PlatUeLocationSubscription.robot +++ b/MEC013/SRV/UELOCSUB/PlatUeLocationSubscription.robot @@ -3,8 +3,8 @@ Documentation ... A test suite for validating UE Location Subscription (UELOCSUB) operations. - -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -17,7 +17,7 @@ ${response} *** Test Cases *** -TC_MEC_SRV_UELOCSUB_001_OK +TC_MEC_MEC013_SRV_UELOCSUB_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 location changes @@ -29,9 +29,10 @@ TC_MEC_SRV_UELOCSUB_001_OK Create new subscription UserTrackingSubscription Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is UserTrackingSubscription - Check Result Contains ${response['body']['userTrackingSubscription']} clientCorrelator ${USERTRACKSUB_CLIENT_ID} - Check Result Contains ${response['body']['userTrackingSubscription']} callbackReference ${USERTRACK_NOTIF_CALLBACK_URI} - Check Result Contains ${response['body']['userTrackingSubscription']} address ${USERTRACK_IP_ADDRESS} + # 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 @@ -46,7 +47,7 @@ TC_MEC_SRV_UELOCSUB_001_OK # ; # to the MEC_APP entity -TC_MEC_SRV_UELOCSUB_001_BR +TC_MEC_MEC013_SRV_UELOCSUB_001_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -58,7 +59,7 @@ TC_MEC_SRV_UELOCSUB_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_UELOCSUB_002_OK +TC_MEC_MEC013_SRV_UELOCSUB_002_OK [Documentation] ... Check that the IUT acknowledges the cancellation of UE location change notifications ... when commanded by a MEC Application @@ -70,7 +71,7 @@ TC_MEC_SRV_UELOCSUB_002_OK Check HTTP Response Status Code Is 204 -TC_MEC_SRV_UELOCSUB_002_NF +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 diff --git a/SRV/UEDISTSUB/README.md b/MEC013/SRV/UELOCSUB/README.md similarity index 100% rename from SRV/UEDISTSUB/README.md rename to MEC013/SRV/UELOCSUB/README.md diff --git a/SRV/UELOCSUB/environment/variables.txt b/MEC013/SRV/UELOCSUB/environment/variables.txt similarity index 100% rename from SRV/UELOCSUB/environment/variables.txt rename to MEC013/SRV/UELOCSUB/environment/variables.txt diff --git a/SRV/UELOCSUB/jsons/UserTrackingSubscription.json b/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscription.json similarity index 100% rename from SRV/UELOCSUB/jsons/UserTrackingSubscription.json rename to MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscription.json diff --git a/SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json b/MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json similarity index 100% rename from SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json rename to MEC013/SRV/UELOCSUB/jsons/UserTrackingSubscriptionError.json diff --git a/MEC013/SRV/UELOCSUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UELOCSUB/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3a495cdf2901ada65ccef735d6f744843db6c861 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/schemas/NotificationSubscriptionList.schema.json @@ -0,0 +1,715 @@ +{ + "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/UELOCSUB/schemas/UserTrackingSubscription.schema.json b/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..6e2231ad77d0114857519e598510413bffd73660 --- /dev/null +++ b/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json @@ -0,0 +1,74 @@ +{ + "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/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json b/MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json similarity index 100% rename from SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json rename to MEC013/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.v1.1.1.json diff --git a/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot b/MEC013/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot similarity index 93% rename from SRV/UETRACKSUB/PlatUeTrackingSubscription.robot rename to MEC013/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot index 76ff34aff4e9bb0161dd6dbaf1445c18fad6cd50..4d571c1ff84cbddb84e0a594c416d133da13db2c 100644 --- a/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot +++ b/MEC013/SRV/UETRACKSUB/PlatUeTrackingSubscription.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating UE Tracking Subscribe (UETRACKSUB) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -13,7 +14,7 @@ Default Tags TC_MEC_SRV_UETRACKSUB *** Test Cases *** -TC_MEC_SRV_UETRACKSUB_001_OK +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 @@ -43,7 +44,7 @@ TC_MEC_SRV_UETRACKSUB_001_OK # ; -TC_MEC_SRV_UETRACKSUB_001_BR +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 @@ -56,7 +57,7 @@ TC_MEC_SRV_UETRACKSUB_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_UETRACKSUB_002_OK +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 @@ -68,7 +69,7 @@ TC_MEC_SRV_UETRACKSUB_002_OK Check HTTP Response Status Code Is 204 -TC_MEC_SRV_UETRACKSUB_002_NF +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 diff --git a/SRV/UEINFOLOOK/README.md b/MEC013/SRV/UETRACKSUB/README.md similarity index 100% rename from SRV/UEINFOLOOK/README.md rename to MEC013/SRV/UETRACKSUB/README.md diff --git a/SRV/UETRACKSUB/environment/variables.txt b/MEC013/SRV/UETRACKSUB/environment/variables.txt similarity index 100% rename from SRV/UETRACKSUB/environment/variables.txt rename to MEC013/SRV/UETRACKSUB/environment/variables.txt diff --git a/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json b/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json similarity index 100% rename from SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json rename to MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscription.json diff --git a/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json b/MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json similarity index 100% rename from SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json rename to MEC013/SRV/UETRACKSUB/jsons/PeriodicNotificationSubscriptionError.json diff --git a/MEC013/SRV/UETRACKSUB/schemas/NotificationSubscriptionList.schema.json b/MEC013/SRV/UETRACKSUB/schemas/NotificationSubscriptionList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..3a495cdf2901ada65ccef735d6f744843db6c861 --- /dev/null +++ b/MEC013/SRV/UETRACKSUB/schemas/NotificationSubscriptionList.schema.json @@ -0,0 +1,715 @@ +{ + "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 new file mode 100644 index 0000000000000000000000000000000000000000..5161e70050881ed23e8c2785babbdd46338bd49e --- /dev/null +++ b/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json @@ -0,0 +1,114 @@ +{ + "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/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json b/MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json similarity index 100% rename from SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json rename to MEC013/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.v1.1.1.json diff --git a/MEC013/SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot b/MEC013/SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot new file mode 100644 index 0000000000000000000000000000000000000000..df20a257c976aa73845b73d845ffb4fa351f978d --- /dev/null +++ b/MEC013/SRV/ZOINFOLOOK/PlatZoneInfoLocation.robot @@ -0,0 +1,63 @@ +*** 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/SRV/UEINFOSUB/README.md b/MEC013/SRV/ZOINFOLOOK/README.md similarity index 100% rename from SRV/UEINFOSUB/README.md rename to MEC013/SRV/ZOINFOLOOK/README.md diff --git a/MEC013/SRV/ZOINFOLOOK/environment/variables.txt b/MEC013/SRV/ZOINFOLOOK/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..a9bf262d487dcf1465071bbaa445ce33425ffcd5 --- /dev/null +++ b/MEC013/SRV/ZOINFOLOOK/environment/variables.txt @@ -0,0 +1,14 @@ +*** 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 new file mode 100644 index 0000000000000000000000000000000000000000..b39dd2d66523b7856c38c38b002d8e6ff8ea6950 --- /dev/null +++ b/MEC013/SRV/ZOINFOLOOK/schemas/ZoneInfo.schema.json @@ -0,0 +1,48 @@ +{ + "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 new file mode 100644 index 0000000000000000000000000000000000000000..b39dd2d66523b7856c38c38b002d8e6ff8ea6950 --- /dev/null +++ b/MEC013/SRV/ZOINFOLOOK/schemas/ZoneList.schema.json @@ -0,0 +1,48 @@ +{ + "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/SRV/UETAG/PlatUeIdentity.robot b/MEC014/SRV/UETAG/PlatUeIdentity.robot similarity index 91% rename from SRV/UETAG/PlatUeIdentity.robot rename to MEC014/SRV/UETAG/PlatUeIdentity.robot index 2a440b451f0b371ba39947f1326ae2a419ae1f15..c9cdc4c4592559be667d13df886b51745a972d25 100644 --- a/SRV/UETAG/PlatUeIdentity.robot +++ b/MEC014/SRV/UETAG/PlatUeIdentity.robot @@ -3,16 +3,16 @@ *** Settings *** Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot Resource resources/UEidentityAPI.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false *** Test Cases *** -Request UE Identity Tag information - [Documentation] TC_MEC_SRV_UETAG_001_OK +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 @@ -22,8 +22,8 @@ Request UE Identity Tag information Check Result Contains ${response['body']['ueIdentityTagInfo']['ueIdentityTags']} ueIdentityTag ${UE_IDENTITY_TAG} -Request UE Identity Tag information using bad parameters - [Documentation] TC_MEC_SRV_UETAG_001_BR +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 @@ -33,8 +33,8 @@ Request UE Identity Tag information using bad parameters -Request UE Identity Tag information using non-existent application instance - [Documentation] TC_MEC_SRV_UETAG_001_NF +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 @@ -43,8 +43,8 @@ Request UE Identity Tag information using non-existent application instance Check ProblemDetails 404 -Register an UE Identity Tag - [Documentation] TP_MEC_SRV_UETAG_002_OK +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 https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo @@ -55,8 +55,8 @@ Register an UE Identity Tag Check User Identity Tag state ${UE_IDENTITY_TAG} REGISTERED -Register an UE Identity Tag using invalid state - [Documentation] TP_MEC_SRV_UETAG_002_BR +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 @@ -65,8 +65,8 @@ Register an UE Identity Tag using invalid state Check ProblemDetails 400 -Unregister an UE Identity Tag already in unregistered state - [Documentation] TP_MEC_SRV_UETAG_002_PF +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 diff --git a/SRV/UELOCLOOK/README.md b/MEC014/SRV/UETAG/README.md similarity index 100% rename from SRV/UELOCLOOK/README.md rename to MEC014/SRV/UETAG/README.md diff --git a/SRV/UETAG/environment/variables.txt b/MEC014/SRV/UETAG/environment/variables.txt similarity index 100% rename from SRV/UETAG/environment/variables.txt rename to MEC014/SRV/UETAG/environment/variables.txt diff --git a/SRV/UETAG/resources/LocationAPI.robot b/MEC014/SRV/UETAG/resources/LocationAPI.robot similarity index 100% rename from SRV/UETAG/resources/LocationAPI.robot rename to MEC014/SRV/UETAG/resources/LocationAPI.robot diff --git a/SRV/UETAG/resources/UEidentityAPI.robot b/MEC014/SRV/UETAG/resources/UEidentityAPI.robot similarity index 94% rename from SRV/UETAG/resources/UEidentityAPI.robot rename to MEC014/SRV/UETAG/resources/UEidentityAPI.robot index 7fa25a1543fd9bd5e230591c1d74974798b9b297..1cb3e49838af816d6e14841a82655d2e534d5be7 100644 --- a/SRV/UETAG/resources/UEidentityAPI.robot +++ b/MEC014/SRV/UETAG/resources/UEidentityAPI.robot @@ -1,7 +1,7 @@ *** Settings *** Resource ../environment/variables.txt -Resource ../../../pics.txt -Resource ../../../GenericKeywords.robot +Resource ../../../../pics.txt +Resource ../../../../GenericKeywords.robot Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false Library JSONSchemaLibrary schemas/ diff --git a/SRV/UETAG/schemas/UeIdentityTagInfo.schema.json b/MEC014/SRV/UETAG/schemas/UeIdentityTagInfo.schema.json similarity index 100% rename from SRV/UETAG/schemas/UeIdentityTagInfo.schema.json rename to MEC014/SRV/UETAG/schemas/UeIdentityTagInfo.schema.json diff --git a/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot b/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot new file mode 100644 index 0000000000000000000000000000000000000000..fa054b6f73becf563ab83308db9fe72bc7d366ee --- /dev/null +++ b/MEC015/SRV/MTS/MultiAccessTrafficSteering.robot @@ -0,0 +1,296 @@ +''[Documentation] robot --outputdir ../../../outputs ./MultiAccessTrafficSteering.robot +... Test Suite to validate Multi-access traffic steering API (MTS) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem + + +##GET on ${apiRoot}/${apiName}/${apiVersion}/mts_info +*** Test Cases *** +TP_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 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 + [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.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} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is MtsSessionInfo + 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} + END + Should Be True ${passed} + +TP_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 + Retrieve MTS session list information using filter ${BAD_FILTER} ${APP_INSTANCE_ID} + Check HTTP Response Status Code Is 400 + +TP_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 + 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 + [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/ MtsSessionInfoApplicationSpecific.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Register MTS session ${body} + 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']} + + +TP_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} + 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']} + + +TP_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} + 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']} + + +##GET on ${apiRoot}/${apiName}/${apiVersion}/mts_sessions/{sessionId} +TP_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 + 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} + +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 + +TP_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 + 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 + [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 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} + 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']} + +TP_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 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} + Check HTTP Response Status Code Is 400 + +TP_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 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} + Check HTTP Response Status Code Is 404 + +##DELETE on ${apiRoot}/${apiName}/${apiVersion}/mts_sessions/{sessionId} +TP_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 9.4.3.3 + ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + Unregister from the MTS Service ${SESSION_ID} + Check HTTP Response Status Code Is 204 + +TP_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 9.4.3.3 + ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + Unregister from the MTS Service ${NOT_EXISTING_SESSION_ID} + Check HTTP Response Status Code Is 404 + +*** Keywords *** +Retrieve MTS capability 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}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/${apiName}/${apiVersion}/mts_info + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve MTS session list 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}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/${apiName}/${apiVersion}/mts_sessions + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retrieve MTS session list information using filter + [Arguments] ${filter} ${value} + 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}"} + Set Headers {"Content-Length":"0"} + Get ${apiRoot}/${apiName}/${apiVersion}/mts_sessions?${filter}=${value} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Register MTS session + [Arguments] ${body} + 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"} + POST ${apiRoot}/${apiName}/${apiVersion}/mts_sessions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Register MTS session wrong URI + [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} + ${body} Get File ${path} + POST ${apiRoot}/${apiName}/v0/mts_sessions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve single MTS session + [Arguments] ${sessionId} + 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}/mts_sessions/${sessionId} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Update requested requirements on the MTS Service + [Arguments] ${sessionId} ${body} + 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}/mts_sessions/${sessionId} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Unregister from the MTS Service + [Arguments] ${sessionId} + 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}"} + LOG ${sessionId} + DELETE ${apiRoot}/${apiName}/${apiVersion}/mts_sessions/${sessionId} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/SRV/UELOCSUB/README.md b/MEC015/SRV/MTS/README.md similarity index 100% rename from SRV/UELOCSUB/README.md rename to MEC015/SRV/MTS/README.md diff --git a/MEC015/SRV/MTS/environment/variables.txt b/MEC015/SRV/MTS/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..3a0e17f340dd1f768484e44765b7151d9b37a656 --- /dev/null +++ b/MEC015/SRV/MTS/environment/variables.txt @@ -0,0 +1,24 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8082 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} mts +${apiVersion} v1 + +# Specific variables +${APP_INSTANCE_ID} appInstId01 +${NOT_EXISTING_APP_INSTANCE_ID} NOT_EXISTING_APP_INS_ID +${CORRECT_FILTER} app_instance_id +${BAD_FILTER} appInsId + +${SESSION_ID} 1 +${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 diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific.json new file mode 100644 index 0000000000000000000000000000000000000000..f8ec281b7f7e85b46a8e5d3f72058799d550058f --- /dev/null +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific.json @@ -0,0 +1,12 @@ +{ + "appInsId": "myAppInstId", + "requestType": 0, + "qosD": { + "minTpt": 10 + }, + "mtsMode": 0, + "trafficDirection": "00", + "qosD":{ + "minTpt":10 + } +} \ No newline at end of file diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..16d87745c6408540461444c3e257ff735bd91545 --- /dev/null +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate.json @@ -0,0 +1,12 @@ +{ + "appInsId": "myAppInstId", + "requestType": 0, + "qosD": { + "minTpt": 30 + }, + "mtsMode": 0, + "trafficDirection": "00", + "qosD":{ + "minTpt":10 + } +} \ No newline at end of file diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate_BR.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..814cd503cb8a4fa4fee2250e14934d75960f9701 --- /dev/null +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecificUpdate_BR.json @@ -0,0 +1,21 @@ +{ + "appInsId": "myAppInstId", + "requestType": 0, + "qosD": { + "minTpt": 30 + }, + "mtsMode": 0, + "trafficDirection": "00", + "flowFilter": [{ + "dstPort": [8081], + "protocol": 41, + "sourcePort": [8081], + "dstIp": "10.10.0.10", + "dscp": 40, + "sourceIp": "10.10.0.30" + } + ], + "qosD":{ + "minTpt":10 + } +} \ No newline at end of file diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific_BR.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..814cd503cb8a4fa4fee2250e14934d75960f9701 --- /dev/null +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoApplicationSpecific_BR.json @@ -0,0 +1,21 @@ +{ + "appInsId": "myAppInstId", + "requestType": 0, + "qosD": { + "minTpt": 30 + }, + "mtsMode": 0, + "trafficDirection": "00", + "flowFilter": [{ + "dstPort": [8081], + "protocol": 41, + "sourcePort": [8081], + "dstIp": "10.10.0.10", + "dscp": 40, + "sourceIp": "10.10.0.30" + } + ], + "qosD":{ + "minTpt":10 + } +} \ No newline at end of file diff --git a/MEC015/SRV/MTS/jsons/MtsSessionInfoSessionSpecific.json b/MEC015/SRV/MTS/jsons/MtsSessionInfoSessionSpecific.json new file mode 100644 index 0000000000000000000000000000000000000000..d2429bcf456056a42fa563ee4854866778270460 --- /dev/null +++ b/MEC015/SRV/MTS/jsons/MtsSessionInfoSessionSpecific.json @@ -0,0 +1,23 @@ +{ + "appInsId": "myAppInstId", + "requestType": 1, + "mtsMode":4, + "trafficDirection":"00", + "qosD": { + "minTpt": 10 + }, + "mtsMode": 0, + "trafficDirection": "00", + "flowFilter": [{ + "dstPort": [8081], + "protocol": 41, + "sourcePort": [8081], + "dstIp": "10.10.0.10", + "dscp": 40, + "sourceIp": "10.10.0.30" + } + ], + "qosD":{ + "minTpt":10 + } +} \ No newline at end of file diff --git a/MEC015/SRV/MTS/schemas/MtsCapabilityInfo.schema.json b/MEC015/SRV/MTS/schemas/MtsCapabilityInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..9a9c268bbdc7bf6f1342365914e2630514d8c470 --- /dev/null +++ b/MEC015/SRV/MTS/schemas/MtsCapabilityInfo.schema.json @@ -0,0 +1,86 @@ +{ + "properties": { + "mtsAccessInfo": { + "description": "The information on access network connection as defined below", + "items": { + "type": "object", + "properties": { + "accessId": { + "format": "uint32", + "type": "integer", + "description": "Unique identifier for the access network connection", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "accessType": { + "format": "uint32", + "type": "integer", + "description": "Numeric value (0-255) corresponding to specific type of access network as following: 0 = Unknown 1 = Any IEEE802.11-based WLAN technology 2 = Any 3GPP-based Cellular technology 3 = Any Fixed Access 11 = IEEE802.11 a/b/g WLAN 12 = IEEE 802.11 a/b/g/n WLAN 13 = IEEE 802.11 a/b/g/n/ac WLAN 14 = IEEE 802.11 a/b/g/n/ac/ax WLAN (Wi-Fi 6) 15 = IEEE 802.11 b/g/n WLAN 31 = 3GPP GERAN/UTRA (2G/3G) 32 = 3GPP E-UTRA (4G/LTE) 33 = 3GPP NR (5G)", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "metered": { + "format": "uint32", + "type": "integer", + "description": "Numeric value (0-255) corresponding to the following: 0: the connection is not metered (see note) 1: the connection is metered 2: unknown ", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + } + } + }, + "required": [ + "accessId", + "accessType", + "metered" + ], + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "mtsMode": { + "description": "Numeric value corresponding to a specific MTS operation supported by the TMS 0 = low cost, i.e. using the unmetered access network connection whenever it is available 1 = low latency, i.e. using the access network connection with lower latency 2 = high throughput, i.e. using the access network connection with higher throughput, or/and multiple access network connection simultaneously if supported 3 = redundancy, i.e. sending duplicated (redundancy) packets over multiple access network connections for highreliability and low-latency applications 4 = QoS, i.e. performing MTS based on the specific QoS requirements from the app", + "items": { + "type": "integer", + "format": "uint32" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Uint32" + }, + "timeStamp": { + "description": "Time stamp to indicate when the corresponding information elements are sent", + "properties": { + "nanoSeconds": { + "format": "uint32", + "type": "integer", + "description": "Time in nanoseconds in Unix-time since January 1, 1970, 00:00:00 UTC", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "seconds": { + "description": "Time in seconds in 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-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + } + }, + "required": [ + "mtsAccessInfo", + "mtsMode" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tA metered connection is a network connection that has a maximum data usage in a specific period, e.g. per hour/day/week/month. The user may get billed extra charges if they go over the allotted amount.", + "x-etsi-ref": "7.2.4" +} \ No newline at end of file diff --git a/MEC015/SRV/MTS/schemas/MtsSessionInfo.schema.json b/MEC015/SRV/MTS/schemas/MtsSessionInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..6bb365be2fdde7df6a61bc59cde30060e18a3671 --- /dev/null +++ b/MEC015/SRV/MTS/schemas/MtsSessionInfo.schema.json @@ -0,0 +1,182 @@ +{ + "items":{ + "properties": { + "appInsId": { + "description": "Application instance identifier", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "flowFilter": { + "description": "Traffic flow filtering criteria, applicable only if when requestType is set as FLOW_SPECIFIC_MTS_SESSION. Any filtering criteria shall define a single session only. In case multiple sessions match flowFilter the request shall be rejected. If the flowFilter field is included, at least one of its subfields shall be included. Any flowFilter subfield that is not included shall be ignored in traffic flow filtering", + "items": { + "type": "object", + "properties": { + "dscp": { + "format": "uint32", + "type": "integer", + "description": "DSCP in the IPv4 header or Traffic Class in the IPv6 header", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "dstIp": { + "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": "integer", + "format": "uint32" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Uint32" + }, + "flowlabel": { + "format": "uint32", + "type": "integer", + "description": "Flow Label in the IPv6 header, applicable only if the flow is IPv6", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "protocol": { + "format": "uint32", + "type": "integer", + "description": "Protocol number", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "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": "integer", + "format": "uint32" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Uint32" + } + } + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "mtsMode": { + "format": "uint32", + "type": "integer", + "description": "Numeric value (0 - 255) corresponding to a specific MTS mode of the MTS session: 0 = low cost, i.e. using the unmetered access network connection whenever it is available 1 = low latency, i.e. using the access network connection with lower latency 2 = high throughput, i.e. using the access network connection with higher throughput, or multiple access network connection simultaneously 3 = redundancy, i.e. sending duplicated (redundancy) packets over multiple access network connections for high-reliability and low-latency applications 4 = QoS, i.e. performing MTS based on the QoS requirement (qosD)", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "qosD": { + "description": "QoS requirement description of the MTS session, applicable only if mtsMode = 4 (QoS). If the qosD field is included, at least one of its subfields shall be included. Any qosD subfield that is not included shall be ignored in Multi-access Traffic Steering (MTS)", + "properties": { + "maxJitter": { + "description": "tolerable jitter in [10 nanoseconds]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "maxLatency": { + "description": "tolerable (one-way) delay in [10 nanoseconds]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "maxLoss": { + "description": "tolerable packet loss rate in [1/10^x]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "minTpt": { + "description": "minimal throughput in [kbps]", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "priority": { + "description": "numeric value (0 - 255) corresponding to the traffic priority 0: low; 1: medium; 2: high; 3: critical", + "type": "integer", + "format": "uint32", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure" + }, + "requestType": { + "description": "Numeric value (0 - 255) corresponding to specific type of consumer as following: 0 = APPLICATION_SPECIFIC_MTS_SESSION 1 = FLOW_SPECIFIC_MTS_SESSION", + "enum": [ + 0, + 1 + ], + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum_inlined" + }, + "timeStamp": { + "description": "Time stamp to indicate when the corresponding information elements are sent ", + "properties": { + "nanoSeconds": { + "format": "uint32", + "type": "integer", + "description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC", + "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)" + }, + "trafficDirection": { + "description": "The direction of the requested MTS session: 00 = Downlink (towards the UE) 01 = Uplink (towards the application/session) 10 = Symmetrical (see note) ", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "appInsId", + "requestType", + "flowFilter", + "qosD", + "mtsMode", + "trafficDirection" + ], + "type": "object", + "x-etsi-notes": "NOTE:\tFor the downlink direction of a symmetrical flow, \"sourceIp\" and \"sourcePort\" in the \"flowFilter\" structure are used for source address and port, respectively; \"dstIp\" and \"dstPort\" are used for destination address and port, respectively. For the uplink direction of a symmetrical flow, \"sourceIp\" and \"sourcePort\" are used for destination address and port, respectively; \"dstIp\" and \"dstPort\" are used for source address and port, respectively.", + "x-etsi-ref": "7.2.5" + } +} \ No newline at end of file diff --git a/SRV/UETAG/README.md b/MEC015/SRV/TM/README.md similarity index 100% rename from SRV/UETAG/README.md rename to MEC015/SRV/TM/README.md diff --git a/SRV/BWA/PlatBandwidthManager.robot b/MEC015/SRV/TM/TrafficManagement.robot similarity index 50% rename from SRV/BWA/PlatBandwidthManager.robot rename to MEC015/SRV/TM/TrafficManagement.robot index 664f54afcf7512f2423afe6ffa8eb352deca3107..323dc063a90c593e4561148fd2c385df07a4a9eb 100644 --- a/SRV/BWA/PlatBandwidthManager.robot +++ b/MEC015/SRV/TM/TrafficManagement.robot @@ -1,232 +1,259 @@ -''[Documentation] robot --outputdir ../../outputs ./PlatBandwidthManager.robot +''[Documentation] robot --outputdir ../../../outputs ./TrafficManagement.robot ... Test Suite to validate Bandwidth Management API (BWA) 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 +##GET on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations *** Test Cases *** -Request the list of configured bandwidth allocations - [Documentation] TC_MEC_SRV_BWA_001_OK +TP_MEC_MEC015_SRV_TM_001_OK + [Documentation] ... Check that the IUT responds with the list of configured bandwidth allocations when queried by a MEC Application - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.4.3.1 + ... 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 - Retrieve the list of configured bandwidth allocations ${APP_INSTANCE_ID} + Retrieve the list of configured bandwidth allocations Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is BwInfo - Check AppInstanceId ${APP_INSTANCE_ID} - + 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} + -Request the list of configured bandwidth allocations with wrong app instance id - [Documentation] TC_MEC_SRV_BWA_001_BR +TP_MEC_MEC015_SRV_TM_002_OK + [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 + 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 + 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} + +TP_MEC_MEC015_SRV_TM_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 015 V1.1.1, clause 8.4.3.1 + ... 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 - Retrieve the list of configured bandwidth allocations ${NON_EXISTENT_APP_INSTANCE_ID} + Retrieve the list of configured bandwidth using filter ${BAD_FILTER} ${APP_INSTANCE_ID} Check HTTP Response Status Code Is 400 - #Check ProblemDetails 400 + +TP_MEC_MEC015_SRV_TM_002_NF + [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 + Retrieve the list of configured bandwidth using filter ${CORRECT_FILTER} ${NON_EXISTENT_APP_INSTANCE_ID} + Check HTTP Response Status Code Is 404 + -Request to register Bandwidth Management Services - [Documentation] TC_MEC_SRV_BWA_002_OK +##POST on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations +TP_MEC_MEC015_SRV_TM_003_OK_01 + [Documentation] ... Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.4.3.4 + ... 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 - Registration for bandwidth services ${APP_INSTANCE_ID} BwInfo - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is BwInfo - Check AppInstanceId ${APP_INSTANCE_ID} + Register Bandwidth Management Service Application specific BwInfoApplicationSpecific - -Request to register Bandwidth Management Services using wrong parameters - [Documentation] TC_MEC_SRV_BWA_002_BR +TP_MEC_MEC015_SRV_TM_003_OK_02 + [Documentation] ... Check that the IUT responds with a registration and initialisation approval for the requested bandwidth requirements sent by a MEC Application - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.4.3.4 + ... 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 - Registration for bandwidth services ${APP_INSTANCE_ID} BwInfoError - Check HTTP Response Status Code Is 400 + Register Bandwidth Management Service Session specific BwInfoSessionSpecific + -Request for a bandwidth allocation - [Documentation] TC_MEC_SRV_BWA_003_OK +TP_MEC_MEC015_SRV_TM_003_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_BR + +TP_MEC_MEC015_SRV_TM_003_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_BR2 + +TP_MEC_MEC015_SRV_TM_003_BR_03 + [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 + + + + +##GET on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} +TP_MEC_MEC015_SRV_TM_004_OK + [Documentation] ... Check that the IUT responds with the configured bandwidth allocation when queried by a MEC Application - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.3.3.1 + ... 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 - Get a bandwidth allocation ${ALLOCATION_ID} + Get a bandwidth allocation ${ALLOCATION_ID} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is BwInfo - Check AppInstanceId ${APP_INSTANCE_ID} + Should Be Equal As Strings ${response['body']['appInsId']} ${APP_INSTANCE_ID} -Request for a bandwidth allocation using wrong parameters - [Documentation] TC_MEC_SRV_BWA_003_NF +TP_MEC_MEC015_SRV_TM_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 015 V1.1.1, clause 8.3.3.1 + ... 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 - Get a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} + Get a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} Check HTTP Response Status Code Is 404 + - -Updates the requested bandwidth requirements - [Documentation] TC_MEC_SRV_BWA_004_OK +##PUT on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} +TP_MEC_MEC015_SRV_TM_005_OK + [Documentation] ... Check that the IUT updates the requested bandwidth requirements when commanded by a MEC Application - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.3.3.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 - # Preamble - Register Bandwidth Management Service BwInfo - # Test body - Update a bandwidth allocation ${ALLOCATION_ID} BwInfoUpdate + ${path} Catenate SEPARATOR= jsons/ BwInfoUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update a bandwidth allocation ${ALLOCATION_ID} ${body} Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is BwInfo - Check AppInstanceId ${APP_INSTANCE_ID} - # Postamble - Unregister Bandwidth Management Service ${ALLOCATION_ID} + 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']} + -Updates the requested bandwidth requirements using wrong allocationDirection - [Documentation] TC_MEC_SRV_BWA_004_BR +TP_MEC_MEC015_SRV_TM_005_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 V1.1.1, clause 8.3.3.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 - # Preamble - Register Bandwidth Management Service BwInfo - # Test body - Update a bandwidth allocation ${ALLOCATION_ID} BwInfoError + ${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} Check HTTP Response Status Code Is 400 - # Postamble - Unregister Bandwidth Management Service ${ALLOCATION_ID} -Updates the requested bandwidth requirements using wrong allocationId - [Documentation] TC_MEC_SRV_BWA_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 015 V1.1.1, clause 8.3.3.2 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - Update a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} BwInfoUpdate - Check HTTP Response Status Code Is 404 - Check ProblemDetails 404 - - -Updates the requested bandwidth requirements using wrong parameters - [Documentation] TC_MEC_SRV_BWA_004_PF +TP_MEC_MEC015_SRV_TM_005_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 015 V1.1.1, clause 8.3.3.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 - # TODO Application doesn't comply with a required condition??? - # Preamble - Register Bandwidth Management Service BwInfo - # Test body - Update a bandwidth allocation with invalid ETAG ${ALLOCATION_ID} BwInfoUpdate - Check HTTP Response Status Code Is 412 - # Postamble - Unregister Bandwidth Management Service ${ALLOCATION_ID} - - + ${path} Catenate SEPARATOR= jsons/ BwInfoUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update a bandwidth allocation ${NON_EXISTENT_ALLOCATION_ID} BwInfoUpdate + Check HTTP Response Status Code Is 404 -Request for deltas changes - [Documentation] TC_MEC_SRV_BWA_005_OK +##PATCH on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} +TP_MEC_MEC015_SRV_TM_006_OK + [Documentation] ... Check that the IUT when provided with just the changes (deltas) updates the requested bandwidth requirements when commanded by a MEC Application - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.3.3.3 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + ... 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 BwInfo + Register Bandwidth Management Service Application specific BwInfoApplicationSpecific # Test body - Request a deltas changes ${ALLOCATION_ID} BwInfoUpdateDelta + ${path} Catenate SEPARATOR= jsons/ BwInfoDeltas.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Request a deltas changes ${ALLOCATION_ID} ${body} Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is bwInfo - Check AppInstanceId ${APP_INSTANCE_ID} - # Postamble - Unregister Bandwidth Management Service ${ALLOCATION_ID} + 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']} - -Request for deltas changes using invalid requestType - [Documentation] TC_MEC_SRV_BWA_005_BR +TP_MEC_MEC015_SRV_TM_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 015 V1.1.1, clause 8.3.3.3 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json + ... 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 BwInfo + Register Bandwidth Management Service Application specific BwInfoApplicationSpecific # Test body - Request a deltas changes ${ALLOCATION_ID} BwInfoUpdateDeltaError + ${path} Catenate SEPARATOR= jsons/ BwInfoDeltas_BR.json + ${body} Get File ${path} + Request a deltas changes ${ALLOCATION_ID} ${body} Check HTTP Response Status Code Is 400 - # Postamble - Unregister Bandwidth Management Service ${ALLOCATION_ID} - -Request for deltas changes using an unknown URI - [Documentation] TC_MEC_SRV_BWA_005_NF + +TP_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 - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.3.3.3 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - Request a deltas changes ${NON_EXISTENT_ALLOCATION_ID} BwInfoUpdateDelta - Check HTTP Response Status Code Is 404 - + ... 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 -Request for deltas changes using wrong parameters - [Documentation] TC_MEC_SRV_BWA_005_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 015 V1.1.1, clause 8.3.3.3 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - # Preamble - Register Bandwidth Management Service BwInfo - # Test body - Request a deltas changes with invalid ETAG ${ALLOCATION_ID} BwInfoUpdateDelta - Check HTTP Response Status Code Is 412 - # Postamble + +##DELETE on ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/{ALLOCATION_ID} +TP_MEC_MEC015_SRV_TM_007_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 8.3.3.5 + ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml Unregister Bandwidth Management Service ${ALLOCATION_ID} + Check HTTP Response Status Code Is 204 +TP_MEC_MEC015_SRV_TM_007_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 8.3.3.5 + ... https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.yaml + Unregister Bandwidth Management Service ${NON_EXISTENT_ALLOCATION_ID} + Check HTTP Response Status Code Is 404 + -Request to unregister bandwidth Management Service - [Documentation] TC_MEC_SRV_BWA_006_OK - ... Check that the IUT unregisters from the Bandwidth Management Service when commanded by a MEC Application - ... Reference ETSI GS MEC 015 V1.1.1, clause 8.3.3.5 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - # Preamble + +*** Keywords *** +Retrieve the list of configured bandwidth allocations Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 - Register Bandwidth Management Service BwInfo - # Test body Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} + Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Delete ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${ALLOCATION_ID} + GET ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${output}= Output response Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 204 - - -Request to unregister bandwidth Management Service with wrong parameters - [Documentation] TC_MEC_SRV_BWA_006_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 015 V1.1.1, clause 8.3.3.5 - ... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json - # Preamble + +Retrieve the list of configured bandwidth using filter + [Arguments] ${filter} ${value} Should Be True ${PIC_MEC_PLAT} == 1 Should Be True ${PIC_SERVICES} == 1 - # Test body Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} + Set Headers {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} - Delete ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${NON_EXISTENT_ALLOCATION_ID} + Get ${apiRoot}/${apiName}/${apiVersion}/bw_allocations?${filter}=${value} ${output}= Output response Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 404 - Check ProblemDetails 404 - - -*** Keywords *** -Retrieve the list of configured bandwidth allocations + +Retrieve a configured bandwidth allocations [Arguments] ${app_instance_id} 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 {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} Set Headers {"Content-Length":"0"} Get ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${app_instance_id} @@ -241,7 +268,6 @@ Registration for bandwidth services Set Headers {"Accept":"application/json"} Set Headers {"Content-Type":"application/json"} Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${app_instance_id} ${body} @@ -254,87 +280,81 @@ Get a bandwidth allocation 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 {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} Get ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${output}= Output response Set Suite Variable ${response} ${output} Update a bandwidth allocation - [Arguments] ${allocation_id} ${content} + [Arguments] ${allocation_id} ${body} 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 {"If-Match":"${ETAG_VALUE}"} - Set Headers {"Content-Length":"0"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} Put ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} ${output}= Output response Set Suite Variable ${response} ${output} -Update a bandwidth allocation with invalid ETAG - [Arguments] ${allocation_id} ${content} +Request a deltas changes + [Arguments] ${allocation_id} ${body} 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 {"If-Match":"${INVALID_ETAG}"} - Set Headers {"Content-Length":"0"} - ${file}= Catenate SEPARATOR= jsons/ ${content} .json - ${body}= Get File ${file} - Put ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} + Patch ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} ${output}= Output response Set Suite Variable ${response} ${output} -Request a deltas changes - [Arguments] ${allocation_id} ${content} +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}"} - Set Headers {"If-Match":"${ETAG}"} - Set Headers {"Content-Length":"0"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - Patch ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} + Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${body} ${output}= Output response Set Suite Variable ${response} ${output} + Check HTTP Response Status Code Is 400 - -Request a deltas changes with invalid ETAG - [Arguments] ${allocation_id} ${content} +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}"} - Set Headers {"If-Match":"${INVALID_ETAG}"} - Set Headers {"Content-Length":"0"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} - Patch ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${allocation_id} ${body} + ${json_object}= Evaluate json.loads('''${body}''') json + Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${body} ${output}= Output response Set Suite Variable ${response} ${output} - - - -Register Bandwidth Management Service + 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}"} - Set Headers {"Content-Length":"0"} ${file}= Catenate SEPARATOR= jsons/ ${content} .json ${body}= Get File ${file} Post ${apiRoot}/${apiName}/${apiVersion}/bw_allocations ${body} @@ -342,12 +362,14 @@ Register Bandwidth Management Service Set Suite Variable ${response} ${output} Check HTTP Response Status Code Is 201 Check HTTP Response Body Json Schema Is BwInfo - # Extract ETAG_VALUE - Set Suite Variable ${ETAG_VALUE} ${response['status']['ETag']} - Should Not Be Empty ${ETAG_VALUE} - # TODO Extract allocationId not possible, information is missing in the standard doc - Set Suite Variable ${ALLOCATION_ID} ${response['body']['bwInfo']['allocationId']} - Should Not Be Empty ${ALLOCATION_ID} + ${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 @@ -355,24 +377,8 @@ Unregister Bandwidth Management Service 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 {"Content-Type":"*/*"} Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} Delete ${apiRoot}/${apiName}/${apiVersion}/bw_allocations/${value} ${output}= Output response Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 204 - - -Check AppInstanceId - [Arguments] ${value} - Log Check AppInstanceId for bwInfo element - Should be Equal ${response['body']['bwInfo']['appInsId']} ${value} - Log AppInstanceId OK - - -Check AllocationId - [Arguments] ${value} - Log Check AllocationId for bwInfo element - Should be Equal ${response['body']['bwInfo']['fixedAllocation']} ${value} - Log AllocationId OK diff --git a/SRV/BWA/environment/variables.txt b/MEC015/SRV/TM/environment/variables.txt similarity index 76% rename from SRV/BWA/environment/variables.txt rename to MEC015/SRV/TM/environment/variables.txt index a7cd80ac5dada24b1db52cf8dd4e122000f3c725..4a9a19d206d06ac729a77a2e01884176ed4275eb 100644 --- a/SRV/BWA/environment/variables.txt +++ b/MEC015/SRV/TM/environment/variables.txt @@ -1,8 +1,8 @@ *** Variables *** # Generic variables ${SCHEMA} http -${HOST} 10.192.2.172 -${PORT} 8081 +${HOST} 127.0.0.1 +${PORT} 8082 ${response} {} ${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l ${apiRoot} @@ -14,14 +14,19 @@ ${apiVersion} v1 - +${CORRECT_FILTER} app_instance_id +${BAD_FILTER} appInsId ${APP_INSTANCE_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f ${NON_EXISTENT_APP_INSTANCE_ID} NON_EXISTENT_INSTANCE_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} 59ab1593-d330-4087-85ec-4e484092f306 ${NON_EXISTENT_ALLOCATION_ID} NON_EXISTENT_ALLOCATION_ID -${INVALID_ETAG} +${INVALID_ETAG} INVALID_ETAG ${ETAG_VALUE} ${ETAG} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json b/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json new file mode 100644 index 0000000000000000000000000000000000000000..511b36f02d5439b5c60527f4fdc2a7921b2e6b68 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoApplicationSpecific.json @@ -0,0 +1,6 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 0, + "fixedAllocation": "32", + "allocationDirection": "00" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoDeltas.json b/MEC015/SRV/TM/jsons/BwInfoDeltas.json new file mode 100644 index 0000000000000000000000000000000000000000..28d4b0a67ab215e1b8eee343cc352af30811f494 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoDeltas.json @@ -0,0 +1,6 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 0, + "fixedAllocation": "32", + "allocationDirection": "01" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..fca0e97387614962fe64e7578884f5b6a0d1fe87 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoDeltas_BR.json @@ -0,0 +1,6 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": "INVALID_VALUE", + "fixedAllocation": "32", + "allocationDirection": "01" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoSessionSpecific.json b/MEC015/SRV/TM/jsons/BwInfoSessionSpecific.json new file mode 100644 index 0000000000000000000000000000000000000000..d81e4f3c29d4d9607051774a64b4a1f0f15def53 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoSessionSpecific.json @@ -0,0 +1,19 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 1, + "fixedAllocation": "32", + "allocationDirection": "00", + "sessionFilter": [{ + "protocol": "123", + "sourceIp": "10.10.0.3", + "dstAddress": "1234", + "dstPort": [ + "1234", + "1334" + ], + "sourcePort": [ + "8080", + "8082" + ] + }] +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoUpdate.json b/MEC015/SRV/TM/jsons/BwInfoUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..28d4b0a67ab215e1b8eee343cc352af30811f494 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoUpdate.json @@ -0,0 +1,6 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 0, + "fixedAllocation": "32", + "allocationDirection": "01" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..2ccb051c623cc4f31615e72b1b131141a32b2116 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfoUpdate_BR.json @@ -0,0 +1,6 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 0, + "fixedAllocation": "64", + "allocationDirection": "INVALID_VALUE" +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfo_BR.json b/MEC015/SRV/TM/jsons/BwInfo_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..b7835299f5966186f9ef3c2f31706db56c6cd564 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfo_BR.json @@ -0,0 +1,6 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 0, + "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 new file mode 100644 index 0000000000000000000000000000000000000000..c08fbf8f964e22eedee76028aecdcb5479ec2c7b --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfo_BR2.json @@ -0,0 +1,19 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 0, + "fixedAllocation": "-30", + "allocationDirection": "00", + "sessionFilter": [{ + "protocol": "123", + "sourceIp": "10.10.0.3", + "dstAddress": "1234", + "dstPort": [ + "1234", + "1334" + ], + "sourcePort": [ + "8080", + "8082" + ] + }] +} \ No newline at end of file diff --git a/MEC015/SRV/TM/jsons/BwInfo_BR3.json b/MEC015/SRV/TM/jsons/BwInfo_BR3.json new file mode 100644 index 0000000000000000000000000000000000000000..9ee9c0087a35065a1cdc5f90e89ad5341b2951a1 --- /dev/null +++ b/MEC015/SRV/TM/jsons/BwInfo_BR3.json @@ -0,0 +1,7 @@ +{ +"appInsId": "5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f", + "requestType": 1, + "sessionFilter":"", + "fixedAllocation": "10", + "allocationDirection": "00" +} \ No newline at end of file diff --git a/SRV/BWA/schemas/BandwidthManagementAPI.schema.json b/MEC015/SRV/TM/schemas/BandwidthManagementAPI.schema.json similarity index 100% rename from SRV/BWA/schemas/BandwidthManagementAPI.schema.json rename to MEC015/SRV/TM/schemas/BandwidthManagementAPI.schema.json diff --git a/MEC015/SRV/TM/schemas/BwInfo.schema.json b/MEC015/SRV/TM/schemas/BwInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..66ca806fa5137cfae9a9739d8fa7d471a271e7b4 --- /dev/null +++ b/MEC015/SRV/TM/schemas/BwInfo.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 diff --git a/MEC015/SRV/TM/schemas/BwInfoDelta.schema.json b/MEC015/SRV/TM/schemas/BwInfoDelta.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..66ca806fa5137cfae9a9739d8fa7d471a271e7b4 --- /dev/null +++ b/MEC015/SRV/TM/schemas/BwInfoDelta.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 diff --git a/SRV/UETRACKSUB/README.md b/MEC016/MEO/UEAPPCTX/README.md similarity index 100% rename from SRV/UETRACKSUB/README.md rename to MEC016/MEO/UEAPPCTX/README.md diff --git a/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot new file mode 100644 index 0000000000000000000000000000000000000000..146a80bb109cd4ff635dcbefe2b54292d887989c --- /dev/null +++ b/MEC016/MEO/UEAPPCTX/SysUeAppsContext.robot @@ -0,0 +1,170 @@ +''[Documentation] robot --outputdir ../../outputs ./SysUeAppContext.robot +... Test Suite to validate Bandwidth Management API (APPCTX) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +Library String +Library OperatingSystem +Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false + + +*** Test Cases *** +TP_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 + ... 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.json + Check HTTP Response Status Code Is 201 + 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']} + + +TP_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 + ... 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 + Check HTTP Response Status Code Is 400 + + +TP_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 + ... 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 using wrong endpoint AppContext.json + Check HTTP Response Status Code Is 404 + + +TP_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 + ... 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 + # Test Body + Update application context ${contextId} UpdateAppContext.json + Check HTTP Response Status Code Is 204 + +TP_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 + Check HTTP Response Status Code Is 400 + + +TP_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 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml + # Preamble + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Update application context using wrong endpoint ${contextId} UpdateAppContext.json + Check HTTP Response Status Code Is 404 + + +TP_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 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext + # Preamble + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Delete application context ${contextId} + Check HTTP Response Status Code Is 204 + + +TP_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 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext + # Preamble + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Delete application context ${NON_EXISTING_CONTEXT_ID} + Check HTTP Response Status Code Is 404 + + +*** Keywords *** +Create application context + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/app_contexts ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Create application context using wrong endpoint + [Arguments] ${content} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/app_contexts_error ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Update application context + [Arguments] ${context_id} ${content} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Put ${apiRoot}/${apiName}/${apiVersion}/app_contexts/${context_id} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Update application context using wrong endpoint + [Arguments] ${context_id} ${content} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Put ${apiRoot}/${apiName}/${apiVersion}/app_contexts_error/${context_id} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Delete application context + [Arguments] ${context_id} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_contexts/${context_id} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Delete application context using wrong endpoint + [Arguments] ${context_id} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Set Headers {"Content-Length":"0"} + Delete ${apiRoot}/${apiName}/${apiVersion}/app_contexts_error/${context_id} + ${output}= Output response + Set Suite Variable ${response} ${output} diff --git a/MEC016/MEO/UEAPPCTX/environment/variables.txt b/MEC016/MEO/UEAPPCTX/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..ef478b983932689129621fdf8b5e4b41abc59322 --- /dev/null +++ b/MEC016/MEO/UEAPPCTX/environment/variables.txt @@ -0,0 +1,13 @@ +*** Variables *** +${apiRoot} +${apiName} dev_app +${apiVersion} v1 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 192.168.56.1 +${MEC-APP_PORT} 8081 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +${contextId} +${NON_EXISTING_CONTEXT_ID} NON_EXISTING_CONTEXT_ID \ No newline at end of file diff --git a/MEC016/MEO/UEAPPCTX/jsons/AppContext.json b/MEC016/MEO/UEAPPCTX/jsons/AppContext.json new file mode 100644 index 0000000000000000000000000000000000000000..38f47416133770526b009ac21b7cd4aade0a0f0b --- /dev/null +++ b/MEC016/MEO/UEAPPCTX/jsons/AppContext.json @@ -0,0 +1,13 @@ +{ + "associateDevAppId":"MyNewWornderfulDevAppId", + "appInfo":{ + "appName":"MyNewWornderfulApp", + "appProvider":"TTF012", + "appDVersion":"v0.0.1", + "userAppInstanceInfo":[ + { + } + ] + } +} + diff --git a/MEC016/MEO/UEAPPCTX/jsons/AppContext_BR.json b/MEC016/MEO/UEAPPCTX/jsons/AppContext_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..6186f6a279683f79e6383553bf87f19723af530d --- /dev/null +++ b/MEC016/MEO/UEAPPCTX/jsons/AppContext_BR.json @@ -0,0 +1,13 @@ +{ + "associateDevAppId":"MyNewWornderfulDevAppId", + "appInfo":{ + "app":"MyNewWornderfulApp", + "appProvider":"TTF012", + "appDVersion":"v0.0.1", + "userAppInstanceInfo":[ + { + } + ] + } +} + diff --git a/MEC016/MEO/UEAPPCTX/jsons/UpdateAppContext.json b/MEC016/MEO/UEAPPCTX/jsons/UpdateAppContext.json new file mode 100644 index 0000000000000000000000000000000000000000..cd0f9ef53d3cf74baf0141c3183b05fd25552e17 --- /dev/null +++ b/MEC016/MEO/UEAPPCTX/jsons/UpdateAppContext.json @@ -0,0 +1,15 @@ +{ + "associateDevAppId":"MyNewWornderfulDevAppId", + "contextId": "1", + "callbackReference": "http://127.0.0.1/callbackuri", + "appInfo":{ + "appName":"MyNewWornderfulApp", + "appProvider":"TTF012", + "appDVersion":"v0.0.1", + "userAppInstanceInfo":[ + { + } + ] + } +} + diff --git a/MEC016/MEO/UEAPPCTX/jsons/UpdateAppContext_BR.json b/MEC016/MEO/UEAPPCTX/jsons/UpdateAppContext_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..dcdd441bf3afe0baed552e74cbb09dcf92ef2331 --- /dev/null +++ b/MEC016/MEO/UEAPPCTX/jsons/UpdateAppContext_BR.json @@ -0,0 +1,15 @@ +{ + "associateUeAppId":"MyNewWornderfulDevAppId", + "contextId": "1", + "callbackReference": "http://127.0.0.1/callbackuri", + "appInfo":{ + "appName":"MyNewWornderfulApp", + "appProvider":"TTF012", + "appDVersion":"v0.0.1", + "userAppInstanceInfo":[ + { + } + ] + } +} + diff --git a/MEC016/MEO/UEAPPCTX/schemas/AppContext.schema.json b/MEC016/MEO/UEAPPCTX/schemas/AppContext.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..7fc3e32728c1cd0e16c25a4d0ed7b1f22c88c094 --- /dev/null +++ b/MEC016/MEO/UEAPPCTX/schemas/AppContext.schema.json @@ -0,0 +1,193 @@ +{ + "properties": { + "appAutoInstantiation": { + "description": "Provides indication to the MEC system that instantiation of the requested application is desired should a requested appLocation become available that was not at the time of the request.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "appInfo": { + "description": "", + "properties": { + "appDId": { + "description": "Identifier of this MEC application descriptor. This attribute shall be globally unique. It is equivalent to the appDId defined in clause 6.2.1.2 of ETSI GS MEC 0102 [1]. It shall be present if the application is one in the ApplicationList.", + "type": "string", + "x-etsi-mec-cardinality": "0..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. The length of the value shall not exceed 128 characters.", + "type": "string", + "maxLength": 128, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "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.\nThe 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": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appPackageSource": { + "description": "URI of the application package.\nIncluded in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "userAppInstanceInfo": { + "description": "List of user application instance information.", + "items": { + "type": "object", + "properties": { + "appInstanceId": { + "description": "Identifier of the user application instance. It shall only be included in the response.", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "appLocation": { + "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" + }, + "referenceURI": { + "description": "Address of the user application instance. It shall only be included in the response.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + } + } + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "array (Structure inlined)" + } + }, + "required": [ + "appName", + "appProvider", + "appDVersion", + "userAppInstanceInfo" + ], + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "appLocationUpdates": { + "description": "Used by the device application to request to receive notifications at the callbackReference URI relating to location availability for user application instantiation.", + "type": "boolean", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Boolean" + }, + "associateDevAppId": { + "description": "Uniquely identifies the device 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" + }, + "callbackReference": { + "description": "URI assigned by the device application to receive application lifecycle related notifications. Inclusion in the request implies the client supports the pub/sub mechanism and is capable of receiving notifications. This endpoint shall be maintained for the lifetime of the application context.", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "contextId": { + "description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and shall be present other than in a create request. The length of the value shall not exceed 32 characters.", + "type": "string", + "maxLength": 32, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "associateDevAppId", + "appInfo" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tIf a value of the attribute is included in the request, the same value shall be included in the response.\nNOTE 2:\tThe design of the current operation with callback reference assumes no web proxy between the entity that originates the notification and the entity that receives it.\nNOTE 3:\tThe language support for the application description may be limited.\nNOTE 4:\tAttribute appLocationUpdates and appAutoInstantiation shall not both be set to TRUE.", + "x-etsi-ref": "6.2.3" + } \ No newline at end of file diff --git a/MEO/PKGM/jsons/AppPkgSubscription.json b/MEC016/MEO/UEAPPLOC/README.md similarity index 100% rename from MEO/PKGM/jsons/AppPkgSubscription.json rename to MEC016/MEO/UEAPPLOC/README.md diff --git a/MEC016/MEO/UEAPPLOC/SysUeApplicationsLocation.robot b/MEC016/MEO/UEAPPLOC/SysUeApplicationsLocation.robot new file mode 100644 index 0000000000000000000000000000000000000000..34a03d6871aacbf7c33d7325780faaba64355cd3 --- /dev/null +++ b/MEC016/MEO/UEAPPLOC/SysUeApplicationsLocation.robot @@ -0,0 +1,69 @@ +''[Documentation] robot --outputdir ../../outputs ./SysUeApplicationsLocation.robot + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +Library OperatingSystem +Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false + + + +*** Test Cases *** +TP_MEC_MEC016_MEO_UEAPPLOC_001_OK + [Documentation] + ... Check that the IUT sends the locations available for instantiation of a specific user application when requested by an UE Application + ... Reference ETSI GS MEC 016 2.2.1, clause 7.6.3.4 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Obtain Application Location Availability Task AppLocationAvailability.json + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ApplicationLocationAvailability + Should Be Equal As Strings ${response['body']['appInfo']['appName']} MyNewWornderfulApp + + +TP_MEC_MEC016_MEO_UEAPPLOC_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 016 2.2.1, clause 7.6.3.4 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Obtain Application Location Availability Task AppLocationAvailability_BR.json + Check HTTP Response Status Code Is 400 + + +TP_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 2.2.1, clause 7.6.3.4 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Obtain Application Location Availability Task using wrong endpoint AppLocationAvailability.json + Check HTTP Response Status Code Is 404 + + +*** Keywords *** +Obtain Application Location Availability Task + [Arguments] ${content} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path}= Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/obtain_app_loc_availability ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Obtain Application Location Availability Task using wrong endpoint + [Arguments] ${content} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path}= Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/obtain_app_loc_availability_error ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} diff --git a/MEC016/MEO/UEAPPLOC/environment/variables.txt b/MEC016/MEO/UEAPPLOC/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..fd69adc16833ed7bbf8ded964c9497020536c3fd --- /dev/null +++ b/MEC016/MEO/UEAPPLOC/environment/variables.txt @@ -0,0 +1,11 @@ +*** Variables *** +${apiRoot} +${apiName} dev_app +${apiVersion} v1 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 192.168.56.1 +${MEC-APP_PORT} 8081 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + diff --git a/MEC016/MEO/UEAPPLOC/jsons/AppLocationAvailability.json b/MEC016/MEO/UEAPPLOC/jsons/AppLocationAvailability.json new file mode 100644 index 0000000000000000000000000000000000000000..fdf8d3a32cc0336cedcf7ec29b789556789ee99e --- /dev/null +++ b/MEC016/MEO/UEAPPLOC/jsons/AppLocationAvailability.json @@ -0,0 +1,8 @@ +{ + "associateDevAppId":"MyNewWornderfulDevAppId", + "appInfo":{ + "appName":"MyNewWornderfulApp", + "appProvider":"TF012", + "appDVersion":"v0.0.1" + } +} \ No newline at end of file diff --git a/MEC016/MEO/UEAPPLOC/jsons/AppLocationAvailability_BR.json b/MEC016/MEO/UEAPPLOC/jsons/AppLocationAvailability_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..d907dd4c367a5faecd5d2eef65155ae025156045 --- /dev/null +++ b/MEC016/MEO/UEAPPLOC/jsons/AppLocationAvailability_BR.json @@ -0,0 +1,8 @@ +{ + "associateDevAppId":"MyNewWornderfulDevAppId", + "appInfo":{ + "app":"MyNewWornderfulApp", + "appProvider":"TF012", + "appDVersion":"v0.0.1" + } +} \ No newline at end of file diff --git a/MEC016/MEO/UEAPPLOC/schemas/ApplicationLocationAvailability.schema.json b/MEC016/MEO/UEAPPLOC/schemas/ApplicationLocationAvailability.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..7b1301f22a986159f0bd06045f0166c31ab3fb59 --- /dev/null +++ b/MEC016/MEO/UEAPPLOC/schemas/ApplicationLocationAvailability.schema.json @@ -0,0 +1,146 @@ +{ + "properties": { + "appInfo": { + "description": "", + "properties": { + "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. The length of the value shall not exceed 128 characters.", + "type": "string", + "maxLength": 128, + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "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" + }, + "appPackageSource": { + "description": "URI of the application package. Shall be included in the request. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 0102 [1].", + "format": "uri", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "URI" + }, + "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": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "availableLocations": { + "description": "MEC application location constraints. ", + "items": { + "type": "object", + "properties": { + "appLocation": { + "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": "array (Structure (inline))" + } + }, + "required": [ + "appName", + "appProvider", + "appDVersion" + ], + "type": "object", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "associateDevAppId": { + "description": "Uniquely identifies the device 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": [ + "associateDevAppId", + "appInfo" + ], + "type": "object", + "x-etsi-ref": "6.2.4" + } \ No newline at end of file diff --git a/MEO/PKGM/jsons/MalformedAppPkg.json b/MEC016/MEO/UEAPPS/README.md similarity index 100% rename from MEO/PKGM/jsons/MalformedAppPkg.json rename to MEC016/MEO/UEAPPS/README.md diff --git a/MEC016/MEO/UEAPPS/SysUeApplications.robot b/MEC016/MEO/UEAPPS/SysUeApplications.robot new file mode 100644 index 0000000000000000000000000000000000000000..8b9f1e6805380a02d110d265604b9d46128f2acd --- /dev/null +++ b/MEC016/MEO/UEAPPS/SysUeApplications.robot @@ -0,0 +1,100 @@ +''[Documentation] robot --outputdir ../../outputs ./SysUeApplications.robot +... Test Suite to validate Bandwidth Management API (APPCTX) operations. + +*** 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 + + + +*** Test Cases *** +TP_MEC_MEC016_MEO_UEAPPS_001_OK + [Documentation] + ... Check that the IUT responds with the list of user applications available when requested by an UE Application + ... Reference ETSI GS MEC 016 v2.2.1, clause 7.3.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the application contexts list + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ApplicationList + ## Post condition + FOR ${appInfo} IN @{response['body']['appList']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${appInfo['appInfo']['appName']} ${APP_NAME} + Exit For Loop If ${passed} + END + Should Be True ${passed} + +TP_MEC_MEC016_MEO_UEAPPS_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 016 v2.2.1, clause 7.3.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the application contexts list using wrong endpoint + Check HTTP Response Status Code Is 404 + + +TP_MEC_MEC016_MEO_UEAPPS_002_OK + [Documentation] + ... Check that the IUT responds with the list of user applications available when requested by an UE Application + ... Reference ETSI GS MEC 016 2.2.1, clause 7.3.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the application contexts list using filters ${filter} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ApplicationList + FOR ${appInfo} IN @{response['body']['appList']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${appInfo['appInfo']['appName']} ${APP_NAME} + Exit For Loop If ${passed} + END + Should Be True ${passed} + +TP_MEC_MEC016_MEO_UEAPPS_002_BR + [Documentation] + ... Check that the IUT responds with the list of user applications available when requested by an UE Application + ... Reference ETSI GS MEC 016 2.2.1, clause 7.3.3.1 + ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the application contexts list using filters ${bad_filter} + Check HTTP Response Status Code Is 400 + + + +*** Keywords *** +Retrieve the application contexts list + 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}"} + GET ${apiRoot}/${apiName}/${apiVersion}/app_list + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve the application contexts list using wrong endpoint + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/app_list_error + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve the application contexts list using filters + [Arguments] ${filter} + 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}"} + GET ${apiRoot}/${apiName}/${apiVersion}/app_list?${filter} + ${output}= Output response + Set Suite Variable ${response} ${output} + diff --git a/MEC016/MEO/UEAPPS/environment/variables.txt b/MEC016/MEO/UEAPPS/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..82ee14b3988541555049d9a72cadf6a72e4d2eff --- /dev/null +++ b/MEC016/MEO/UEAPPS/environment/variables.txt @@ -0,0 +1,14 @@ +*** Variables *** +${apiRoot} +${apiName} dev_app +${apiVersion} v1 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 192.168.56.1 +${MEC-APP_PORT} 8081 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +${APP_NAME} MyWornderfulApp +${filter} appName=${APP_NAME} +${bad_filter} app=${APP_NAME} diff --git a/MEC016/MEO/UEAPPS/schemas/ApplicationList.schema.json b/MEC016/MEO/UEAPPS/schemas/ApplicationList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..453efaddbc678737d929ecea352606dd9403f2d9 --- /dev/null +++ b/MEC016/MEO/UEAPPS/schemas/ApplicationList.schema.json @@ -0,0 +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": { + "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", + "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 diff --git a/SRV/AMS/AMSService.robot b/MEC021/SRV/AMS/AMSService.robot similarity index 86% rename from SRV/AMS/AMSService.robot rename to MEC021/SRV/AMS/AMSService.robot index 201d736b3e948fc28adf326d3b4c575dff87c9d3..25ed72c2927516c9b76f9759b989403bf97ebabb 100644 --- a/SRV/AMS/AMSService.robot +++ b/MEC021/SRV/AMS/AMSService.robot @@ -3,8 +3,8 @@ *** Settings *** Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot Library REST ${AMS_SCHEMA}://${AMS_HOST}:${AMS_PORT} ssl_verify=false Library BuiltIn Library OperatingSystem @@ -14,8 +14,8 @@ Library MockServerLibrary *** Test Cases *** -Request Registered AMS information - [Documentation] TP_MEC_SRV_AMS_001_OK +TC_MEC_MEC021_SRV_AMS_001_OK + [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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -24,8 +24,8 @@ Request Registered AMS information Check HTTP Response Body Json Schema Is AppMobilityServiceInfos -Request Registered AMS information using attribute-selector - [Documentation] TP_MEC_SRV_AMS_001_OK +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -35,8 +35,8 @@ Request Registered AMS information using attribute-selector Check Result Contains ${response['body']['AppMobilityServiceInfo']} appMobilityServiceId ${APP_MOBILITY_SERVICE_ID} -Request Registered AMS information using bad parameters - [Documentation] TP_MEC_SRV_AMS_001_BR +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -44,8 +44,8 @@ Request Registered AMS information using bad parameters Check HTTP Response Status Code Is 400 -Register a new application mobility services - [Documentation] TP_MEC_SRV_AMS_002_OK +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -56,8 +56,8 @@ Register a new application mobility services Check Result Contains ${response['body']['AppMobilityServiceInfo']['registeredAppMobilityService']['serviceConsumerId']['']} appInstanceId ${APP_INS_ID} -Register an UE Identity Tag using invalid parameter - [Documentation] TP_MEC_SRV_AMS_002_BR +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -65,8 +65,8 @@ Register an UE Identity Tag using invalid parameter Check HTTP Response Status Code Is 400 -Request Subscriptions List for the registered AMS services - [Documentation] TP_MEC_SRV_AMS_003_OK +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 @@ -79,8 +79,8 @@ Request Subscriptions List for the registered AMS services -Request Subscription List for registered AMS Services using wrong attribute parameters - [Documentation] TP_MEC_SRV_AMS_003_BR +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS Get Subscriptions for registered AMS with wrong attbirube parameter @@ -88,8 +88,8 @@ Request Subscription List for registered AMS Services using wrong attribute para -Create a notification subscription - [Documentation] TP_MEC_SRV_AMS_004_OK +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 @@ -101,8 +101,8 @@ Create a notification subscription Check HTTP Response Body Json Schema Is NotificationSubscription -Create a notification subscription with wrong attribute parameter - [Documentation] TP_MEC_SRV_AMS_004_BR +TC_MEC_MEC021_SRV_AMS_005_BR + [Documentation] Create a notification subscription with wrong attribute parameter ... Check that the AMS service creates a notification subscriptions when requested. ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription @@ -114,8 +114,8 @@ Create a notification subscription with wrong attribute parameter -Request a specific subscription - [Documentation] TP_MEC_SRV_AMS_005_OK +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 @@ -128,9 +128,8 @@ Request a specific subscription - -Request a specific subscription using wrong identifier - [Documentation] TP_MEC_SRV_AMS_005_NF +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -138,9 +137,8 @@ Request a specific subscription using wrong identifier Check HTTP Response Status Code Is 404 - -Modify a specific subscription - [Documentation] TP_MEC_SRV_AMS_007_OK +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 @@ -153,8 +151,8 @@ Modify a specific subscription -Modify a specific subscription using malformed request - [Documentation] TP_MEC_SRV_AMS_007_BR +TC_MEC_MEC021_SRV_AMS_007_BR + [Documentation] Modify a specific subscription using malformed request ... Check that the AMS service sends an error when it receives a malformed modify request for a given subscription. ... Permitted SUBSCRIPTION_TYPE are: ... - MobilityProcedureSubscription @@ -165,8 +163,8 @@ Modify a specific subscription using malformed request Check HTTP Response Status Code Is 400 -Modify a specific subscription using wrong identifier - [Documentation] TP_MEC_SRV_AMS_007_NF +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -174,8 +172,8 @@ Modify a specific subscription using wrong identifier Check HTTP Response Status Code Is 404 -Remove a specific subscription - [Documentation] TP_MEC_SRV_AMS_006_OK +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -183,8 +181,8 @@ Remove a specific subscription Check HTTP Response Status Code Is 204 -Remove a specific subscription using wrong identifier - [Documentation] TP_MEC_SRV_AMS_006_NF +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -192,9 +190,8 @@ Remove a specific subscription using wrong identifier Check HTTP Response Status Code Is 404 - -Post Mobility Procedure Notification - [Documentation] TP_MEC_SRV_AMS_008_OK +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 @@ -212,8 +209,8 @@ Post Mobility Procedure Notification -Post Adjacent Application Info Notification - [Documentation] TP_MEC_SRV_AMS_009_OK +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 @@ -231,8 +228,8 @@ Post Adjacent Application Info Notification -Post Expire Notification - [Documentation] TP_MEC_SRV_AMS_010_OK +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 @@ -250,8 +247,8 @@ Post Expire Notification -Request a specific AMS service - [Documentation] TP_MEC_SRV_AMS_011_OK +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -261,8 +258,8 @@ Request a specific AMS service -Request a specific AMS Service using non existent identifier - [Documentation] TP_MEC_SRV_AMS_011_NF +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -271,8 +268,8 @@ Request a specific AMS Service using non existent identifier -Modify a specific AMS service - [Documentation] TP_MEC_SRV_AMS_012_OK +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -283,8 +280,8 @@ Modify a specific AMS service -Modify a specific AMS Service using non existent identifier - [Documentation] TP_MEC_SRV_AMS_012_NF +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -292,8 +289,8 @@ Modify a specific AMS Service using non existent identifier Check HTTP Response Status Code Is 404 -Modify a specific AMS Service using bad parameters - [Documentation] TP_MEC_SRV_AMS_012_BR +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -301,8 +298,8 @@ Modify a specific AMS Service using bad parameters Check HTTP Response Status Code Is 400 -Remove a specific AMS service - [Documentation] TP_MEC_SRV_AMS_013_OK +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 @@ -311,9 +308,8 @@ Remove a specific AMS service Check HTTP Response Status Code Is 204 - -Remove a specific AMS Service using non existent identifier - [Documentation] TP_MEC_SRV_AMS_013_NF +TC_MEC_MEC021_SRV_AMS_014_NF + [Documentation] Remove a specific AMS Service using non existent identifier ... 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 @@ -323,8 +319,8 @@ Remove a specific AMS Service using non existent identifier -Request to deregister a specific AMS service - [Documentation] TP_MEC_SRV_AMS_014_OK +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS @@ -333,8 +329,8 @@ Request to deregister a specific AMS service -Request to deregister a specific AMS service using non existent identifier - [Documentation] TP_MEC_SRV_AMS_014_NF +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 [Tags] PIC_AMS INCLUDE_UNDEFINED_SCHEMAS diff --git a/MEO/PKGM/jsons/MalformedAppPkgSubscription.json b/MEC021/SRV/AMS/README.md similarity index 100% rename from MEO/PKGM/jsons/MalformedAppPkgSubscription.json rename to MEC021/SRV/AMS/README.md diff --git a/SRV/AMS/environment/variables.txt b/MEC021/SRV/AMS/environment/variables.txt similarity index 100% rename from SRV/AMS/environment/variables.txt rename to MEC021/SRV/AMS/environment/variables.txt diff --git a/MEC028/WAI/AP_INFO/WaiApInfo.robot b/MEC028/WAI/AP_INFO/WaiApInfo.robot new file mode 100644 index 0000000000000000000000000000000000000000..c181ba049bc6b7b1132a84027b45ae1ab8cb1a53 --- /dev/null +++ b/MEC028/WAI/AP_INFO/WaiApInfo.robot @@ -0,0 +1,81 @@ +''[Documentation] robot --outputdir ../../outputs ./WaiApInfo.robot +... Test Suite to validate WLAN Information API (AP_INFO) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +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 + [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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the access point information + Check HTTP Response Status Code Is 200 + 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} + Exit For Loop If ${passed} + END + Should Be True ${passed} + +TP_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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the access point information using filters ${filter} + Check HTTP Response Status Code Is 200 + 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} + Exit For Loop If ${passed} + END + Should Be True ${passed} + + +TP_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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the access point information using filters ${bad_filter} + Check HTTP Response Status Code Is 400 + Check HTTP Response Body Json Schema Is ProblemDetails + + +*** Keywords *** +Retrieve the access point 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 {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/ap/ap_information + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve the access point information using filters + [Arguments] ${filter} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + 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 diff --git a/MEC028/WAI/AP_INFO/environment/variables.txt b/MEC028/WAI/AP_INFO/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..0f20b2e2afce7307555bfb94507188687d96807b --- /dev/null +++ b/MEC028/WAI/AP_INFO/environment/variables.txt @@ -0,0 +1,14 @@ +*** Variables *** +${apiRoot} +${apiName} wai +${apiVersion} v2 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 127.0.0.1 +${MEC-APP_PORT} 8082 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +${MAC_ID} macId01 +${filter} (eq,apId/macId,macId01) +${bad_filter} (eq,apId/mac,macId01) \ No newline at end of file diff --git a/MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json b/MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..19cc713220070b8093914883827757377fa798fa --- /dev/null +++ b/MEC028/WAI/AP_INFO/schemas/ApInfo.schema.json @@ -0,0 +1,777 @@ +{ + "items": { + "properties": { + "apId": { + "properties": { + "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" + }, + "macId": { + "description": "Unique Identifier assigned to an 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 including Basic Service Set and Extended Service Set.", + "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.3" + }, + "apLocation": { + "properties": { + "civicLocation": { + "properties": { + "ca0": { + "description": "Language", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca1": { + "description": "National subdivisions (state, canton, region,province, prefecture) ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca128": { + "description": "Script", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca16": { + "description": "Leading street direction", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca17": { + "description": "Trailing street suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca18": { + "description": "Street suffix or type", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca19": { + "description": "House number", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca2": { + "description": "County, parish, gun (JP), district (IN)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca20": { + "description": "House number suffix", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca21": { + "description": "Landmark of vanity address", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca22": { + "description": "Additional location information", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca23": { + "description": "Name (residence and office occupant)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca24": { + "description": "Postal/zip code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca25": { + "description": "Building (structure)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca26": { + "description": "Unit (apartment/suite)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca27": { + "description": "Floor", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca28": { + "description": "Room", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca29": { + "description": "Type of place", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca3": { + "description": "City, township, shi (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca30": { + "description": "Postal community name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca31": { + "description": "Post office box", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca32": { + "description": "Additional code", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca33": { + "description": "Seat (desk.cubicle, workstation)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca34": { + "description": "Primary road name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca35": { + "description": "Road section", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca36": { + "description": "Branch road name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca37": { + "description": "Sub-branch road name", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca38": { + "description": "Street name pre-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca39": { + "description": "Street name post-modifier", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca4": { + "description": "City division, borough, city district, ward, chou (JP)", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca5": { + "description": "Neighborhood, block", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "ca6": { + "description": "Group of streets below the neighborhood level ", + "type": "string", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "String" + }, + "country": { + "description": "The two-letter ISO 3166 [i.9] country code in capital ASCII letters, e.g. DE or US, as per ISO 3166 [i.9]", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "country" + ], + "type": "object", + "x-etsi-ref": "6.5.20" + }, + "geolocation": { + "properties": { + "altitude": { + "description": "The altitude value of location as defined in IETF RFC 6225 [6]", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "altitudeType": { + "description": "The type description for altitude information e.g. floors or meters as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "altitudeUncertainty": { + "description": "The uncertainty for altitude information as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "datum": { + "description": "The datum value to express how coordinates are organized and related to real world as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "lat": { + "description": "The latitude value of location as defined in IETF RFC 6225 [6]", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint64" + }, + "latUncertainty": { + "description": "The uncertainty for Latitude information as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "long": { + "description": "The longitude value of location as defined in IETF RFC 6225 [6]", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint64" + }, + "longUncertainty": { + "description": "The uncertainty for Longitude information as defined in IETF RFC 6225 [6]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "latUncertainty", + "lat", + "longUncertainty", + "long", + "datum" + ], + "type": "object", + "x-etsi-ref": "6.5.19" + } + }, + "type": "object", + "x-etsi-ref": "6.5.9" + }, + "apNeighbor": { + "properties": { + "bssid": { + "description": "BSS Id of the Access Point that is being reported.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "bssidInfo": { + "description": "Additional information related to Access Point that is being reported such as AP reachability, security, key scope, Mobility Domain, HT/VHT capability and Fine Time Measurements.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + }, + "channel": { + "description": "The channel currently used by this Access Point.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "operatingClass": { + "description": "The channel set of the AP indicated by this BSSID.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "phyType": { + "description": "PHY type of the AP indicated by this BSSID. It is an integer value coded according to the value of the dot11PHYType.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "bssid", + "bssidInfo", + "operatingClass", + "channel", + "phyType" + ], + "type": "object", + "x-etsi-ref": "6.5.10" + }, + "bssLoad": { + "properties": { + "availAdmCap": { + "description": "Available Admission Capacity that specifies the remaining amount of medium time available via explicit admission control, in units of 32 s/s.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "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.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "staCount": { + "description": "An unsigned integer that indicates the total number of STAs currently associated with this BSS.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + } + }, + "required": [ + "staCount", + "channelUtilization", + "availAdmCap" + ], + "type": "object", + "x-etsi-ref": "6.5.7" + }, + "channel": { + "description": "Channel configured for the Access Point.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint32" + }, + "extBssLoad": { + "properties": { + "muMimoStaCount": { + "description": "Indicates the total number of STAs currently associated with this BSS that have a 1 in the MU Beamformee Capable field of their VHT Capabilities element.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "obsSec20MhzUtil": { + "description": "Observable loading on each of the secondary 20 MHz channel.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "obsSec40MhzUtil": { + "description": "Observable loading on each of the secondary 40 MHz channel.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "obsSec80MhzUtil": { + "description": "Observable loading on each of the secondary 80 MHz channel.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "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.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + } + }, + "required": [ + "muMimoStaCount", + "spatStreamUnderUtil", + "obsSec20MhzUtil", + "obsSec40MhzUtil", + "obsSec80MhzUtil" + ], + "type": "object", + "x-etsi-ref": "6.5.8" + }, + "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" + }, + "wanMetrics": { + "properties": { + "downlinkLoad": { + "description": "1-octet positive integer representing the current percentage loading of the downlink WAN connection, scaled linearly with 255 representing 100 %, as measured over an interval the duration of which is reported in Load Measurement Duration. In cases where the downlink load is unknown to the AP, the value is set to zero.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "downlinkSpeed": { + "description": "4-octet positive integer whose value is an estimate of the WAN Backhaul link current downlink speed in kilobits per second.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "lmd": { + "description": "The LMD (Load Measurement Duration) field is a 2-octet positive integer representing the duration over which the Downlink Load and Uplink Load have been measured, in tenths of a second. When the actual load measurement duration is greater than the maximum value, the maximum value will be reported. The value of the LMD field is set to 0 when neither the uplink nor downlink load can be computed. When the uplink and downlink loads are computed over different intervals, the maximum interval is reported.", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + }, + "uplinkLoad": { + "description": "1-octet positive integer representing the current percentage loading of the uplink WAN connection, scaled linearly with 255 representing 100 %, as measured over an interval, the duration of which is reported in Load Measurement Duration. In cases where the uplink load is unknown to the AP, the value is set to zero.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "uplinkSpeed": { + "description": "4-octet positive integer whose value is an estimate of the WAN Backhaul link's current uplink speed in kilobits per second.", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + }, + "wanInfo": { + "description": "Info about WAN link status, link symmetricity and capacity currently used.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "wanInfo", + "downlinkSpeed", + "uplinkSpeed", + "downlinkLoad", + "uplinkLoad", + "lmd" + ], + "type": "object", + "x-etsi-ref": "6.5.6" + }, + "wlanCap": { + "properties": { + "dmg": { + "properties": { + "ExtScMcsCap": { + "description": "Extended SC MCS capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "dmgApOrPcpCapInfo": { + "description": "DMG AP or PCP capabilities information as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + }, + "dmgStaBeamTrackTimeLimit": { + "description": "DMG station beam tracking time limit as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + }, + "dmgStaCapInfo": { + "description": "DMG station capabilities information as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint64" + }, + "maxNrBasicAmsduSubframes": { + "description": "Number of basic A-MSDU subframes in A-MSDU as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "maxNrShortAmsduSubframes": { + "description": "Number of short A-MSDU subframes in A-MSDU as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "sarCap": { + "description": "SAR capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "tddCap": { + "description": "TDD capabilities as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + } + }, + "required": [ + "dmgStaCapInfo", + "dmgApOrPcpCapInfo", + "dmgStaBeamTrackTimeLimit", + "ExtScMcsCap", + "maxNrBasicAmsduSubframes", + "maxNrShortAmsduSubframes", + "tddCap", + "sarCap" + ], + "type": "object", + "x-etsi-ref": "6.5.17" + }, + "edmg": { + "properties": { + "ampduParameters": { + "description": "A-MPDU parameters as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "reserved": { + "description": "", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Uint8" + }, + "supportedMcs": { + "description": "Supported MCS as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint32" + }, + "trnParameters": { + "description": "Training parameters as defined in draft IEEE P802.11/D4.0 [i.11]", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint16" + } + }, + "required": [ + "ampduParameters", + "trnParameters", + "supportedMcs" + ], + "type": "object", + "x-etsi-ref": "6.5.18" + }, + "he": { + "properties": { + "heMacCapInfo": { + "description": "MAC capabilities of an Access Point.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "hePhyCapinfo": { + "description": "PHY capabilities of an Access Point.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + }, + "ppeThresholds": { + "description": "PPE Threshold determines the nominal packet padding value for a HE PPDU.", + "type": "integer", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "not defined" + }, + "supportedHeMcsNssSet": { + "description": "Supported MCS and NSS Set.", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint8" + } + }, + "required": [ + "heMacCapInfo", + "hePhyCapinfo", + "supportedHeMcsNssSet" + ], + "type": "object", + "x-etsi-ref": "6.5.16" + }, + "ht": { + "properties": { + "ampduParameters": { + "description": "A-MPDU parameters as defined in IEEE 802.11-2016 [8].", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "aselCap": { + "description": "ASEL capabilities as defined in IEEE 802.11-2016 [8].", + "format": "uint8", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt8" + }, + "htCapabilityInfo": { + "description": "HT Capability Information as defined in IEEE 802.11-2016 [8].", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "htExtendedCap": { + "description": "Extended HT Capabilities as defined in IEEE 802.11-2016 [8].", + "format": "uint16", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt16" + }, + "supportedMcsSet": { + "description": "Supported MCS set as defined in IEEE 802.11-2016 [8].", + "format": "uint128", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Uint128" + }, + "txBeamFormCap": { + "description": "Transmit Beamforming Capabilities as defined in IEEE 802.11-2016 [8].", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + } + }, + "required": [ + "htCapabilityInfo", + "ampduParameters", + "supportedMcsSet", + "htExtendedCap", + "txBeamFormCap", + "aselCap" + ], + "type": "object", + "x-etsi-ref": "6.5.14" + }, + "vht": { + "properties": { + "vhtCapInfo": { + "description": "VHT capabilities Info as defined in IEEE 802.11-2016 [8].", + "format": "uint32", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt32" + }, + "vhtMcsNss": { + "description": "Supported VHT-MCS and NSS Set as defined in IEEE 802.11-2016 [8].", + "format": "int64", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "UInt64" + } + }, + "required": [ + "vhtCapInfo", + "vhtMcsNss" + ], + "type": "object", + "x-etsi-ref": "6.5.15" + } + }, + "type": "object", + "x-etsi-ref": "6.5.4" + } + }, + "required": [ + "apId" + ], + "type": "object", + "x-etsi-ref": "6.2.2" +} +} \ No newline at end of file diff --git a/MEC028/WAI/AP_INFO/schemas/ProblemDetails.schema.json b/MEC028/WAI/AP_INFO/schemas/ProblemDetails.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..af823dabdd20b42adb07bc37fa76c312d45df1ff --- /dev/null +++ b/MEC028/WAI/AP_INFO/schemas/ProblemDetails.schema.json @@ -0,0 +1,40 @@ +{ + "ProblemDetails": { + "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" + } + }, + "type": "object" + } +} \ No newline at end of file diff --git a/MEC028/WAI/EXT_SUB/ExistingSubscription.robot b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot new file mode 100644 index 0000000000000000000000000000000000000000..187ff91203c19be4db2cb2d499ce0f67524ae160 --- /dev/null +++ b/MEC028/WAI/EXT_SUB/ExistingSubscription.robot @@ -0,0 +1,118 @@ +''[Documentation] robot --outputdir ../../outputs ./ExistingSubscription.robot +... Test Suite to validate WLAN Information API (EXT_SUB) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +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 + [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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve existing subscription information ${SUB_ID} + Check HTTP Response Status Code Is 200 + 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} + +TP_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 + 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 + + +*** Test Cases *** +TP_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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Modify existing subscription information ${SUB_ID} UpdateAssocStaSubscription.json + Check HTTP Response Status Code Is 200 + 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']} ${NEW_CALLBACK_URI} + Should Be Equal As Strings ${response['body']['apId']['macId']} ${MAC_ID} + +TP_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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Modify existing subscription information ${SUB_ID} UpdateAssocStaSubscription_BR.json + Check HTTP Response Status Code Is 400 + + +TP_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 + 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 + [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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Remove existing subscription information ${NOT_EXISTING_SUB_ID} + Check HTTP Response Status Code Is 404 + +*** Keywords *** +Retrieve existing subscription information + [Arguments] ${SUB_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${SUB_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Modify existing subscription information + [Arguments] ${SUB_ID} ${content} + Should Be True ${PIC_MEC_SYSTEM} == 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} + ${body} Get File ${path} + PUT ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${SUB_ID} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Remove existing subscription information + [Arguments] ${SUB_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + 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 diff --git a/MEC028/WAI/EXT_SUB/environment/variables.txt b/MEC028/WAI/EXT_SUB/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..d7beea87162ae10b50b7270001a5bf1fb1404bec --- /dev/null +++ b/MEC028/WAI/EXT_SUB/environment/variables.txt @@ -0,0 +1,17 @@ +*** Variables *** +${apiRoot} +${apiName} wai +${apiVersion} v2 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 127.0.0.1 +${MEC-APP_PORT} 8082 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +${SUB_TYPE} AssocStaSubscription +${SUB_ID} 1 +${NOT_EXISTING_SUB_ID} 99 +${CALLBACK_URI} http://callback.uri/1 +${NEW_CALLBACK_URI} http://new.callback.uri/1 +${MAC_ID} macId01 \ No newline at end of file diff --git a/MEC028/WAI/EXT_SUB/jsons/UpdateAssocStaSubscription.json b/MEC028/WAI/EXT_SUB/jsons/UpdateAssocStaSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..578d8f048352ec7479bb7c72ff70ec2573ad44e5 --- /dev/null +++ b/MEC028/WAI/EXT_SUB/jsons/UpdateAssocStaSubscription.json @@ -0,0 +1,11 @@ +{ + "_links":{ + "href":"" + }, + + "apId": { + "macId": "macId01" + }, + "callbackReference": "http://new.callback.uri/1", + "subscriptionType": "AssocStaSubscription" +} \ No newline at end of file diff --git a/MEC028/WAI/EXT_SUB/jsons/UpdateAssocStaSubscription_BR.json b/MEC028/WAI/EXT_SUB/jsons/UpdateAssocStaSubscription_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..d5fb273e24e817996ef62b065d8834cab7301ce8 --- /dev/null +++ b/MEC028/WAI/EXT_SUB/jsons/UpdateAssocStaSubscription_BR.json @@ -0,0 +1,11 @@ +{ + "_links":{ + "href":"" + }, + + "apId": { + "macId": "macId01" + }, + "callbackReference": "http://callback.uri/1", + "subscriptionType": "INVALID_VALUE" +} \ No newline at end of file diff --git a/MEC028/WAI/EXT_SUB/schemas/AssocStaSubscription.schema.json b/MEC028/WAI/EXT_SUB/schemas/AssocStaSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..956773c3b0df727f21ce7a3341acf641c2407faf --- /dev/null +++ b/MEC028/WAI/EXT_SUB/schemas/AssocStaSubscription.schema.json @@ -0,0 +1,109 @@ +{ + "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", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "apId": { + "properties": { + "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" + }, + "macId": { + "description": "Unique Identifier assigned to an 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 including Basic Service Set and Extended Service Set.", + "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.3" + }, + "callbackReference": { + "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN 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" + }, + "subscriptionType": { + "description": "Shall be set to \"AssocStaSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "apId" + ], + "type": "object", + "x-etsi-ref": "6.3.2" +} \ No newline at end of file diff --git a/MEC028/WAI/MEAS/WaiMeasurement.robot b/MEC028/WAI/MEAS/WaiMeasurement.robot new file mode 100644 index 0000000000000000000000000000000000000000..0aa1a6ddf95b22ffb21687fcc0972ccd005e5a24 --- /dev/null +++ b/MEC028/WAI/MEAS/WaiMeasurement.robot @@ -0,0 +1,189 @@ +''[Documentation] robot --outputdir ../../outputs ./WaiMeasurement.robot +... Test Suite to validate WLAN Measurement API (MEAS) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +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 + [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 + 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 + +TP_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 + 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 + 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']} + +TP_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 + 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} + Check HTTP Response Status Code Is 400 + +TP_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" + 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 Status Code Is 200 + Should Be Equal As Strings ${response['body']['measurementId'] ${MEAS_ID} + + + +TP_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" + 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 + [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" + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + ${path} Catenate SEPARATOR= jsons/ MeasurementConfigUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + 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']['measurementInfo']} ${json_object['measurementInfo']} + + + +TP_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" + 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 + + +TP_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" + 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 + [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" + 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 + + +*** Keywords *** +Retrieve a list of list of measurement configurations + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement + ${output}= Output response + Set Suite Variable ${response} ${output} + +Create a new measurement configuration + [Arguments] ${body} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + POST ${apiRoot}/${apiName}/${apiVersion}/queries/measurements ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retrieve a specified measurement configuration + [Arguments] ${MEAS_CONF_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Update a specified measurement configuration + [Arguments] ${MEAS_CONF_ID} ${content} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Delete a specified measurement configuration + [Arguments] ${MEAS_CONF_ID} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${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 new file mode 100644 index 0000000000000000000000000000000000000000..bb9bd9dd503e35ce794bb8f8e3f39e7f10690e1d --- /dev/null +++ b/MEC028/WAI/MEAS/environment/variables.txt @@ -0,0 +1,14 @@ +*** Variables *** +${apiRoot} +${apiName} wai +${apiVersion} v2 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 127.0.0.1 +${MEC-APP_PORT} 8082 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +${STA_ID} 123 +${MEAS_ID} 456 +${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 new file mode 100644 index 0000000000000000000000000000000000000000..deb6857866480a2595a843d4f02d4ff012d4e0d6 --- /dev/null +++ b/MEC028/WAI/MEAS/jsons/MeasurementConfig.json @@ -0,0 +1,16 @@ +{ + "staId": [ + { + "macId": "123" + } + ], + "measurementId": "123", + "measurementInfo": { + "measurementDuration": 10 + }, + "_links": { + "self": { + "href": "/link/" + } + } +} \ No newline at end of file diff --git a/MEC028/WAI/MEAS/jsons/MeasurementConfigError.json b/MEC028/WAI/MEAS/jsons/MeasurementConfigError.json new file mode 100644 index 0000000000000000000000000000000000000000..a2e38f2087768821fda81296927b16e971455c6d --- /dev/null +++ b/MEC028/WAI/MEAS/jsons/MeasurementConfigError.json @@ -0,0 +1,16 @@ +{ + "StaIdentities": [ + { + "macId": "123" + } + ], + "measurementId": "123", + "measurementInfo": { + "measurementDuration": 10 + }, + "_links": { + "self": { + "href": "/link/" + } + } +} \ No newline at end of file diff --git a/MEC028/WAI/MEAS/jsons/MeasurementConfigUpdate.json b/MEC028/WAI/MEAS/jsons/MeasurementConfigUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..b758cf4353c89e140b37f8533d9c4e9326d53a3f --- /dev/null +++ b/MEC028/WAI/MEAS/jsons/MeasurementConfigUpdate.json @@ -0,0 +1,16 @@ +{ + "staId": [ + { + "macId": "123" + } + ], + "measurementId": "123", + "measurementInfo": { + "measurementDuration": 50 + }, + "_links": { + "self": { + "href": "/link/" + } + } +} \ No newline at end of file diff --git a/MEC028/WAI/MEAS/schemas/MeasurementConfig.schema.json b/MEC028/WAI/MEAS/schemas/MeasurementConfig.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..d393606cf81498b58422515178c3ab48c4525b7c --- /dev/null +++ b/MEC028/WAI/MEAS/schemas/MeasurementConfig.schema.json @@ -0,0 +1,329 @@ +{ + "properties": { + "_links": { + "properties": { + "self": { + "properties": { + "href": { + "description": "URI referring to a resource", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1" + }, + "staId": { + "minItems": 1, + "type": "array", + "items": { + "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" + } + }, + "measurementId": { + "type": "string" + }, + "measurementInfo": { + "properties": { + "measurementDuration": { + "type": "integer", + "format": "unit16" + }, + "randomInterval": { + "type": "integer", + "format": "unit16" + }, + "channelLoadConf": { + "properties": { + "apId": { + "properties": { + "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" + }, + "macId": { + "description": "Unique Identifier assigned to an 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 including Basic Service Set and Extended Service Set.", + "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.3" + }, + "cChannelId": { + "description": "Channel number which load is reported", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "channelLoad": { + "description": "Channel load as per IEEE 802.11-2012 [8], section 11.11.9.3", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + } + }, + "required": [ + "apId", + "cChannelId", + "channelLoad" + ], + "type": "object", + "x-etsi-ref": "6.5.24" + }, + "beaconRequestConf": { + "properties": { + "bssId": { + "description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report is requested. When requesting beacon reports for all BSSs on the channel, the BSSID field contains the wildcard BSSID.", + "items": { + "type": "string" + }, + "minItems": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "String" + }, + "channelId": { + "description": "Channel number to scan. A Channel Number of 0 indicates a request to make iterative measurements for all supported channels in the Operating Class where the measurement is permitted on the channel and the channel is valid for the current regulatory domain. A Channel Number of 255 indicates a request to make iterative measurements for all supported channels in the current Operating Class listed in the latest AP Channel Report received from the serving AP.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "measurementMode": { + "description": "0 for passive.\n1 for active.\n2 for beacon table.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "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 requested.", + "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" + } + }, + "required": [ + "staId", + "channelId", + "measurementMode", + "bssId", + "ssId", + "reportingCondition" + ], + "type": "object", + "x-etsi-ref": "6.5.25" + }, + "staStatisticsConf": { + "properties": { + "groupIdentity": { + "description": "As per table T 9-114 of IEEE 802.11-2012 [8].", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "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" + }, + "triggerCondition": { + "type": "integer" + }, + "triggerTimeout": { + "description": "The Trigger Timeout field contains a value in units of 100 TUs during which a measuring STA does not generate further triggered STA Statistics Reports after a trigger condition has been met.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "triggeredReport": { + "type": "boolean" + } + }, + "required": [ + "staId", + "groupIdentity", + "triggeredReport", + "triggerTimeout", + "triggerCondition" + ], + "type": "object", + "x-etsi-ref": "6.5.26" + }, + "neighborReportConf": { + "properties": { + "ssid": { + "type": "string" + }, + "bssid": { + "type": "string" + } + } + } + }, + "type": "object", + "x-etsi-ref": "6.2.3" + } + }, + "required": [ + "staId", + "measurementId", + "measurementInfo" + ], + "type": "object" + } \ No newline at end of file diff --git a/MEC028/WAI/MEAS/schemas/MeasurementConfigLinkList.schema.json b/MEC028/WAI/MEAS/schemas/MeasurementConfigLinkList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..976b69238c52758e6bcf59b4c7b073d9d10507d8 --- /dev/null +++ b/MEC028/WAI/MEAS/schemas/MeasurementConfigLinkList.schema.json @@ -0,0 +1,46 @@ +{ + "required": [ + "_links" + ], + "properties": { + "_links": { + "required": [ + "self" + ], + "properties": { + "self": { + "properties": { + "href": { + "description": "URI referring to a resource", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + } + } + }, + "measurementConfig": { + "type": "array", + "items": { + "required": [ + "href", + "measurementId" + ], + "properties": { + "href": { + "type": "string" + }, + "measurementId": { + "type": "string" + } + } + } + } + } +} \ No newline at end of file diff --git a/MEC028/WAI/STA_INFO/WaiStaInfo.robot b/MEC028/WAI/STA_INFO/WaiStaInfo.robot new file mode 100644 index 0000000000000000000000000000000000000000..7cc7b4e0789b8f2069e8d90227eb030d2959aa30 --- /dev/null +++ b/MEC028/WAI/STA_INFO/WaiStaInfo.robot @@ -0,0 +1,81 @@ +''[Documentation] robot --outputdir ../../outputs ./WaiSTAInfo.robot +... Test Suite to validate WLAN Information API (STA_INFO) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +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_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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the station information + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is StaInfo + ## Post condition + FOR ${staInfo} IN @{response['body']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${staInfo['staId']['macId']} ${MAC_ID} + Exit For Loop If ${passed} + END + Should Be True ${passed} + +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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the station information using filters ${filter} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is StaInfo + ## Post condition + FOR ${staInfo} IN @{response['body']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${staInfo['staId']['macId']} ${MAC_ID} + Exit For Loop If ${passed} + END + Should Be True ${passed} + + +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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Retrieve the station information using filters ${bad_filter} + Check HTTP Response Status Code Is 400 + Check HTTP Response Body Json Schema Is ProblemDetails + + +*** Keywords *** +Retrieve the station 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 {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/sta/sta_information + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve the station information using filters + [Arguments] ${filter} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/sta/sta_information?filter=${filter} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC028/WAI/STA_INFO/environment/variables.txt b/MEC028/WAI/STA_INFO/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..79e2b50d7252eb9ea39b85c71ac9375dd5d0288b --- /dev/null +++ b/MEC028/WAI/STA_INFO/environment/variables.txt @@ -0,0 +1,14 @@ +*** Variables *** +${apiRoot} +${apiName} wai +${apiVersion} v2 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 127.0.0.1 +${MEC-APP_PORT} 8082 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +${MAC_ID} macId01 +${filter} (eq,staId/macId,macId01) +${bad_filter} (eq,staId/mac,macId01) \ No newline at end of file diff --git a/MEC028/WAI/STA_INFO/schemas/ProblemDetails.schema.json b/MEC028/WAI/STA_INFO/schemas/ProblemDetails.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..e14c086be788bc09d04dec116e920963de1ec3f6 --- /dev/null +++ b/MEC028/WAI/STA_INFO/schemas/ProblemDetails.schema.json @@ -0,0 +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" + }, + "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 diff --git a/MEC028/WAI/STA_INFO/schemas/StaInfo.schema.json b/MEC028/WAI/STA_INFO/schemas/StaInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..cc1136cf40ab0943b114356954d889dedd330f53 --- /dev/null +++ b/MEC028/WAI/STA_INFO/schemas/StaInfo.schema.json @@ -0,0 +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" + }, + "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" + }, + "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" + }, + "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" + }, + "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" + } + }, + "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" + } + }, + "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" + }, + "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" + } + }, + "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" + }, + "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" + }, + "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" + } + }, + "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" + }, + "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 new file mode 100644 index 0000000000000000000000000000000000000000..1db1a1d1c56e2c6aabf48467a8871abb3d8cacb9 --- /dev/null +++ b/MEC028/WAI/SUB/WaiSubscription.robot @@ -0,0 +1,140 @@ +''[Documentation] robot --outputdir ../../outputs ./WaiSubscription.robot +... Test Suite to validate WLAN Information API (SUB) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +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_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 + + 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']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${assocStaSub['_links']['self']['href']} ${HREF} + Exit For Loop If ${passed} + END + +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 + + 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 + Should Be Equal As Strings ${response['body']['_links']['self']['href']} ${HREF} + +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 + + 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 + +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 + 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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Send a request for creating a subscription AssocStaSubscription.json + Check HTTP Response Status Code Is 201 + 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']['_links']['self']['href']} ${HREF} + Should Be Equal As Strings ${response['headers']['Location']} ${HREF} + +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 + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Send a request for creating a subscription AssocStaSubscription_BR.json + Check HTTP Response Status Code Is 400 + +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 + 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 + Check HTTP Response Status Code Is 404 + + +*** Keywords *** +Send a request for creating a subscription + [Arguments] ${content} + Log Creating a new subscription + #Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + Log ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Send a request for creating a subscription using wrong endpoint + [Arguments] ${content} + Log Creating a new subscription + #Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + ${path} Catenate SEPARATOR= jsons/ ${content} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions_INVALID_URI ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +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 {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?subscription_type=${subscription_type} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve the subscription information using wrong endpoint + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + #Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + 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 diff --git a/MEC028/WAI/SUB/environment/variables.txt b/MEC028/WAI/SUB/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..0a66f360896900ae0697e4be24a673400c6d1f57 --- /dev/null +++ b/MEC028/WAI/SUB/environment/variables.txt @@ -0,0 +1,18 @@ +*** Variables *** +${apiRoot} +${apiName} wai +${apiVersion} v2 + +${MEC-APP_SCHEMA} http +${MEC-APP_HOST} 127.0.0.1 +${MEC-APP_PORT} 8082 + +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l + +${SUB_TYPE} AssocStaSubscription + +${SUB_FILTER} assoc_sta +${INVALID_SUB_FILTER} assocStaSub + +${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 new file mode 100644 index 0000000000000000000000000000000000000000..152ca49c96f3898d8412086b50a959d63ed18ec7 --- /dev/null +++ b/MEC028/WAI/SUB/jsons/AssocStaSubscription.json @@ -0,0 +1,7 @@ +{ + "apId": { + "macId": "macId01" + }, + "callbackReference": "http://callback.uri/1", + "subscriptionType": "AssocStaSubscription" +} \ No newline at end of file diff --git a/MEC028/WAI/SUB/jsons/AssocStaSubscription_BR.json b/MEC028/WAI/SUB/jsons/AssocStaSubscription_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..d5fb273e24e817996ef62b065d8834cab7301ce8 --- /dev/null +++ b/MEC028/WAI/SUB/jsons/AssocStaSubscription_BR.json @@ -0,0 +1,11 @@ +{ + "_links":{ + "href":"" + }, + + "apId": { + "macId": "macId01" + }, + "callbackReference": "http://callback.uri/1", + "subscriptionType": "INVALID_VALUE" +} \ No newline at end of file diff --git a/MEC028/WAI/SUB/schemas/AssocStaSubscription.schema.json b/MEC028/WAI/SUB/schemas/AssocStaSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..956773c3b0df727f21ce7a3341acf641c2407faf --- /dev/null +++ b/MEC028/WAI/SUB/schemas/AssocStaSubscription.schema.json @@ -0,0 +1,109 @@ +{ + "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", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "apId": { + "properties": { + "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" + }, + "macId": { + "description": "Unique Identifier assigned to an 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 including Basic Service Set and Extended Service Set.", + "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.3" + }, + "callbackReference": { + "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN 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" + }, + "subscriptionType": { + "description": "Shall be set to \"AssocStaSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "apId" + ], + "type": "object", + "x-etsi-ref": "6.3.2" +} \ No newline at end of file diff --git a/MEC028/WAI/SUB/schemas/SubscriptionLinkList.schema.json b/MEC028/WAI/SUB/schemas/SubscriptionLinkList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..b4818c13212d5cc36446de6eb23cc5fd22a93ba0 --- /dev/null +++ b/MEC028/WAI/SUB/schemas/SubscriptionLinkList.schema.json @@ -0,0 +1,272 @@ +{ + "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", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + } + }, + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "assocStaSubscription": { + "items": { + "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", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "apId": { + "properties": { + "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" + }, + "macId": { + "description": "Unique Identifier assigned to an 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 including Basic Service Set and Extended Service Set.", + "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.3" + }, + "callbackReference": { + "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN 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" + }, + "subscriptionType": { + "description": "Shall be set to \"AssocStaSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "apId" + ], + "type": "object", + "x-etsi-ref": "6.3.2" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "AssocStaSubscription" + }, + "staDataRateSubscription": { + "items": { + "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", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href" + ], + "type": "object", + "x-etsi-ref": "6.5.23" + } + }, + "required": [ + "self" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1", + "x-etsi-mec-origin-type": "Structure (inlined)" + }, + "callbackReference": { + "description": "URI selected by the service consumer to receive notifications on the subscribed WLAN Access Information Service. 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" + }, + "staId": { + "description": "Identifier(s) to uniquely specify the target client station(s) for the subscription", + "items": { + "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": 1, + "type": "array", + "x-etsi-mec-cardinality": "1..N", + "x-etsi-mec-origin-type": "StaIdentity" + }, + "subscriptionType": { + "description": "Shall be set to \"StaDataRateSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "staId" + ], + "type": "object", + "x-etsi-ref": "6.3.3" + }, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "StaDataRateSubscription" + } + }, + "required": [ + "_links" + ], + "type": "object" +} \ No newline at end of file diff --git a/SRV/FAIS/PlatFixedAcessInfo.robot b/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot similarity index 95% rename from SRV/FAIS/PlatFixedAcessInfo.robot rename to MEC029/SRV/FAIS/PlatFixedAcessInfo.robot index 852c25ff254c84b349ea27761a18c350f1ae54df..aa2b87a66378ac8ce6fa0c3837ba64a7daf1e951 100644 --- a/SRV/FAIS/PlatFixedAcessInfo.robot +++ b/MEC029/SRV/FAIS/PlatFixedAcessInfo.robot @@ -3,7 +3,8 @@ Documentation ... A test suite for validating Fixed Access Information Service (FAIS) operations. -Resource ../../GenericKeywords.robot +Resource ../../../GenericKeywords.robot +Resource ../../../pics.txt Resource environment/variables.txt Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false Library OperatingSystem @@ -15,8 +16,7 @@ Default Tags TC_MEC_SRV_FAIS *** Test Cases *** - -TC_MEC_SRV_FAIS_001_OK +TC_MEC_MEC029_SRV_FAIS_001_OK [Documentation] ... Check that the IUT responds with the current status of the fixed access information ... when queried by a MEC Application @@ -29,7 +29,7 @@ TC_MEC_SRV_FAIS_001_OK Check HTTP Response Body Json Schema Is FaInfo -TC_MEC_SRV_FAIS_001_BR +TC_MEC_MEC029_SRV_FAIS_001_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -41,7 +41,7 @@ TC_MEC_SRV_FAIS_001_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_FAIS_001_NF +TC_MEC_MEC029_SRV_FAIS_001_NF [Documentation] ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application @@ -53,7 +53,7 @@ TC_MEC_SRV_FAIS_001_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_FAIS_002_OK +TC_MEC_MEC029_SRV_FAIS_002_OK [Documentation] ... Check that the IUT responds with the current status of the device information ... when queried by a MEC Application @@ -66,7 +66,7 @@ TC_MEC_SRV_FAIS_002_OK Check HTTP Response Body Json Schema Is DeviceInfo -TC_MEC_SRV_FAIS_002_BR +TC_MEC_MEC029_SRV_FAIS_002_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -78,7 +78,7 @@ TC_MEC_SRV_FAIS_002_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_FAIS_002_NF +TC_MEC_MEC029_SRV_FAIS_002_NF [Documentation] ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application @@ -90,7 +90,7 @@ TC_MEC_SRV_FAIS_002_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_FAIS_003_OK +TC_MEC_MEC029_SRV_FAIS_003_OK [Documentation] ... Check that the IUT responds with the current status of the cable line information ... when queried by a MEC Application @@ -103,7 +103,7 @@ TC_MEC_SRV_FAIS_003_OK Check HTTP Response Body Json Schema Is CableLineInfo -TC_MEC_SRV_FAIS_003_BR +TC_MEC_MEC029_SRV_FAIS_003_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -115,7 +115,7 @@ TC_MEC_SRV_FAIS_003_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_FAIS_003_NF +TC_MEC_MEC029_SRV_FAIS_003_NF [Documentation] ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application @@ -127,7 +127,7 @@ TC_MEC_SRV_FAIS_003_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_FAIS_004_OK +TC_MEC_MEC029_SRV_FAIS_004_OK [Documentation] ... Check that the IUT responds with the current status of the optical network information ... when queried by a MEC Application @@ -140,7 +140,7 @@ TC_MEC_SRV_FAIS_004_OK Check HTTP Response Body Json Schema Is PonInfo -TC_MEC_SRV_FAIS_004_BR +TC_MEC_MEC029_SRV_FAIS_004_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -152,7 +152,7 @@ TC_MEC_SRV_FAIS_004_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_FAIS_004_NF +TC_MEC_MEC029_SRV_FAIS_004_NF [Documentation] ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application @@ -164,7 +164,7 @@ TC_MEC_SRV_FAIS_004_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_FAIS_005_OK +TC_MEC_MEC029_SRV_FAIS_005_OK [Documentation] ... Check that the IUT responds with the subscriptions for fixed access information notifications ... when queried by a MEC Application @@ -177,7 +177,7 @@ TC_MEC_SRV_FAIS_005_OK Check HTTP Response Body Json Schema Is SubscriptionLinkList -TC_MEC_SRV_FAIS_005_BR +TC_MEC_MEC029_SRV_FAIS_005_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -189,7 +189,7 @@ TC_MEC_SRV_FAIS_005_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_FAIS_005_NF +TC_MEC_MEC029_SRV_FAIS_005_NF [Documentation] ... Check that the IUT responds with an error when ... a request for non-existing data is sent by a MEC Application @@ -201,7 +201,7 @@ TC_MEC_SRV_FAIS_005_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_FAIS_006_OK +TC_MEC_MEC029_SRV_FAIS_006_OK [Documentation] ... Check that the IUT acknowledges the subscription by a MEC Application ... to notifications on Optical Network Unit alarm events @@ -216,7 +216,7 @@ TC_MEC_SRV_FAIS_006_OK -TC_MEC_SRV_FAIS_006_BR +TC_MEC_MEC029_SRV_FAIS_006_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -228,7 +228,7 @@ TC_MEC_SRV_FAIS_006_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_FAIS_007_OK +TC_MEC_MEC029_SRV_FAIS_007_OK [Documentation] ... Check that the IUT responds with the information on a given subscription ... when queried by a MEC Application @@ -242,7 +242,7 @@ TC_MEC_SRV_FAIS_007_OK Check Result Contains ${response['body']['OnuAlarmSubscription']} subscriptionType OnuAlarmSubscription -TC_MEC_SRV_FAIS_007_NF +TC_MEC_MEC029_SRV_FAIS_007_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -254,7 +254,7 @@ TC_MEC_SRV_FAIS_007_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_FAIS_008_OK +TC_MEC_MEC029_SRV_FAIS_008_OK [Documentation] ... Check that the IUT updates an existing subscription ... when commanded by a MEC Application @@ -268,7 +268,7 @@ TC_MEC_SRV_FAIS_008_OK Check Result Contains ${response['body']['OnuAlarmSubscription']} subscriptionType OnuAlarmSubscription -TC_MEC_SRV_FAIS_008_BR +TC_MEC_MEC029_SRV_FAIS_008_BR [Documentation] ... Check that the IUT responds with an error when ... a request with incorrect parameters is sent by a MEC Application @@ -280,7 +280,7 @@ TC_MEC_SRV_FAIS_008_BR Check HTTP Response Status Code Is 400 -TC_MEC_SRV_FAIS_008_NF +TC_MEC_MEC029_SRV_FAIS_008_NF [Documentation] ... Check that the IUT responds with an error when ... a request for an unknown URI is sent by a MEC Application @@ -292,7 +292,7 @@ TC_MEC_SRV_FAIS_008_NF Check HTTP Response Status Code Is 404 -TC_MEC_SRV_FAIS_008_PF +TC_MEC_MEC029_SRV_FAIS_008_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 @@ -304,7 +304,7 @@ TC_MEC_SRV_FAIS_008_PF Check HTTP Response Status Code Is 412 -TC_MEC_SRV_FAIS_009_OK +TC_MEC_MEC029_SRV_FAIS_009_OK [Documentation] ... Check that the IUT cancels an existing subscription ... when commanded by a MEC Application @@ -316,7 +316,7 @@ TC_MEC_SRV_FAIS_009_OK Check HTTP Response Status Code Is 204 -TC_MEC_SRV_FAIS_010_OK +TC_MEC_MEC029_SRV_FAIS_010_OK [Documentation] ... Check that the IUT sends notification on expiry of Fixed Access Information event subscription ... to a MEC Application @@ -336,7 +336,7 @@ TC_MEC_SRV_FAIS_010_OK Clear Requests ${callback_endpoint} -TC_MEC_SRV_FAIS_011_OK +TC_MEC_MEC029_SRV_FAIS_011_OK [Documentation] ... Check that the IUT sends notifications on Fixed Access Information events ... to a subscribed MEC Application diff --git a/MEO/PKGM/schemas/AppPkgSubscriptionInfo.json b/MEC029/SRV/FAIS/README.md similarity index 100% rename from MEO/PKGM/schemas/AppPkgSubscriptionInfo.json rename to MEC029/SRV/FAIS/README.md diff --git a/SRV/FAIS/environment/variables.txt b/MEC029/SRV/FAIS/environment/variables.txt similarity index 100% rename from SRV/FAIS/environment/variables.txt rename to MEC029/SRV/FAIS/environment/variables.txt diff --git a/SRV/FAIS/jsons/DevInfoSubscription.json b/MEC029/SRV/FAIS/jsons/DevInfoSubscription.json similarity index 100% rename from SRV/FAIS/jsons/DevInfoSubscription.json rename to MEC029/SRV/FAIS/jsons/DevInfoSubscription.json diff --git a/SRV/FAIS/jsons/OnuAlarmSubscription.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json similarity index 100% rename from SRV/FAIS/jsons/OnuAlarmSubscription.json rename to MEC029/SRV/FAIS/jsons/OnuAlarmSubscription.json diff --git a/SRV/FAIS/jsons/OnuAlarmSubscriptionError.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionError.json similarity index 100% rename from SRV/FAIS/jsons/OnuAlarmSubscriptionError.json rename to MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionError.json diff --git a/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json similarity index 100% rename from SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json rename to MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdate.json diff --git a/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json b/MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json similarity index 100% rename from SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json rename to MEC029/SRV/FAIS/jsons/OnuAlarmSubscriptionUpdateError.json diff --git a/SRV/FAIS/schemas/CableLineInfo.schema.json b/MEC029/SRV/FAIS/schemas/CableLineInfo.schema.json similarity index 100% rename from SRV/FAIS/schemas/CableLineInfo.schema.json rename to MEC029/SRV/FAIS/schemas/CableLineInfo.schema.json diff --git a/SRV/FAIS/schemas/DevInfoSubscription.schema.json b/MEC029/SRV/FAIS/schemas/DevInfoSubscription.schema.json similarity index 100% rename from SRV/FAIS/schemas/DevInfoSubscription.schema.json rename to MEC029/SRV/FAIS/schemas/DevInfoSubscription.schema.json diff --git a/SRV/FAIS/schemas/DeviceInfo.schema.json b/MEC029/SRV/FAIS/schemas/DeviceInfo.schema.json similarity index 100% rename from SRV/FAIS/schemas/DeviceInfo.schema.json rename to MEC029/SRV/FAIS/schemas/DeviceInfo.schema.json diff --git a/SRV/FAIS/schemas/FaInfo.schema.json b/MEC029/SRV/FAIS/schemas/FaInfo.schema.json similarity index 100% rename from SRV/FAIS/schemas/FaInfo.schema.json rename to MEC029/SRV/FAIS/schemas/FaInfo.schema.json diff --git a/SRV/FAIS/schemas/OnuAlarmSubscription.schema.json b/MEC029/SRV/FAIS/schemas/OnuAlarmSubscription.schema.json similarity index 100% rename from SRV/FAIS/schemas/OnuAlarmSubscription.schema.json rename to MEC029/SRV/FAIS/schemas/OnuAlarmSubscription.schema.json diff --git a/SRV/FAIS/schemas/PonInfo.schema.json b/MEC029/SRV/FAIS/schemas/PonInfo.schema.json similarity index 100% rename from SRV/FAIS/schemas/PonInfo.schema.json rename to MEC029/SRV/FAIS/schemas/PonInfo.schema.json diff --git a/SRV/FAIS/schemas/SubscriptionLinkList.schema.json b/MEC029/SRV/FAIS/schemas/SubscriptionLinkList.schema.json similarity index 100% rename from SRV/FAIS/schemas/SubscriptionLinkList.schema.json rename to MEC029/SRV/FAIS/schemas/SubscriptionLinkList.schema.json diff --git a/MEO/PKGM/schemas/AppPkgSubscriptionLinkList.json b/MEC030/SRV/V2X/README.md similarity index 100% rename from MEO/PKGM/schemas/AppPkgSubscriptionLinkList.json rename to MEC030/SRV/V2X/README.md diff --git a/MEC030/SRV/V2X/V2XInformationService.robot b/MEC030/SRV/V2X/V2XInformationService.robot new file mode 100644 index 0000000000000000000000000000000000000000..915cbc6a5470ad73e5b176f16061d1e13be74d15 --- /dev/null +++ b/MEC030/SRV/V2X/V2XInformationService.robot @@ -0,0 +1,778 @@ +Y''[Documentation] robot --outputdir ../../../outputs ./V2XInformationService.robot +... Test Suite to validate V2X Information Service API (VIS) operations. + +*** Settings *** +Resource environment/variables.txt +Resource ../../../pics.txt +Resource ../../../GenericKeywords.robot +Library REST ${SCHEMA}://${HOST}:${PORT} ssl_verify=false +Library OperatingSystem + +##GET on ${apiRoot}/${apiName}/${apiVersion}/queries/uu_unicast_provisioning_info +*** Test Cases *** +TP_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 + ... 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 + [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 + ... 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 + [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 + ... 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 + [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 + ... 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 + + + +##GET on ${apiRoot}/${apiName}/${apiVersion}/queries/uu_mbms_provisioning_info +TP_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 + 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 + [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 + ... 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 + [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 + ... 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 + [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 + ... 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 + + + +##GET on ${apiRoot}/${apiName}/${apiVersion}/queries/pc5_provisioning_info +TP_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 + ... 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 + [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 + ... 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 + [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 + ... 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 + [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 + ... 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_predicted_qos +TP_MEC_MEC030_SRV_V2X_004_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 + ... 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 + [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 + ... 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 + [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 + ... 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 + + + +##POST on ${apiRoot}/${apiName}/${apiVersion}/publish_v2x_message +TP_MEC_MEC030_SRV_V2X_005_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 + ... 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 + [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 + ... 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 + + + +##GET on ${apiRoot}/${apiName}/${apiVersion}/subscription +TP_MEC_MEC030_SRV_V2X_006_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 + ... 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 + Retrieve subscription list information ${SUB_TYPE_PROV_CHG_UU_UNI} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SubscriptionLinkList + FOR ${sub} IN @{response['body']['_links']['subscriptions']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${sub['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_UNI} + Exit For Loop If ${passed}==False + END + Should Be True ${passed} + +TP_MEC_MEC030_SRV_V2X_006_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 + ... 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 + Retrieve subscription list information ${SUB_TYPE_PROV_CHG_UU_MBMS} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SubscriptionLinkList + FOR ${sub} IN @{response['body']['_links']['subscriptions']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${sub['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_MBMS} + Exit For Loop If ${passed} + END + Should Be True ${passed} + +TP_MEC_MEC030_SRV_V2X_006_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 + ... 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 + Retrieve subscription list information ${SUB_TYPE_PROV_CHG_PC5} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SubscriptionLinkList + FOR ${sub} IN @{response['body']['_links']['subscriptions']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${sub['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_PC5} + Exit For Loop If ${passed} + END + Should Be True ${passed} + +TP_MEC_MEC030_SRV_V2X_006_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 + ... 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 + Retrieve subscription list information ${SUB_TYPE_V2X_MSG} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is SubscriptionLinkList + FOR ${sub} IN @{response['body']['_links']['subscriptions']} + ${passed} Run Keyword And Return Status Should Be Equal As Strings ${sub['subscriptionType']} ${SUB_TYPE_RESP_V2X_MSG} + Exit For Loop If ${passed} + END + Should Be True ${passed} + + +TP_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.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 + Retrieve subscription list information ${SUB_TYPE_INVALID} + Check HTTP Response Status Code Is 400 + + +##POST on ${apiRoot}/${apiName}/${apiVersion}/subscription +TP_MEC_MEC030_SRV_V2X_007_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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscription.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Send a request for creating a subscription ${body} + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is ProvChgUuUniSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_UNI} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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 + [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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgUuMbmsSubscription.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Send a request for creating a subscription ${body} + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is ProvChgUuMbmsSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_MBMS} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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_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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgPc5Subscription.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Send a request for creating a subscription ${body} + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is ProvChgPc5Subscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_PC5} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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 + [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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ V2xMsgSubscription.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Send a request for creating a subscription ${body} + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is V2xMsgSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_V2X_MSG} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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_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 + ... 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 + ${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} + Check HTTP Response Status Code Is 400 + + +##GET on ${apiRoot}/${apiName}/${apiVersion}/subscriptions/{subscriptionId} +TP_MEC_MEC030_SRV_V2X_008_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 + ... 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 + Retrieve a subscription ${SUB_PROV_CHG_UU_UNI_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ProvChgUuUniSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_UNI} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + Should Not Be Empty ${response['body']['filterCriteria']} + Should Not Be Empty ${response['body']['_links']['self']['href']} + +TP_MEC_MEC030_SRV_V2X_008_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 + ... 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 + Retrieve a subscription ${SUB_PROV_CHG_UU_MBMS_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ProvChgUuMbmsSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_MBMS} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + Should Not Be Empty ${response['body']['filterCriteria']} + Should Not Be Empty ${response['body']['_links']['self']['href']} + + +TP_MEC_MEC030_SRV_V2X_008_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 + ... 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 + Retrieve a subscription ${SUB_PROV_CHG_PC5_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ProvChgPc5Subscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_PC5} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + Should Not Be Empty ${response['body']['filterCriteria']} + Should Not Be Empty ${response['body']['_links']['self']['href']} + +TP_MEC_MEC030_SRV_V2X_008_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 + ... 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 + Retrieve a subscription ${SUB_V2X_MSG_ID} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is V2xMsgSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_V2X_MSG} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + Should Not Be Empty ${response['body']['filterCriteria']} + Should Not Be Empty ${response['body']['_links']['self']['href']} + +TP_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.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 + Retrieve a subscription ${SUB_WRONG_PARAM} + Check HTTP Response Status Code Is 400 + + +TP_MEC_MEC030_SRV_V2X_008_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 + ... 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 + Retrieve a subscription ${NOT_EXISTING_SUB_ID} + Check HTTP Response Status Code Is 404 + + + +##PUT on ${apiRoot}/${apiName}/${apiVersion}/subscriptions/{subscriptionId} +TP_MEC_MEC030_SRV_V2X_009_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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscriptionUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update existing subscription ${SUB_PROV_CHG_UU_UNI_ID} ${body} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ProvChgUuUniSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_UNI} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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 + [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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgUuMbmsSubscriptionUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update existing subscription ${SUB_PROV_CHG_UU_MBMS_ID} ${body} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ProvChgUuMbmsSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_UU_MBMS} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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 + [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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgPc5SubscriptionUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update existing subscription ${SUB_PROV_CHG_PC5_ID} ${body} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is ProvChgPc5Subscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_PROV_CHG_PC5} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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 + [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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ V2xMsgSubscriptionUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update existing subscription ${SUB_V2X_MSG_ID} ${body} + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is V2xMsgSubscription + Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE_RESP_V2X_MSG} + Should Be Equal As Strings ${response['body']['callbackReference']} ${CALLBACK_URL} + 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 + [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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscriptionUpdate_BR.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update existing subscription ${SUB_PROV_CHG_UU_UNI_ID} ${body} + Check HTTP Response Status Code Is 400 + +TP_MEC_MEC030_SRV_V2X_009_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 + ... 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 + ${path} Catenate SEPARATOR= jsons/ ProvChgUuUniSubscriptionUpdate.json + ${body} Get File ${path} + ${json_object}= Evaluate json.loads('''${body}''') json + Update existing subscription ${NOT_EXISTING_SUB_ID} ${body} + Log ${NOT_EXISTING_SUB_ID} + Check HTTP Response Status Code Is 404 + +##DELETE on ${apiRoot}/${apiName}/${apiVersion}/subscriptions/{subscriptionId} +TP_MEC_MEC030_SRV_V2X_010_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 + ... 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 + [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 + ... 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 + [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 + ... 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 + [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 + ... 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_V2X_MSG_ID} + Check HTTP Response Status Code Is 204 + + +TP_MEC_MEC030_SRV_V2X_010_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 + ... 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 ${NOT_EXISTING_SUB_ID} + Check HTTP Response Status Code Is 404 + + +*** Keywords *** +Retrieve configured provisioning information over Uu unicast using ecgi filter + [Arguments] ${value} + 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}"} + 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} + + +Retrieve configured provisioning information over Uu unicast using geographical filter + [Arguments] ${latitude_value} ${longitude_value} + 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}"} + Set Headers {"Content-Length":"0"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/uu_unicast_provisioning_info?location_info=latitude,${latitude_value},longitude,${longitude_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + Retrieve configured provisioning information over Uu unicast using geographical filter wrong parameter + [Arguments] ${latitude_value} ${longitude_value} + 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}"} + Set Headers {"Content-Length":"0"} + #wrong parameter lattitude instead of latitude + GET ${apiRoot}/${apiName}/${apiVersion}/queries/uu_unicast_provisioning_info?location_info=lattitude,${latitude_value},longitude,${longitude_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retrieve configured provisioning information over Uu MBM using ecgi filter + [Arguments] ${value} + 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}"} + Set Headers {"Content-Length":"0"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/uu_mbms_provisioning_info?location_info=ecgi,${value} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve configured provisioning information over Uu MBM using geographical filter + [Arguments] ${latitude_value} ${longitude_value} + 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}"} + Set Headers {"Content-Length":"0"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/uu_mbms_provisioning_info?location_info=latitude,${latitude_value},longitude,${longitude_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + Retrieve configured provisioning information over Uu MBM using geographical filter wrong parameter + [Arguments] ${latitude_value} ${longitude_value} + 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}"} + Set Headers {"Content-Length":"0"} + #wrong parameter: lattitude instead of latitude + GET ${apiRoot}/${apiName}/${apiVersion}/queries/uu_mbms_provisioning_info?location_info=lattitude,${latitude_value},longitude,${longitude_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retrieve configured provisioning information over PC5 using ecgi filter + [Arguments] ${value} + 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}"} + Set Headers {"Content-Length":"0"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/pc5_provisioning_info?location_info=ecgi,${value} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve configured provisioning information over PC5 using geographical filter + [Arguments] ${latitude_value} ${longitude_value} + 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}"} + Set Headers {"Content-Length":"0"} + GET ${apiRoot}/${apiName}/${apiVersion}/queries/pc5_provisioning_info?location_info=latitude,${latitude_value},longitude,${longitude_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + Retrieve configured provisioning information over PC5 using geographical filter wrong parameter + [Arguments] ${latitude_value} ${longitude_value} + 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}"} + Set Headers {"Content-Length":"0"} + #wrong parameter: lattitude instead of latitude + GET ${apiRoot}/${apiName}/${apiVersion}/queries/pc5_provisioning_info?location_info=lattitude,${latitude_value},longitude,${longitude_value} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Request predicted QoS + [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} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/provide_predicted_qos ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + + +Publish V2X message + [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} + ${body} Get File ${path} + Post ${apiRoot}/${apiName}/${apiVersion}/publish_v2x_message ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + + +Retrieve subscription list information + [Arguments] ${subscription_type} + Should Be True ${PIC_MEC_SYSTEM} == 1 + Should Be True ${PIC_SERVICES} == 1 + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?subscription_type=${subscription_type} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Send a request for creating a subscription + [Arguments] ${body} + Log Creating a new subscription + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Retrieve a subscription + [Arguments] ${subscriptionId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Update existing subscription + [Arguments] ${subscriptionId} ${body} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"application/json"} + Set Headers {"Authorization":"${TOKEN}"} + PUT ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} ${body} + ${output}= Output response + Set Suite Variable ${response} ${output} + +Remove existing subscription + [Arguments] ${subscriptionId} + Set Headers {"Accept":"application/json"} + Set Headers {"Content-Type":"*/*"} + Set Headers {"Authorization":"${TOKEN}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + ${output}= Output response + Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEC030/SRV/V2X/environment/variables.txt b/MEC030/SRV/V2X/environment/variables.txt new file mode 100644 index 0000000000000000000000000000000000000000..198cebbdff7d5b1fe505173b11dcded159e64c7f --- /dev/null +++ b/MEC030/SRV/V2X/environment/variables.txt @@ -0,0 +1,40 @@ +*** Variables *** +# Generic variables +${SCHEMA} http +${HOST} 127.0.0.1 +${PORT} 8082 +${response} {} +${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l +${apiRoot} +${apiName} vis +${apiVersion} v1 + +# Specific variables +${LOCATION_INFO_QUERY_PARAM} location_info +${ECGI} 1357924680 +${UNKNOWN_ECGI} 1357924689 + +${LAT_VALUE} 43.7228 +${LON_VALUE} 10.4017 +${UNKNOWN_LAT_VALUE} 10.10 + +${SUB_TYPE_PROV_CHG_UU_UNI} prov_chg_uu_uni +${SUB_TYPE_PROV_CHG_UU_MBMS} prov_chg_uu_mbms +${SUB_TYPE_PROV_CHG_PC5} prov_chg_uu_pc5 +${SUB_TYPE_V2X_MSG} v2x_msg +${SUB_TYPE_INVALID} INVALID_SUB_TYPE + +${SUB_TYPE_RESP_PROV_CHG_UU_UNI} ProvChgUuUniSubscription +${SUB_TYPE_RESP_PROV_CHG_UU_MBMS} ProvChgUuMbmsSubscription +${SUB_TYPE_RESP_PROV_CHG_PC5} ProvChgPc5Subscription +${SUB_TYPE_RESP_V2X_MSG} V2xMsgSubscription + +${SUB_PROV_CHG_UU_UNI_ID} 1 +${SUB_PROV_CHG_UU_MBMS_ID} 2 +${SUB_PROV_CHG_PC5_ID} 3 +${SUB_V2X_MSG_ID} 4 +${SUB_WRONG_PARAM} WRONG_PARAM +${NOT_EXISTING_SUB_ID} NOT_EXISTING_SUB_ID + +${CALLBACK_URL} http://callback.uri/1 + diff --git a/MEC030/SRV/V2X/jsons/PredictedQoS.json b/MEC030/SRV/V2X/jsons/PredictedQoS.json new file mode 100644 index 0000000000000000000000000000000000000000..e0ff6813a6d16f261c8319166a0bc7084039d9cd --- /dev/null +++ b/MEC030/SRV/V2X/jsons/PredictedQoS.json @@ -0,0 +1,41 @@ +{ + "locationGranularity": "10", + "routes": [{ + "routeinfo": [ + { + "location": { + "geoArea": { + "latitude": 43.7228, + "longitude": 10.4017 + }, + "ecgi": { + "plmn": { + "mcc": "135", + "mnc": "792" + }, + "cellId": { + "cellId": "4680" + } + } + } + }, + { + "location": { + "geoArea": { + "latitude": 43.73, + "longitude": 10.41 + }, + "ecgi": { + "plmn": { + "mcc": "135", + "mnc": "792" + }, + "cellId": { + "cellId": "4685" + } + } + } + } + ] + }] +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/PredictedQoS_BR.json b/MEC030/SRV/V2X/jsons/PredictedQoS_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..1ddbf46a8e611f12eb7effde6f1592b0a3a07996 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/PredictedQoS_BR.json @@ -0,0 +1,41 @@ +{ + "localityGranularity": "10", + "routes": [{ + "routeinfo": [ + { + "location": { + "geoArea": { + "latitude": 43.7228, + "longitude": 10.4017 + }, + "ecgi": { + "plmn": { + "mcc": "135", + "mnc": "792" + }, + "cellId": { + "cellId": "4680" + } + } + } + }, + { + "location": { + "geoArea": { + "latitude": 43.73, + "longitude": 10.41 + }, + "ecgi": { + "plmn": { + "mcc": "135", + "mnc": "792" + }, + "cellId": { + "cellId": "4685" + } + } + } + } + ] + }] +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/PredictedQoS_NF.json b/MEC030/SRV/V2X/jsons/PredictedQoS_NF.json new file mode 100644 index 0000000000000000000000000000000000000000..3086833d1bb6ed996a3145b0d1ae1193a4bc6fd6 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/PredictedQoS_NF.json @@ -0,0 +1,41 @@ +{ + "locationGranularity": "10", + "routes": [{ + "routeinfo": [ + { + "location": { + "geoArea": { + "latitude": 40, + "longitude": 10 + }, + "ecgi": { + "plmn": { + "mcc": "135", + "mnc": "792" + }, + "cellId": { + "cellId": "4680" + } + } + } + }, + { + "location": { + "geoArea": { + "latitude": 43, + "longitude": 11 + }, + "ecgi": { + "plmn": { + "mcc": "135", + "mnc": "792" + }, + "cellId": { + "cellId": "4685" + } + } + } + } + ] + }] +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgPc5Subscription.json b/MEC030/SRV/V2X/jsons/ProvChgPc5Subscription.json new file mode 100644 index 0000000000000000000000000000000000000000..8774d999dad432df6dcfead7c5cfb7c8576f1f33 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgPc5Subscription.json @@ -0,0 +1,22 @@ +{ + "subscriptionType": "ProvChgPc5Subscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "001", + "mnc": "001" + }, + "cellId": { + "cellId": "001" + } + }, + "geoArea": { + "latitude": 42, + "longitude": 10.3 + } + }, + "dstLayer2Id": "1" + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgPc5SubscriptionUpdate.json b/MEC030/SRV/V2X/jsons/ProvChgPc5SubscriptionUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..1795bf704b1bd9bd371b1e439d73ca96443445e6 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgPc5SubscriptionUpdate.json @@ -0,0 +1,27 @@ +{ + "subscriptionType": "ProvChgPc5Subscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "003", + "mnc": "002" + }, + "cellId": { + "cellId": "005" + } + }, + "geoArea": { + "latitude": 42, + "longitude": 10.3 + } + }, + "dstLayer2Id": "1" + }, + "_links": { + "self": { + "href": "https://127.0.0.1/v1/vai/subscriptions/3" + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscription.json b/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..01c737360aa3a4fbd0d89dffc4d413d340234661 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscription.json @@ -0,0 +1,33 @@ +{ + "subscriptionType": "ProvChgUuMbmsSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "001", + "mnc": "001" + }, + "cellId": { + "cellId": "001" + } + }, + "geoArea": { + "latitude": 42.1, + "longitude": 10.3 + } + }, + "v2xServerUsd": { + "tmgi": { + "mbmsServiceId": "serviceId", + "mcc": "002", + "mnc": "002" + }, + "serviceAreaIdentifier": ["id01"], + "sdpInfo": { + "ipMulticastAddress": "10.10.0.255", + "portNumber": "1234" + } + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscriptionUpdate.json b/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscriptionUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..8157fabc3afeb2f82acbfea5533ebf903ea48556 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscriptionUpdate.json @@ -0,0 +1,38 @@ +{ + "subscriptionType": "ProvChgUuMbmsSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "001", + "mnc": "001" + }, + "cellId": { + "cellId": "001" + } + }, + "geoArea": { + "latitude": 43.10, + "longitude": 10.2 + } + }, + "v2xServerUsd": { + "tmgi": { + "mbmsServiceId": "newServiceId", + "mcc": "002", + "mnc": "002" + }, + "serviceAreaIdentifier": ["id01"], + "sdpInfo": { + "ipMulticastAddress": "10.10.0.255", + "portNumber": "1234" + } + } + }, + "_links": { + "self": { + "href": "https://127.0.0.1/v1/vai/subscriptions/1" + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscription_BR.json b/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscription_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..5f6b82490fed2c19c0e97a5f0ab55aa357972787 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgUuMbmsSubscription_BR.json @@ -0,0 +1,33 @@ +{ + "subscriptionType": "InvalidProvChgUuMbmsSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "001", + "mnc": "001" + }, + "cellId": { + "cellId": "001" + } + }, + "geoArea": { + "latitude": -36.093, + "longitude": -68.83 + } + }, + "v2xServerUsd": { + "tmgi": { + "mbmsServiceId": "serviceId", + "mcc": "002", + "mnc": "002" + }, + "serviceAreaIdentifier": ["id01"], + "sdpInfo": { + "ipMulticastAddress": "10.10.0.255", + "portNumber": "1234" + } + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscription.json b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..586a0f04ddba716e01207eac45ff8ad2d5d878bf --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscription.json @@ -0,0 +1,25 @@ +{ + "subscriptionType": "ProvChgUuUniSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "001", + "mnc": "002" + }, + "cellId": { + "cellId": "002" + } + }, + "geoArea": { + "latitude": 42.1, + "longitude": 10.5 + } + }, + "v2xApplicationServer": { + "ipAddress": "10.10.0.32", + "udpPort": "12345" + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate.json b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..40c61b4dddddff58e2f196ff18c238c73c6b7ed0 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate.json @@ -0,0 +1,30 @@ +{ + "subscriptionType": "ProvChgUuUniSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "005", + "mnc": "006" + }, + "cellId": { + "cellId": "007" + } + }, + "geoArea": { + "latitude": 43, + "longitude": 11 + } + }, + "v2xApplicationServer": { + "ipAddress": "10.10.0.33", + "udpPort": "12345" + } + }, + "_links": { + "self": { + "href": "https://127.0.0.1/vis/v1/subscription/1" + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate_BR.json b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..afe63e124ca60602ddec4ab9933dac5453bcf54e --- /dev/null +++ b/MEC030/SRV/V2X/jsons/ProvChgUuUniSubscriptionUpdate_BR.json @@ -0,0 +1,30 @@ +{ + "subscriptionType": "InvalidProvChgUuUniSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "locationInfo": { + "ecgi": { + "plmn": { + "mcc": "005", + "mnc": "006" + }, + "cellId": { + "cellId": "007" + } + }, + "geoArea": { + "latitude": 43, + "longitude": 11 + } + }, + "v2xApplicationServer": { + "ipAddress": "10.10.0.33", + "udpPort": "12345" + } + }, + "_links": { + "self": { + "href": "https://127.0.0.1/vis/v1/subscription/1" + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/V2xMsgPublication.json b/MEC030/SRV/V2X/jsons/V2xMsgPublication.json new file mode 100644 index 0000000000000000000000000000000000000000..f987a51f23b64f208716259052066c9ddaa993c0 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/V2xMsgPublication.json @@ -0,0 +1,6 @@ +{ + "stdOrganization": "ETSI", + "msgType": 2, + "msgEncodeFormat": "base64", + "msgContent": "V2X message content" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/V2xMsgPublication_BR.json b/MEC030/SRV/V2X/jsons/V2xMsgPublication_BR.json new file mode 100644 index 0000000000000000000000000000000000000000..638f90672157cf744477de3ea153519d2230526f --- /dev/null +++ b/MEC030/SRV/V2X/jsons/V2xMsgPublication_BR.json @@ -0,0 +1,6 @@ +{ + "stdOrganization": "UNKNOWN_ORG", + "msgType": 2, + "msgEncodeFormat": "base64", + "msgContent": "V2X message content" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/V2xMsgSubscription.json b/MEC030/SRV/V2X/jsons/V2xMsgSubscription.json new file mode 100644 index 0000000000000000000000000000000000000000..86b60c7f81a3dcab5f8ebf027611c831ecfd24f6 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/V2xMsgSubscription.json @@ -0,0 +1,7 @@ +{ + "subscriptionType": "V2xMsgSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "stdOrganization": "ETSI" + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/jsons/V2xMsgSubscriptionUpdate.json b/MEC030/SRV/V2X/jsons/V2xMsgSubscriptionUpdate.json new file mode 100644 index 0000000000000000000000000000000000000000..3aa9348d6235744eff0666eac184902e19432525 --- /dev/null +++ b/MEC030/SRV/V2X/jsons/V2xMsgSubscriptionUpdate.json @@ -0,0 +1,12 @@ +{ + "subscriptionType": "V2xMsgSubscription", + "callbackReference": "http://callback.uri/1", + "filterCriteria": { + "stdOrganization": "ETSI" + }, + "_links": { + "self": { + "href": "https://127.0.0.1/v1/vai/subscriptions/1" + } + } +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/Pc5ProvisioningInfo.schema.json b/MEC030/SRV/V2X/schemas/Pc5ProvisioningInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..f6d972d890c0a61f2d2d2255d8ab383d841290b4 --- /dev/null +++ b/MEC030/SRV/V2X/schemas/Pc5ProvisioningInfo.schema.json @@ -0,0 +1,221 @@ +{ + "properties": { + "proInfoPc5": { + "type": "array", + "items": { + "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.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "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": [ + "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" + } + }, + "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 PC5.", + "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" + }, + "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" + }, + "siV2xConfig": { + "description": "V2X sidelink communication configuration, as defined in ETSI TS 136 331 [i.11].", + "type": "string" + } + }, + "required": [ + "plmn", + "ecgi", + "siV2xConfig" + ], + "type": "object", + "x-etsi-ref": "6.5.12" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Pc5NeighbourCellInfo" + } + }, + "required": [ + "locationInfo", + "dstLayer2Id" + ] + } + }, + "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": [ + "proInfoPc5" + ], + "type": "object", + "x-etsi-ref": "6.2.4" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/PredictedQoS.schema.json b/MEC030/SRV/V2X/schemas/PredictedQoS.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..045f7e37a3af437ae73a7fd7245b5ea9547bcfad --- /dev/null +++ b/MEC030/SRV/V2X/schemas/PredictedQoS.schema.json @@ -0,0 +1,174 @@ +{ + "description": "predicted QoS of a vehicular UE", + "properties": { + "timeGranularity": { + "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" + }, + "locationGranularity": { + "description": "Granularity of visited location. Measured in meters", + "type": "string" + }, + "routes": { + "type": "array", + "items": { + "properties": { + "routeinfo": { + "description": "Information relating to a specific route. The first structure shall relate to the route origin and the last to the route destination. Intermediate waypoint locations may also be provided. ", + "type": "array", + "minItems": 2, + "items": { + "required": [ + "location" + ], + "properties": { + "location": { + "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" + } + }, + "type": "object", + "x-etsi-notes": "NOTE:\tEither ecgi or geoArea shall be present, but not both.", + "x-etsi-ref": "6.5.3" + }, + "time": { + "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" + }, + "rsrp": { + "description": "Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response", + "type": "integer", + "format": "Uint8" + }, + "rsrq": { + "description": "Reference Signal Received Quality as defined in ETSI TS 136 214 [i.13]. Shall only be included in the response", + "type": "integer", + "format": "Uint8" + } + } + } + } + }, + "required": [ + "routeinfo" + ] + } + } + }, + "required": [ + "locationGranularity", + "routes" + ], + "type": "object", + "x-etsi-mec-cardinality": "0..1" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/ProvChgPc5Subscription.schema.json b/MEC030/SRV/V2X/schemas/ProvChgPc5Subscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..73d48dfaafcdf83abd03e3d2b15a0299c1222551 --- /dev/null +++ b/MEC030/SRV/V2X/schemas/ProvChgPc5Subscription.schema.json @@ -0,0 +1,259 @@ +{ + "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": { + "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].", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "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": [ + "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" + } + }, + "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 PC5.", + "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" + }, + "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" + }, + "siV2xConfig": { + "description": "V2X sidelink communication configuration, as defined in ETSI TS 136 331 [i.11].", + "type": "string" + } + }, + "required": [ + "plmn", + "ecgi", + "siV2xConfig" + ], + "type": "object", + "x-etsi-ref": "6.5.12" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Pc5NeighbourCellInfo" + } + }, + "required": [ + "locationInfo", + "dstLayer2Id" + ], + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \"ProvChgPc5Subscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "filterCriteria" + ], + "type": "object", + "x-etsi-ref": "6.3.4" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/ProvChgUuMbmsSubscription.schema.json b/MEC030/SRV/V2X/schemas/ProvChgUuMbmsSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..262c1e29e113716356b31756c1cc4bf23c674c62 --- /dev/null +++ b/MEC030/SRV/V2X/schemas/ProvChgUuMbmsSubscription.schema.json @@ -0,0 +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" + } + } + } + }, + "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": [ + "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" + } + }, + "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": { + "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" + }, + "pci": { + "description": "Physical Cell Identifier.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "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" + }, + "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": [ + "plmn", + "ecgi", + "pci", + "fddInfo", + "tddInfo", + "mbmsServiceAreaIdentity" + ], + "type": "object", + "x-etsi-ref": "6.5.11" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UuMbmsNeighbourCellInfo" + }, + "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 diff --git a/MEC030/SRV/V2X/schemas/ProvChgUuUniSubscription.schema.json b/MEC030/SRV/V2X/schemas/ProvChgUuUniSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..82c2490526f18eed4f3b375c7306bc5888934d0e --- /dev/null +++ b/MEC030/SRV/V2X/schemas/ProvChgUuUniSubscription.schema.json @@ -0,0 +1,422 @@ +{ + "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": [ + "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" + } + }, + "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 unicast.", + "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" + }, + "pci": { + "description": "Physical Cell Identifier.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "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" + }, + "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": [ + "plmn", + "ecgi", + "pci", + "fddInfo", + "tddInfo" + ], + "type": "object", + "x-etsi-ref": "6.5.9" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UuUniNeighbourCellInfo" + }, + "v2xApplicationServer": { + "properties": { + "ipAddress": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "udpPort": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "ipAddress", + "udpPort" + ], + "type": "object", + "x-etsi-ref": "6.5.8" + } + }, + "required": [ + "locationInfo", + "v2xApplicationServer" + ], + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \"ProvChgUuUniSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "filterCriteria" + ], + "type": "object", + "x-etsi-ref": "6.3.2" + } \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/SubscriptionLinkList.schema.json b/MEC030/SRV/V2X/schemas/SubscriptionLinkList.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..c2892e10c7ab9eb64ae52c9d93d26e525a137ab7 --- /dev/null +++ b/MEC030/SRV/V2X/schemas/SubscriptionLinkList.schema.json @@ -0,0 +1,59 @@ +{ + "properties": { + "_links": { + "description": "List of hyperlinks related to the resource.", + "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" + } + } + }, + "subscriptions": { + "type": "array", + "items": { + "description": "The service consumer’s subscriptions.", + "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 values are as defined in the \\\"subscriptionType\\\" attribute for each different V2X information event subscription data type.", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "href", + "subscriptionType" + ], + "x-etsi-mec-cardinality": "0..N" + } + } + }, + "type": "object", + "required": [ + "self" + ], + "x-etsi-mec-cardinality": "1" + } + }, + "required": [ + "_links" + ], + "type": "object", + "x-etsi-ref": "6.3.6" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/UuMbmsProvisioningInfo.schema.json b/MEC030/SRV/V2X/schemas/UuMbmsProvisioningInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..49aa131e2235c804ff6fbf8bcd93d8290c6bb146 --- /dev/null +++ b/MEC030/SRV/V2X/schemas/UuMbmsProvisioningInfo.schema.json @@ -0,0 +1,444 @@ +{ + "properties": { + "proInfoUuMbms": { + "description": "The provisioning information per location as defined below.", + "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": [ + "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" + } + }, + "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.", + "type": "array", + "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" + }, + "pci": { + "description": "Physical Cell Identifier.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "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" + }, + "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": [ + "plmn", + "ecgi", + "pci", + "fddInfo", + "tddInfo", + "mbmsServiceAreaIdentity" + ], + "type": "object", + "x-etsi-ref": "6.5.11" + }, + "minItems": 0, + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UuMbmsNeighbourCellInfo" + }, + "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" + ] + }, + "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": [ + "proInfoUuMbms" + ], + "type": "object", + "x-etsi-ref": "6.2.3" + } \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/UuUnicastProvisioningInfo.schema.json b/MEC030/SRV/V2X/schemas/UuUnicastProvisioningInfo.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..1cde221b6c421d094bbb1bf9232dfc0e0a170768 --- /dev/null +++ b/MEC030/SRV/V2X/schemas/UuUnicastProvisioningInfo.schema.json @@ -0,0 +1,385 @@ +{ + "properties": { + "proInfoUuUnicast": { + "type": "array", + "items": { + "description": "The provisioning information per location as defined below.", + "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": [ + "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" + } + }, + "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 unicast.", + "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" + }, + "pci": { + "description": "Physical Cell Identifier.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "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" + }, + "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": [ + "plmn", + "ecgi", + "pci", + "fddInfo", + "tddInfo" + ], + "type": "object", + "x-etsi-ref": "6.5.9" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UuUniNeighbourCellInfo" + }, + "v2xApplicationServer": { + "properties": { + "ipAddress": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "udpPort": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "ipAddress", + "udpPort" + ], + "type": "object", + "x-etsi-ref": "6.5.8" + } + }, + "required": [ + "locationInfo", + "v2xApplicationServer" + ], + "x-etsi-mec-cardinality": "1..N" + } + }, + "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": [ + "proInfoUuUnicast" + ], + "type": "object", + "x-etsi-ref": "6.2.2" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/V2xMsgSubscription.schema.json b/MEC030/SRV/V2X/schemas/V2xMsgSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..5cba0d7d992210c9a5747f4297734db3084f31bf --- /dev/null +++ b/MEC030/SRV/V2X/schemas/V2xMsgSubscription.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": { + "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 V2X message. 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": { + "msgType": { + "description": "Subscribed V2X message type. Its value is defined by the standardization organization indicated by the attribute stdOrganization. See note 2.", + "items": { + "type": "string" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "Enum" + }, + "stdOrganization": { + "description": "Standardization organization which defines the subscribed V2X message type: \nETSI: European Telecommunications Standards Institute. \nSee note 1.", + "enum": [ + "ETSI" + ], + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Enum" + } + }, + "required": [ + "stdOrganization" + ], + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \"V2xMsgSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "filterCriteria" + ], + "type": "object", + "x-etsi-notes": "NOTE 1:\tOther standardization organizations could be added as needed.\nNOTE 2:\tThe V2X message types of ETSI shall be used as specified in ETSI TS 102 894-2 [6], clause A.114.", + "x-etsi-ref": "6.3.5" +} \ No newline at end of file diff --git a/MEC030/SRV/V2X/schemas/vProvChgUuUniSubscription.schema.json b/MEC030/SRV/V2X/schemas/vProvChgUuUniSubscription.schema.json new file mode 100644 index 0000000000000000000000000000000000000000..82c2490526f18eed4f3b375c7306bc5888934d0e --- /dev/null +++ b/MEC030/SRV/V2X/schemas/vProvChgUuUniSubscription.schema.json @@ -0,0 +1,422 @@ +{ + "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": [ + "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" + } + }, + "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 unicast.", + "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" + }, + "pci": { + "description": "Physical Cell Identifier.", + "type": "integer", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "Integer" + }, + "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" + }, + "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": [ + "plmn", + "ecgi", + "pci", + "fddInfo", + "tddInfo" + ], + "type": "object", + "x-etsi-ref": "6.5.9" + }, + "minItems": 0, + "type": "array", + "x-etsi-mec-cardinality": "0..N", + "x-etsi-mec-origin-type": "UuUniNeighbourCellInfo" + }, + "v2xApplicationServer": { + "properties": { + "ipAddress": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + }, + "udpPort": { + "description": "", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "ipAddress", + "udpPort" + ], + "type": "object", + "x-etsi-ref": "6.5.8" + } + }, + "required": [ + "locationInfo", + "v2xApplicationServer" + ], + "type": "object", + "x-etsi-mec-cardinality": "1" + }, + "subscriptionType": { + "description": "Shall be set to \"ProvChgUuUniSubscription\".", + "type": "string", + "x-etsi-mec-cardinality": "1", + "x-etsi-mec-origin-type": "String" + } + }, + "required": [ + "subscriptionType", + "callbackReference", + "filterCriteria" + ], + "type": "object", + "x-etsi-ref": "6.3.2" + } \ No newline at end of file diff --git a/MEO/GRANT/Grant.robot b/MEO/GRANT/Grant.robot deleted file mode 100644 index 735841fdf8edc756ac67207f1e7d62bb1409f5c9..0000000000000000000000000000000000000000 --- a/MEO/GRANT/Grant.robot +++ /dev/null @@ -1,109 +0,0 @@ -''[Documentation] robot --outputdir ./outputs ./SRV/UETAG/PlatUeIdentity.robot -... Test Suite to validate UE Identity Tag (UETAG) operations. - -*** Settings *** -Resource environment/variables.txt -Resource ../../GenericKeywords.robot -Library REST ${MEO_SCHEMA}://${MEO_HOST}:${MEO_PORT} ssl_verify=false -Library OperatingSystem - - - - -*** Test Cases *** -Request a new Grant - Synchronous mode - [Documentation] TP_MEC_MEO_GRANT_001_OK - ... Check that MEO sends a synchronous grant response when a grant request is requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.1 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.4.2.2-1 (GrantRequest) - ... ETSI GS MEC 010-2 2.0.10, 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 - Check HTTP Response Header Contains Location - Check HTTP Response Body Json Schema Is Grant - - - -Request a new Grant - Malformed request - [Documentation] TP_MEC_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.0.10, clause 7.6.1.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.4.4.2-1 (Grant) - [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Create a GRANT request grantRejectedRequest - Check HTTP Response Status Code Is 400 - - - -Request a new Grant - Asynchronous mode - [Documentation] TP_MEC_MEO_GRANT_002_OK - ... Check that MEO sends a asynchronous grant response when a grant request is requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.1 - ... ETSI GS MEC 010-2 2.0.10, 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 202 - Check HTTP Response Header Contains Location - Check HTTP Response Body is Empty - - -Request an individual grant - Ongoing process - [Documentation] TP_MEC_MEO_GRANT_003_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.0.10, clause 7.6.1.3.2 - [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual grant ${grantId} - Check HTTP Response Status Code Is 202 - Check HTTP Response Header Contains Location - Check HTTP Response Body is Empty - - - -Request an individual grant using non existant grant identifier - [Documentation] TP_MEC_MEO_GRANT_003_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.0.10, clause 7.6.1.3.2 - [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual grant ${non_existant_grant_id} - Check HTTP Response Status Code Is 404 - - - -Request an individual grant - Successful - [Documentation] TP_MEC_MEO_GRANT_004_OK - ... Check that MEO sends the status of a grant request when a query on a granting ID is performed - ... ETSI GS MEC 010-2 2.0.10, clause 7.6.1.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.4.4.2-1 - [Tags] PIC_GRANTS_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual grant ${grantId} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is Grant - - - -*** Keywords *** -Create a GRANT request - [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}/grants ${body} allow_redirects=false - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Get an individual grant - [Arguments] ${grantId} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/grants/${grantId} allow_redirects=false - ${output}= Output response - Set Suite Variable ${response} ${output} - - - \ No newline at end of file diff --git a/MEO/GRANT/jsons/grantRejectedRequest.json b/MEO/GRANT/jsons/grantRejectedRequest.json deleted file mode 100644 index 9e26dfeeb6e641a33dae4961196235bdb965b21b..0000000000000000000000000000000000000000 --- a/MEO/GRANT/jsons/grantRejectedRequest.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/MEO/GRANT/schemas/Grant.json b/MEO/GRANT/schemas/Grant.json deleted file mode 100644 index 9e26dfeeb6e641a33dae4961196235bdb965b21b..0000000000000000000000000000000000000000 --- a/MEO/GRANT/schemas/Grant.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/MEO/PKGM/PackageManagement.robot b/MEO/PKGM/PackageManagement.robot deleted file mode 100644 index f8a767af7fa8b40babc0b380697d1ecf46790523..0000000000000000000000000000000000000000 --- a/MEO/PKGM/PackageManagement.robot +++ /dev/null @@ -1,374 +0,0 @@ -''[Documentation] robot --outputdir ./outputs ./SRV/UETAG/PlatUeIdentity.robot -... Test Suite to validate UE Identity Tag (UETAG) operations. - -*** Settings *** -Resource environment/variables.txt -Resource ../../GenericKeywords.robot -Library REST ${MEO_SCHEMA}://${MEO_HOST}:${MEO_PORT} ssl_verify=false -Library BuiltIn -Library OperatingSystem -Library MockServerLibrary - - -*** Test Cases *** -Create new App Package Resource - [Documentation] TP_MEC_MEO_PKGM_001_OK - ... Check that MEO creates a new App Package when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.1 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.2.2-1 (AppPkg) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Post Request to create new App Package Resource AppPkg - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is OnboardedAppPkgInfos - Check HTTP Response Header Contains Location - Check Result Contains ${response} appName ${APP_PKG_NAME} - Check Result Contains ${response} appDVersion ${APP_PKG_VERSION} - Check Result Contains ${response} checksum ${CHECKSUM} - Check Result Contains ${response} operationalState ${OPERATIONAL_STATE} - Check Result Contains ${response} usageState ${USAGE_STATE} - - -Create new App Package Resource using malformed request - [Documentation] TP_MEC_MEO_PKGM_001_BR - ... Check that MEO creates a new App Package when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.1 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.2.2-1 (AppPkg) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Post Request to create new App Package Resource MalformedAppPkg - Check HTTP Response Status Code Is 400 - - -Request all APP Packages - [Documentation] TP_MEC_MEO_PKGM_002_OK - ... Check that MEO returns the list of App Packages when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - GET all APP Packages - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is OnboardedAppPkgInfos - Check Result Contains ${response} appPkgId ${ON_BOARDED_APP_PKG_ID} - Check Result Contains ${response} appDId ${APPD_ID} - - -Request all APP Packages using bad attribute-based filtering parameter - [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.0.10, 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 - - -Request an individual APP Package - [Documentation] TP_MEC_MEO_PKGM_003_OK - ... Check that MEO returns the list of App Packages when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - 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 OnboardedAppPkgInfo - Check Result Contains ${response} appPkgId ${ON_BOARDED_APP_PKG_ID} - Check Result Contains ${response} appDId ${APPD_ID} - - -Request an individual APP Package using wrong identifier - [Documentation] TP_MEC_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.0.10, clause 7.3.1.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) - [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 - - -Remove an individual APP Package - [Documentation] TP_MEC_MEO_PKGM_004_OK - ... Check that MEO deletes an App Package when requested - ... ETSI GS MEC 010-2 2.0.10, 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} - Check HTTP Response Status Code Is 204 - Check HTTP Response Body is Empty - - -Remove an individual APP Package using wrong identifier - [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.0.10, clause 7.3.2.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete an individual APP Package identified by ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - -Request a Operational state update on an APP Package - [Documentation] TP_MEC_MEO_PKGM_005_OK - ... Check that MEO changes the status of an App Package from INITIAL_OP_STATE with an operation of type OPERATION_VALUE when requested, with the following possible combinations: - ... - ENABLED, DISABLE - ... - DISABLED, ENABLE - ... - DELETION_PENDING, ABORT - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.2.3.3 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Update Operational State for an APP Package ${ON_BOARDED_APP_PKG_ID} ${OPERATION_VALUE} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body is Empty - - -Request a Operational state update on an APP Package using wrong operation value - [Documentation] TP_MEC_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.0.10, clause 7.3.2.3.3 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Update Operational State for an APP Package ${ON_BOARDED_APP_PKG_ID} WRONG_OP_VALUE - Check HTTP Response Status Code Is 400 - - -Request a Operational state update on a non onboarded APP Package - [Documentation] TP_MEC_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.0.10, clause 7.3.2.3.3 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Update Operational State for an APP Package ${NON_EXISTENT_APP_PKG_ID} ${OPERATION_VALUE} - Check HTTP Response Status Code Is 404 - - -Request the App Descriptor of an App Package - [Documentation] TP_MEC_MEO_PKGM_006_OK - ... Check that MEO returns the Application Descriptor contained on a on-boarded Application Package when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.6.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an AppD from App Package identified by ${ON_BOARDED_APP_PKG_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Contain Header with value Content-Type ${ACCEPTED_CONTENT_TYPE} - - -Request the App Descriptor of an App Package using a non onboarded APP Package - [Documentation] TP_MEC_MEO_PKGM_006_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.0.10, clause 7.3.6.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an AppD from App Package identified by ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - -Create a new App Packages Subscription - [Documentation] TP_MEC_MEO_PKGM_007_OK - ... Check that MEO service sends a Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.1 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.7.2-1 (AppPkgSubscription) - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.4.2-1 (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 - Check Result Contains ${response} subscriptionType ON_BOARDING - Check Result Contains ${response} callbackUri ${CALLBACK_URI} - - -Create a new App Packages Subscription with malformed parameter - [Documentation] TP_MEC_MEO_PKGM_007_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.0.10, clause 7.3.3.3.1 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.7.2-1 (AppPkgSubscription) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Send a request for a subscription MalformedAppPkgSubscription - Check HTTP Response Status Code Is 400 - - -Request all App Package subscriptions - [Documentation] TP_MEC_MEO_PKGM_008_OK - ... Check that MEO service returns the list of Application Package Subscriptions when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.3.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.4.2-1 (AppPkgSubscriptionLinkList) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get all APP Package subscriptions - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList - Check Result Contains ${response} subscriptionId ${SUBSCRIPTION_ID} - - -Request a specific App Package subscription - [Documentation] TP_MEC_MEO_PKGM_009_OK - ... Check that MEO service returns an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.4.2-1 (AppPkgSubscriptionInfo) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual APP Package subscriptions ${SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo - Check Result Contains ${response} subscriptionId ${SUBSCRIPTION_ID} - - -Request a specific App Package subscription using non existant subscription identifier - [Documentation] TP_MEC_MEO_PKGM_009_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.0.10, clause 7.3.4.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual APP Package subscriptions ${NON_EXISTENT_SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 404 - - -Remove a APP Package subscription - [Documentation] TP_MEC_MEO_PKGM_010_OK - ... Check that MEO service deletes an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.3.4.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 204 - Check HTTP Response Body is Empty - - -Remove a APP Package subscription using non existant subscription id - [Documentation] TP_MEC_MEO_PKGM_010_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.0.10, clause 7.3.4.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 404 - - -Post Application Package Notification - [Documentation] TP_MEC_MEO_PKGM_011_OK - ... 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 2.0.10, clause 7.3.5.1 - ${json}= Get File schemas/AppPkgNotification.schema.json - Log Creating mock request and response to handle Application Package 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} - - -*** Keywords *** -Post Request to create new App Package Resource - [Arguments] ${content} - Log Creating a new App Package - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Post ${apiRoot}/${apiName}/${apiVersion}/app_packages ${content} allow_redirects=false - ${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":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages - ${output}= Output response - Set Suite Variable ${response} ${output} - - -GET all APP Packages with filters - [Arguments] ${key} ${value} - Log Getting all App Packages using filtering parameters - Set Headers {"Accept":"application/json"} - 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 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${value} - ${output}= Output response - Set Suite Variable ${response} ${output} - - - -Delete an individual APP Package identified by - [Arguments] ${value} - Log Removing an App Package - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/app_packages/${value} - ${output}= Output response - Set Suite Variable ${response} ${output} - - - -Update Operational State for an APP Package - [Arguments] ${appPkgId} ${operation} - Log Updating an App Package - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - PUT ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId}?appPkgOperation=${operation} - ${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":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId}/addDId - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Send a request for a subscription - [Arguments] ${content} - Log Creating a new subscription - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${content} - ${output}= Output response - Set Suite Variable ${response} ${output} - - - -Get all APP Package subscriptions - Log Getting list of subscriptions - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions - ${output}= Output response - Set Suite Variable ${response} ${output} - -Get an individual APP Package subscriptions - [Arguments] ${subId} - Log Getting an individual subscription - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} - ${output}= Output response - Set Suite Variable ${response} ${output} - -Delete an App Package Subscription identified by - [Arguments] ${subId} - Log Deleting a subscription - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} - ${output}= Output response - Set Suite Variable ${response} ${output} - - \ No newline at end of file diff --git a/MEO/PKGM/environment/variables.txt b/MEO/PKGM/environment/variables.txt deleted file mode 100644 index 6fd4c4b62e27888fa12c3c569ad038679a24f433..0000000000000000000000000000000000000000 --- a/MEO/PKGM/environment/variables.txt +++ /dev/null @@ -1,44 +0,0 @@ -*** Variables *** -# Generic variables -${MEO_SCHEMA} http -${MEO_HOST} 10.192.2.172 -${MEO_PORT} 8081 -${response} {} -${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${apiRoot} -${apiName} apmi -${apiVersion} v1 - -# Specific variables -${APP_PKG_NAME} APP_PKG_NAME // Should be the same as in AppPkg.json -${APP_PKG_VERSION} APP_PKG_VERSION // Should be the same as in AppPkg.json -${CHECKSUM} CHECKSUM // Should be the same as in AppPkg.json -${OPERATIONAL_STATE} OPERATIONAL_STATE // Should be the same as in AppPkg.json -${USAGE_STATE} USAGE_STATE // Should be the same as in AppPkg.json -${ON_BOARDED_APP_PKG_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f -${APPD_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${MALFORMED_FILTER_NAME} operationalStatus // Should be operationalState -${FILTER_VALUE} NOT_IN_USE -${NON_EXISTENT_APP_PKG_ID} NON_EXISTENT_APP_PKG_ID -${OPERATION_VALUE} DISABLE - -${ACCEPTED_CONTENT_TYPE} text/plain // Should refer to the type of AppD -${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 - - - - -${SUBSCRIPTION_TYPE} MobilityProcedureSubscription -${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_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 diff --git a/MEO/PKGM/jsons/CreateAppPackage.json b/MEO/PKGM/jsons/CreateAppPackage.json deleted file mode 100644 index 9e26dfeeb6e641a33dae4961196235bdb965b21b..0000000000000000000000000000000000000000 --- a/MEO/PKGM/jsons/CreateAppPackage.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/MEO/PKGM/schemas/OnboardedAppPkgInfo.json b/MEO/PKGM/schemas/OnboardedAppPkgInfo.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEO/PKGM/schemas/OnboardedAppPkgInfos.json b/MEO/PKGM/schemas/OnboardedAppPkgInfos.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEO/UEAPPCTX/SysUeAppsContext.robot b/MEO/UEAPPCTX/SysUeAppsContext.robot deleted file mode 100644 index f0ce3849d6f72986870d730367671f5bbdb050c9..0000000000000000000000000000000000000000 --- a/MEO/UEAPPCTX/SysUeAppsContext.robot +++ /dev/null @@ -1,154 +0,0 @@ -''[Documentation] robot --outputdir ../../outputs ./SysUeAppContext.robot -... Test Suite to validate Bandwidth Management API (APPCTX) operations. - -*** Settings *** -Resource environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot -Resource resources/UeAppsContextAPI.robot -Library String -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false - - -*** Test Cases *** -Creation of the application context - [Documentation] TC_MEC_MEO_UEAPPCTX_001_OK - ... Check that the IUT acknowledges the creation of the application context when requested by an UE Application - ... Reference ETSI GS MEC 016 V1.1.1, clause 7.4.3.4 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext - Create application context ${CREATE_APP_CTX} - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is AppContext - Should Be True ${response['body']['appContext']['appInfo']['appName']} == ${APP_NAME} - # Postamble - Delete an application context ${APP_CTX_ID} - - -Creation of the application context with wrong parameters - [Documentation] TC_MEC_MEO_UEAPPCTX_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 016 V1.1.1, clause 7.4.3.4 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext - Create application context ${CREATE_APP_CTX_BR} - Check HTTP Response Status Code Is 400 - Check ProblemDetails 400 - - -Update of the application context - [Documentation] TC_MEC_MEO_UEAPPCTX_002_OK - ... Check that the IUT updates the application callback reference when commanded by an UE Application - ... Reference ETSI GS MEC 016 V1.1.1, clause 7.5.3.2 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - Create an application context - # Test Body - ${CREATE_APP_CTX}= Set Variable ${CALLBACK_REFERENCE_1} - Update application context ${APP_CTX_ID} ${CREATE_APP_CTX} - Check HTTP Response Status Code Is 204 - Check HTTP Response Body Json Schema Is AppContext - Should Be True ${response['body']['appContext']['callbackReference']} == ${CALLBACK_REFERENCE_1} - # Postamble - Delete an application context ${APP_CTX_ID} - - -Update of the application context with wrong parameters - [Documentation] TC_MEC_MEO_UEAPPCTX_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 016 V1.1.1, clause 7.5.3.2 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - Create an application context - # Test Body - ${CREATE_APP_CTX}= Set Variable '' # Empty string - Update application context ${APP_CTX_ID} ${CREATE_APP_CTX} - Check HTTP Response Status Code Is 400 - Check ProblemDetails 400 - # Postamble - Delete an application context ${APP_CTX_ID} - - -Update of the application context with unknown URI - [Documentation] TC_MEC_MEO_UEAPPCTX_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 016 V1.1.1, clause 7.5.3.2 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - Create an application context - # Test Body - ${CREATE_APP_CTX}= Set Variable ${CALLBACK_REFERENCE_1} - Update application context ${NON_EXISTENT_APP_CTX_ID} ${CREATE_APP_CTX} - Check HTTP Response Status Code Is 404 - Check ProblemDetails 404 - # Postamble - Delete an application context ${APP_CTX_ID} - - -Delete of the application context - [Documentation] TC_MEC_MEO_UEAPPCTX_003_OK - ... Check that the IUT deletes the application context when commanded by an UE Application - ... Reference ETSI GS MEC 016 V1.1.1, clause 7.5.3.5 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - Create an application context - # Test Body - Delete application context ${APP_CTX_ID} - Check HTTP Response Status Code Is 204 - - -Delete of the application context with non esistent APP CTX ID - [Documentation] TC_MEC_MEO_UEAPPCTX_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 016 V1.1.1, clause 7.5.3.5 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/AppContext - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - # AppCtx not created! - # Test Body - Delete application context ${APP_CTX_ID} - Check HTTP Response Status Code Is 404 - Check ProblemDetails 404 - - -*** Keywords *** -Create application context - [Arguments] ${content} - 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}"} - Set Headers {"Content-Length":"0"} - Post /exampleAPI/mx2/v2/app_contexts ${content} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Update application context - [Arguments] ${context_id} ${content} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Put /exampleAPI/mx2/v2/app_contexts/${context_id} ${content} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Delete application context - [Arguments] ${context_id} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Delete /exampleAPI/mx2/v2/app_contexts/${context_id} - ${output}= Output response - Set Suite Variable ${response} ${output} diff --git a/MEO/UEAPPCTX/environment/variables.txt b/MEO/UEAPPCTX/environment/variables.txt deleted file mode 100644 index 16ba3c13388ce28eb83080363f8e21374b8b881b..0000000000000000000000000000000000000000 --- a/MEO/UEAPPCTX/environment/variables.txt +++ /dev/null @@ -1,18 +0,0 @@ -*** Variables *** -${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 -${APP_CTX_ID} appCtx01 -${NON_EXISTENT_APP_CTX_ID} appCtx99 -${UE_APP_ID} ueIdAppCtx01 -${APP_NAME} MyWornderfulApp -${WRONG_CREATE_APP_CTX} UnknownApp -${CALLBACK_REFERENCE} http://www.acme.com/MyWonderfulApp/v1 -${CALLBACK_REFERENCE_1} http://www.acme.com/MyWonderfulApp/v2 -${CREATE_APP_CTX} { "contextId": "${APP_CTX_ID}", "associateUeAppId": "${UE_APP_ID}", "callbackReference": "${CALLBACK_REFERENCE}", "appInfo": { "appName": "${APP_NAME}", "appProvider": "ACME & Co", "appSoftVersion": "1.0.0.1", "appDescription": "This is a wonderful test application", "referenceURL": "http://www.acme.com/MyWonderfulPackage", "appPackageSource": "MyWonderfulPackage" } } -${CREATE_APP_CTX_BR} { "context": "${APP_CTX_ID}", "associateUeAppId": "${UE_APP_ID}", "callbackReference": "${CALLBACK_REFERENCE}", "appInfo": { "appName": "${APP_NAME}", "appProvider": "ACME & Co", "appSoftVersion": "1.0.0.1", "appDescription": "This is a wonderful test application", "referenceURL": "http://www.acme.com/MyWonderfulPackage", "appPackageSource": "MyWonderfulPackage" } } -${SERVICE_CONT_BR} UnknownServiceCont - -${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l diff --git a/MEO/UEAPPCTX/resources/UeAppsContextAPI.robot b/MEO/UEAPPCTX/resources/UeAppsContextAPI.robot deleted file mode 100644 index a8c94d0d451f1ef1b2e78e82668358a91b2e5a8f..0000000000000000000000000000000000000000 --- a/MEO/UEAPPCTX/resources/UeAppsContextAPI.robot +++ /dev/null @@ -1,35 +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 *** -Create an application context - 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}"} - Set Headers {"Content-Length":"0"} - Post /exampleAPI/mx2/v2/app_contexts ${CREATE_APP_CTX} - ${output}= Output response - Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 201 - Check HTTP Response Body Json Schema Is AppContext - Set Suite Variable ${APP_CTX_ID} ${response['body']['contextId'] - Should Not Be Empty ${APP_CTX_ID} - - -Delete an application context - [Arguments] ${context_id} - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Set Headers {"Content-Length":"0"} - Delete /exampleAPI/mx2/v2/app_contexts/${context_id} - ${output}= Output response - Set Suite Variable ${response} ${output} - Check HTTP Response Status Code Is 204 diff --git a/MEO/UEAPPCTX/schemas/UEAppInterfaceAPI.schema.json b/MEO/UEAPPCTX/schemas/UEAppInterfaceAPI.schema.json deleted file mode 100644 index 9f1bc750780a2283b27ccccdf9c685ea7050fcc8..0000000000000000000000000000000000000000 --- a/MEO/UEAPPCTX/schemas/UEAppInterfaceAPI.schema.json +++ /dev/null @@ -1,618 +0,0 @@ -{ - "openapi": "3.0.2", - "info": { - "title": "UE Application Interface API", - "version": "1.1.1", - "description": "The ETSI MEC ISG MEC016 UE Application Interface API described using OpenAPI", - "license": { - "name": "ETSI Forge copyright notice", - "url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt" - }, - "contact": { - "email": "cti_support@etsi.org" - } - }, - "externalDocs": { - "description": "ETSI GS MEC016 UE Application Interface API, V1.1.1", - "url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/016/01.01.01_60/gs_MEC016v010101p.pdf" - }, - "security": [ - { - "OauthSecurity": [ - "all" - ] - } - ], - "servers": [ - { - "url": "http://127.0.0.1:8081/mx2/v1" - }, - { - "url": "https://127.0.0.1:8081/mx2/v1" - } - ], - "tags": [ - { - "name": "appList" - }, - { - "name": "appContext" - } - ], - "paths": { - "/app_list": { - "get": { - "description": "Used to query information about the available MEC applications.", - "operationId": "AppList_GET", - "tags": [ - "appList" - ], - "parameters": [ - { - "$ref": "#/components/parameters/Query.AppName" - }, - { - "$ref": "#/components/parameters/Query.AppProvider" - }, - { - "$ref": "#/components/parameters/Query.AppSoftVersion" - }, - { - "$ref": "#/components/parameters/Query.ServiceCont" - }, - { - "$ref": "#/components/parameters/Query.VendorId" - } - ], - "responses": { - "200": { - "$ref": "#/components/responses/AppList" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/app_contexts": { - "post": { - "description": "The POST method can be used to create a new application context. Upon success, the response contains entity body describing the created application context.", - "operationId": "AppContext_POST", - "tags": [ - "appContext" - ], - "requestBody": { - "$ref": "#/components/requestBodies/AppContext" - }, - "responses": { - "201": { - "$ref": "#/components/responses/AppContext" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - }, - "/app_contexts/{contextId}": { - "parameters": [ - { - "$ref": "#/components/parameters/Path.ContextId" - } - ], - "put": { - "description": "The PUT method is used to update the callback reference of the existing application context. Upon successful operation, the target resource is updated with new callback reference.", - "operationId": "AppContextId_PUT", - "tags": [ - "appContext" - ], - "requestBody": { - "$ref": "#/components/requestBodies/AppContext" - }, - "responses": { - "204": { - "description": "No Content." - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - }, - "delete": { - "description": "The DELETE method is used to delete the resource that represents the existing application context.", - "operationId": "AppContextId_DEL", - "tags": [ - "appContext" - ], - "responses": { - "204": { - "description": "No Content" - }, - "400": { - "$ref": "#/components/responses/Error.400" - }, - "401": { - "$ref": "#/components/responses/Error.401" - }, - "403": { - "$ref": "#/components/responses/Error.403" - }, - "404": { - "$ref": "#/components/responses/Error.404" - } - } - } - } - }, - "components": { - "parameters": { - "Query.AppName": { - "name": "appName", - "in": "query", - "description": "Name to identify the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.AppProvider": { - "name": "appProvider", - "in": "query", - "description": "Provider of the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.AppSoftVersion": { - "name": "appSoftVersion", - "in": "query", - "description": "Software version of the MEC application", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Query.ServiceCont": { - "name": "serviceCont", - "in": "query", - "description": "Required service continuity mode for this application", - "required": false, - "schema": { - "type": "string", - "enum": [ - "SERVICE_CONTINUITY_NOT_REQUIRED", - "SERVICE_CONTINUITY_REQUIRED" - ] - } - }, - "Query.VendorId": { - "name": "vendorId", - "in": "query", - "description": "Vendor identifier", - "required": false, - "schema": { - "type": "array", - "items": { - "type": "string" - } - } - }, - "Path.ContextId": { - "name": "contextId", - "in": "path", - "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", - "required": true, - "schema": { - "type": "string" - } - } - }, - "requestBodies": { - "AppContext": { - "description": "Uniquely identifies the application context in the MEC system. It is assigned by the MEC system and included in the response to an AppContext create.", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppContext" - } - } - }, - "required": true - } - }, - "responses": { - "AppContext": { - "description": "The response body contains the Application Context as it was created by the MEC system", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/AppContext" - } - } - } - }, - "AppList": { - "description": "The response body contains the ApplicationList resource available for the querying UE application", - "content": { - "application/json": { - "schema": { - "$ref": "#/components/schemas/ApplicationList" - } - } - } - }, - "Error.400": { - "description": "Bad Request. It is used to indicate that incorrect parameters were passed to the request.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.401": { - "description": "Unauthorized. It is used when the client did not submit the appropriate credentials.", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - }, - "Error.403": { - "description": "Forbidden. The operation is not allowed given the current status of the resource. ", - "content": { - "application/problem+json": { - "schema": { - "$ref": "#/components/schemas/ProblemDetails" - } - } - } - }, - "Error.404": { - "description": "Not Found. It is 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" - } - }, - "text/plain": { - "schema": { - "$ref": "#/components/schemas/Empty" - } - } - } - } - }, - "securitySchemes": { - "OauthSecurity": { - "type": "oauth2", - "flows": { - "clientCredentials": { - "tokenUrl": "https://oauth.exampleAPI/token", - "scopes": { - "all": "Single oauth2 scope for API" - } - } - } - } - }, - "schemas": { - "Empty": { - "description": "Empty schema" - }, - "ProblemDetails": { - "type": "object", - "properties": { - "type": { - "$ref": "#/components/schemas/Problem.type" - }, - "title": { - "$ref": "#/components/schemas/Problem.title" - }, - "status": { - "$ref": "#/components/schemas/Problem.status" - }, - "detail": { - "$ref": "#/components/schemas/Problem.detail" - }, - "instance": { - "$ref": "#/components/schemas/Problem.instance" - } - } - }, - "Problem.type": { - "type": "string", - "format": "uri", - "description": "A URI reference according to IETF RFC 3986 that identifies the problem type" - }, - "Problem.title": { - "type": "string", - "description": "A short, human-readable summary of the problem type" - }, - "Problem.status": { - "type": "integer", - "format": "uint32", - "description": "The HTTP status code for this occurrence of the problem" - }, - "Problem.detail": { - "type": "string", - "description": "A human-readable explanation specific to this occurrence of the problem" - }, - "Problem.instance": { - "type": "string", - "format": "uri", - "description": "A URI reference that identifies the specific occurrence of the problem" - }, - "ApplicationList": { - "description": "Information on available applications", - "type": "object", - "properties": { - "appInfo": { - "$ref": "#/components/schemas/AppInfo" - }, - "vendorSpecificExt": { - "$ref": "#/components/schemas/VendorSpecificExt" - } - } - }, - "AppContext": { - "description": "Information on application context created by the MEC system", - "type": "object", - "required": [ - "contextId", - "associateUeAppId", - "appInfo" - ], - "properties": { - "contextId": { - "$ref": "#/components/schemas/ContextId" - }, - "associateUeAppId": { - "$ref": "#/components/schemas/AssociateUeAppId" - }, - "callbackReference": { - "$ref": "#/components/schemas/CallbackReference" - }, - "appInfo": { - "$ref": "#/components/schemas/RequiredAppInfo" - } - } - }, - "NotificationEvent": { - "description": "The parameters used in the method \"Receiving notification events\".", - "type": "object", - "required": [ - "referenceURI" - ], - "properties": { - "referenceURI": { - "$ref": "#/components/schemas/ReferenceURL" - } - } - }, - "VendorSpecificExtList": { - "description": "Extension for vendor specific information.", - "type": "array", - "minItems": 0, - "items": { - "$ref": "#/components/schemas/VendorSpecificExt" - } - }, - "VendorSpecificExt": { - "description": "Extension for vendor-specific information", - "required": [ - "vendorId" - ], - "properties": { - "vendorId": { - "$ref": "#/components/schemas/VendorId" - } - } - }, - "ContextId": { - "description": "Uniquely identifies the application context in the MEC system. Assigned by the MEC system and included in the response. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AssociateUeAppId": { - "description": "Uniquely identifies the UE application. Included in the request. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "VendorId": { - "description": "Vendor identifier. The length of the value shall not exceed 32 characters. The rest of the structure of this vendor specific extension is not defined", - "type": "string" - }, - "AppInfo": { - "description": "User applications available for the UE application", - "type": "array", - "items": { - "$ref": "#/components/schemas/AppInfoList" - } - }, - "AppInfoList": { - "type": "object", - "required": [ - "appName", - "appProvider", - "appDescription" - ], - "properties": { - "appName": { - "$ref": "#/components/schemas/AppName" - }, - "appProvider": { - "$ref": "#/components/schemas/AppProvider" - }, - "appSoftVersion": { - "$ref": "#/components/schemas/AppSoftVersion" - }, - "appDescription": { - "$ref": "#/components/schemas/AppDescription" - }, - "appCharcs": { - "$ref": "#/components/schemas/AppCharcs" - } - } - }, - "RequiredAppInfo": { - "description": "Included in the request", - "type": "object", - "required": [ - "appName", - "appProvider", - "referenceURL" - ], - "properties": { - "appName": { - "$ref": "#/components/schemas/AppName" - }, - "appProvider": { - "$ref": "#/components/schemas/AppProvider" - }, - "appSoftVersion": { - "$ref": "#/components/schemas/AppSoftVersion" - }, - "appDescription": { - "$ref": "#/components/schemas/AppDescription" - }, - "referenceURL": { - "$ref": "#/components/schemas/ReferenceURL" - }, - "appPackageSource": { - "$ref": "#/components/schemas/AppPackageSource" - } - } - }, - "AppCharcs": { - "description": "The application characteristics relate to the system resources consumed by the application. UE application can use this information e.g., for estimating the cost of use of the application or for the expected user experience", - "type": "object", - "properties": { - "memory": { - "$ref": "#/components/schemas/Memory" - }, - "storage": { - "$ref": "#/components/schemas/Storage" - }, - "latency": { - "$ref": "#/components/schemas/Latency" - }, - "bandwidth": { - "$ref": "#/components/schemas/Bandwidth" - }, - "serviceCont": { - "$ref": "#/components/schemas/ServiceCont" - } - } - }, - "Memory": { - "description": "The maximum size in Mbytes of the memory resource reserved for the MEC application instance in the MEC system", - "type": "integer", - "format": "uint32" - }, - "Storage": { - "description": "The maximum size in Mbytes of the storage resource expected to be used by the MEC application instance in the MEC system", - "type": "integer", - "format": "uint32" - }, - "Latency": { - "description": "The target round trip time in milliseconds supported by the MEC system for the MEC application instance", - "type": "integer", - "format": "uint32" - }, - "Bandwidth": { - "description": "The required connection bandwidth in kbit/s for the use of the mobile edge application instance", - "type": "integer", - "format": "uint32" - }, - "ServiceCont": { - "description": "Required service continuity mode for this application.", - "type": "string", - "enum": [ - "SERVICE_CONTINUITY_NOT_REQUIRED", - "SERVICE_CONTINUITY_REQUIRED" - ] - }, - "AppName": { - "description": "Name of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppProvider": { - "description": "Provider of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppSoftVersion": { - "description": "Software version of the MEC application. The length of the value shall not exceed 32 characters.", - "type": "string" - }, - "AppDescription": { - "description": "Human readable description of the MEC application. NOTE the language support may be limited. The length of the value shall not exceed 128 characters.", - "type": "string" - }, - "CallbackReference": { - "description": "URI assigned by the UE application to receive application lifecycle related notifications. Included in the request. This subscription stays alive for the lifetime of the application context.", - "type": "string", - "format": "uri" - }, - "ReferenceURL": { - "description": "Address of the user application. Used as the reference URL for the application. Assigned by the MEC system and included in the response", - "type": "string", - "format": "uri" - }, - "AppPackageSource": { - "description": "URI of the application package. Included in the request if the application is not one in the ApplicationList. appPackageSource enables on-boarding of the application package into the MEC system. The application package shall comply with the definitions in clause 6.2.1.2 of ETSI GS MEC 010-2", - "type": "string", - "format": "uri" - } - } - } -} diff --git a/MEO/UEAPPS/SysUeApplications.robot b/MEO/UEAPPS/SysUeApplications.robot deleted file mode 100644 index f8d589f11ce30ad2fe3e3547c2fc9bc74d14ce1f..0000000000000000000000000000000000000000 --- a/MEO/UEAPPS/SysUeApplications.robot +++ /dev/null @@ -1,88 +0,0 @@ -''[Documentation] robot --outputdir ../../outputs ./SysUeApplications.robot -... Test Suite to validate Bandwidth Management API (APPCTX) operations. - -*** Settings *** -Resource ../UEAPPCTX/environment/variables.txt -Resource ../../pics.txt -Resource ../../GenericKeywords.robot -Resource ../UEAPPCTX/resources/UeAppsContextAPI.robot -Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false - - - -*** Test Cases *** -Get the list of the application contexts - [Documentation] TC_MEC_MEO_UEAPPS_001_OK - ... Check that the IUT responds with the list of user applications available when requested by an UE Application - ... Reference ETSI GS MEC 016 V1.1.1, clause 7.3.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - Create an application context - # Test Body - Retrieve the application contexts list ${APP_NAME} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppInfo - Should Be True ${response['body']['appInfo']['appInfo'][0]['appName']} == ${APP_NAME} - # Postamble - Delete an application context ${APP_CTX_ID} - - -Get the list of the application contexts with wrong parameter - [Documentation] TC_MEC_MEO_UEAPPS_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 016 V1.1.1, clause 7.3.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - Create an application context - # Test Body - Retrieve the application contexts list with serviceCont ${SERVICE_CONT_BR} - Check HTTP Response Status Code Is 400 - Check ProblemDetails 400 - # Postamble - Delete an application context ${APP_CTX_ID} - - -Get the list of the application contexts with non esistent parameter - [Documentation] TC_MEC_MEO_UEAPPS_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 016 V1.1.1, clause 7.3.3.1 - ... Reference https://forge.etsi.org/gitlab/mec/gs016-ue-app-api/blob/master/UEAppInterfaceApi.yaml#/definitions/ApplicationList - # Preamble - Should Be True ${PIC_MEC_SYSTEM} == 1 - Should Be True ${PIC_SERVICES} == 1 - # AppInfo not created - # Test Body - Retrieve the application contexts list ${APP_NAME} - Check HTTP Response Status Code Is 404 - Check ProblemDetails 404 - - -*** Keywords *** -Retrieve the application contexts list - [Arguments] ${app_name} - 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}"} - Set Headers {"Content-Length":"0"} - Post /exampleAPI/mx2/v2/app_list?appName=${app_name} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Retrieve the application contexts list with serviceCont - [Arguments] ${service_cont} - 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}"} - Set Headers {"Content-Length":"0"} - Post /exampleAPI/mx2/v2/app_list?serviceCont=${service_cont} - ${output}= Output response - Set Suite Variable ${response} ${output} diff --git a/MEPM/PKGM/PackageManagement.robot b/MEPM/PKGM/PackageManagement.robot deleted file mode 100644 index 526b5eab6894ea685917f809dc6cf045bbf04bed..0000000000000000000000000000000000000000 --- a/MEPM/PKGM/PackageManagement.robot +++ /dev/null @@ -1,289 +0,0 @@ -''[Documentation] robot --outputdir ./outputs ./SRV/UETAG/PlatUeIdentity.robot -... Test Suite to validate UE Identity Tag (UETAG) 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 - - -*** Test Cases *** -Request all APP Packages - [Documentation] TP_MEC_MEPM_PKGM_001_OK - ... Check that MEPM returns the list of App Packages when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.1.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - GET all APP Packages - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is OnboardedAppPkgInfos - Check Result Contains ${response} appPkgId ${ON_BOARDED_APP_PKG_ID} - Check Result Contains ${response} appDId ${APPD_ID} - - -Request all APP Packages using bad attribute-based filtering parameter - [Documentation] TP_MEC_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.0.10, 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 - - -Request an individual APP Package - [Documentation] TP_MEC_MEPM_PKGM_002_OK - ... Check that MEPM returns the an App Package when requested - ... EETSI GS MEC 010-2 2.0.10, clause 7.4.2.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.3.2-1 (OnboardedAppPkgInfo) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - 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 OnboardedAppPkgInfo - Check Result Contains ${response} appPkgId ${ON_BOARDED_APP_PKG_ID} - Check Result Contains ${response} appDId ${APPD_ID} - - - Request an individual APP Package using wrong identifier - [Documentation] TP_MEC_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.0.10, clause 7.4.2.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 - - - - Request the App Descriptor of an App Package - [Documentation] TP_MEC_MEPM_PKGM_003_OK - ... Check that MEPM returns the Application Descriptor contained on a on-boarded Application Package when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an AppD from App Package identified by ${ON_BOARDED_APP_PKG_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Contain Header with value Content-Type ${ACCEPTED_CONTENT_TYPE} - ##TODO: How to check content returned? - - -Request the App Descriptor of an App Package using a non onboarded APP Package - [Documentation] TP_MEC_MEPM_PKGM_003_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.0.10, clause 7.4.4.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an AppD from App Package identified by ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - - Request the Content of an onboarded App Package - [Documentation] TP_MEC_MEPM_PKGM_004_OK - ... Check that MEPM returns the content on a on-boarded Application Package when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.3.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get the Content from an App Package identified by ${ON_BOARDED_APP_PKG_ID} - Check HTTP Response Status Code Is 200 - ##TODO: How to check content returned? - -Request the Content of an App Package using a non onboarded APP Package identifier - [Documentation] TP_MEC_MEPM_PKGM_004_NF - ... Check that MEPM responds with an error when it receives - ... a request for returning a application package content referred with a wrong App Package ID - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.4.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get the Content from an App Package identified by ${NON_EXISTENT_APP_PKG_ID} - Check HTTP Response Status Code Is 404 - - -Create a new App Packages Subscription - [Documentation] TP_MEC_MEPM_PKGM_005_OK - ... Check that MEPM service returns an application package subscription when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.1 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.7.2-1 (AppPkgSubscription) - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.4.2-1 (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 - Check Result Contains ${response} subscriptionType ON_BOARDING - Check Result Contains ${response} callbackUri ${CALLBACK_URI} - - - -Create a new App Packages Subscription with malformed parameter - [Documentation] TP_MEC_MEPM_PKGM_005_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.0.10, clause 7.4.5.3.1 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.7.2-1 (AppPkgSubscription) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Send a request for a subscription MalformedAppPkgSubscription - Check HTTP Response Status Code Is 400 - - -Request all App Package subscriptions - [Documentation] TP_MEC_MEPM_PKGM_006_OK - ... Check that MEPM service returns the list of Application Package Subscriptions when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.5.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.4.2-1 (AppPkgSubscriptionLinkList) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get all APP Package subscriptions - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppPkgSubscriptionLinkList - Check Result Contains ${response} subscriptionId ${SUBSCRIPTION_ID} - - -Request a specific App Package subscription - [Documentation] TP_MEC_MEPM_PKGM_007_OK - ... Check that MEPM service returns an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.2 - ... ETSI GS MEC 010-2 2.0.10, Table 6.2.3.4.2-1 (AppPkgSubscriptionInfo) - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual APP Package subscriptions ${SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is AppPkgSubscriptionInfo - Check Result Contains ${response} subscriptionId ${SUBSCRIPTION_ID} - - -Request a specific App Package subscription using non existant subscription identifier - [Documentation] TP_MEC_MEPM_PKGM_007_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.0.10, clause 7.4.6.3.2 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Get an individual APP Package subscriptions ${NON_EXISTENT_SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 404 - - -Remove a APP Package subscription - [Documentation] TP_MEC_MEPM_PKGM_008_OK - ... Check that MEPM service deletes an Application Package Subscription when requested - ... ETSI GS MEC 010-2 2.0.10, clause 7.4.6.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete an App Package Subscription identified by ${SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 204 - Check HTTP Response Body is Empty - - -Remove a APP Package subscription using non existant subscription id - [Documentation] TP_MEC_MEPM_PKGM_008_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.0.10, clause 7.4.6.3.4 - [Tags] PIC_APP_PACKAGE_MANAGEMENT INCLUDE_UNDEFINED_SCHEMAS - Delete an App Package Subscription identified by ${NON_EXISTENT_SUBSCRIPTION_ID} - Check HTTP Response Status Code Is 404 - - -Post Application Package Notification - [Documentation] TP_MEC_MEPM_PKGM_009_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 2.0.10, clause 7.4.7.3.1 - ${json}= Get File schemas/AppPkgNotification.schema.json - Log Creating mock request and response to handle Application Package 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} - -*** Keywords *** -GET all APP Packages - Log Getting all App Packages - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages - ${output}= Output response - Set Suite Variable ${response} ${output} - - -GET all APP Packages with filters - [Arguments] ${key} ${value} - Log Getting all App Packages using filtering parameters - Set Headers {"Accept":"application/json"} - 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 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${value} - ${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":"${ACCEPTED_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 - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${content} - ${output}= Output response - Set Suite Variable ${response} ${output} - - - -Get all APP Package subscriptions - Log Getting list of subscriptions - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions - ${output}= Output response - Set Suite Variable ${response} ${output} - -Get an individual APP Package subscriptions - [Arguments] ${subId} - Log Getting an individual subscription - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} - ${output}= Output response - Set Suite Variable ${response} ${output} - -Delete an App Package Subscription identified by - [Arguments] ${subId} - Log Deleting a subscription - Set Headers {"Accept":"application/json"} - Set Headers {"Content-Type":"application/json"} - Set Headers {"Authorization":"${TOKEN}"} - Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subId} - ${output}= Output response - Set Suite Variable ${response} ${output} - - -Get the Content from an App Package identified by - [Arguments] ${appPkgId} - Log Getting App descriptor for App Package - Set Headers {"Accept":"${ACCEPTED_CONTENT_TYPE}"} - Set Headers {"Authorization":"${TOKEN}"} - Get ${apiRoot}/${apiName}/${apiVersion}/app_packages/${appPkgId}/appPkgContent - ${output}= Output response - Set Suite Variable ${response} ${output} \ No newline at end of file diff --git a/MEPM/PKGM/environment/variables.txt b/MEPM/PKGM/environment/variables.txt deleted file mode 100644 index 4685b217f86b7e4560189214a125c58d659215d8..0000000000000000000000000000000000000000 --- a/MEPM/PKGM/environment/variables.txt +++ /dev/null @@ -1,44 +0,0 @@ -*** Variables *** -# Generic variables -${MEPM_SCHEMA} http -${MEPM_HOST} 10.192.2.172 -${MEPM_PORT} 8081 -${response} {} -${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l -${apiRoot} -${apiName} apmi -${apiVersion} v1 - -# Specific variables -${APP_PKG_NAME} APP_PKG_NAME // Should be the same as in AppPkg.json -${APP_PKG_VERSION} APP_PKG_VERSION // Should be the same as in AppPkg.json -${CHECKSUM} CHECKSUM // Should be the same as in AppPkg.json -${OPERATIONAL_STATE} OPERATIONAL_STATE // Should be the same as in AppPkg.json -${USAGE_STATE} USAGE_STATE // Should be the same as in AppPkg.json -${ON_BOARDED_APP_PKG_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f -${APPD_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${MALFORMED_FILTER_NAME} operationalStatus // Should be operationalState -${FILTER_VALUE} NOT_IN_USE -${NON_EXISTENT_APP_PKG_ID} NON_EXISTENT_APP_PKG_ID -${OPERATION_VALUE} DISABLE - -${ACCEPTED_CONTENT_TYPE} text/plain // Should refer to the type of AppD -${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3 -${NON_EXISTENT_SUBSCRIPTION_ID} NON_EXISTENT_SUBSCRIPTION_ID - - - - -${SUBSCRIPTION_TYPE} MobilityProcedureSubscription - - - -# 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 diff --git a/MEPM/PKGM/jsons/AppPkgSubscription.json b/MEPM/PKGM/jsons/AppPkgSubscription.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEPM/PKGM/jsons/CreateAppPackage.json b/MEPM/PKGM/jsons/CreateAppPackage.json deleted file mode 100644 index 9e26dfeeb6e641a33dae4961196235bdb965b21b..0000000000000000000000000000000000000000 --- a/MEPM/PKGM/jsons/CreateAppPackage.json +++ /dev/null @@ -1 +0,0 @@ -{} \ No newline at end of file diff --git a/MEPM/PKGM/jsons/MalformedAppPkg.json b/MEPM/PKGM/jsons/MalformedAppPkg.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEPM/PKGM/jsons/MalformedAppPkgSubscription.json b/MEPM/PKGM/jsons/MalformedAppPkgSubscription.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEPM/PKGM/schemas/AppPkgSubscriptionInfo.json b/MEPM/PKGM/schemas/AppPkgSubscriptionInfo.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEPM/PKGM/schemas/AppPkgSubscriptionLinkList.json b/MEPM/PKGM/schemas/AppPkgSubscriptionLinkList.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEPM/PKGM/schemas/OnboardedAppPkgInfo.json b/MEPM/PKGM/schemas/OnboardedAppPkgInfo.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/MEPM/PKGM/schemas/OnboardedAppPkgInfos.json b/MEPM/PKGM/schemas/OnboardedAppPkgInfos.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/SRV/BWA/jsons/BwInfo.json b/SRV/BWA/jsons/BwInfo.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/SRV/BWA/jsons/BwInfoError.json b/SRV/BWA/jsons/BwInfoError.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/SRV/BWA/jsons/BwInfoUpdate.json b/SRV/BWA/jsons/BwInfoUpdate.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/SRV/BWA/jsons/BwInfoUpdateDelta.json b/SRV/BWA/jsons/BwInfoUpdateDelta.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/SRV/BWA/jsons/BwInfoUpdateDeltaError.json b/SRV/BWA/jsons/BwInfoUpdateDeltaError.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/SRV/BWA/schemas/BwInfo.schema.json b/SRV/BWA/schemas/BwInfo.schema.json deleted file mode 100644 index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000 diff --git a/SRV/RLOCLOOK/schemas/AccessPointList.schema.json b/SRV/RLOCLOOK/schemas/AccessPointList.schema.json deleted file mode 100644 index 2f0fb04962dbf3fe8e3c01a1050e12b34e48cd34..0000000000000000000000000000000000000000 --- a/SRV/RLOCLOOK/schemas/AccessPointList.schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "properties": { - "undefinedJsonSchema": { - "type": "string", - "description": "Json Schema for the given object is not yet defined" - } - }, - "required": [ - "undefinedJsonSchema" - ] -} diff --git a/SRV/SAQ/schemas/ServiceInfo.schema.json b/SRV/SAQ/schemas/ServiceInfo.schema.json deleted file mode 100644 index 50fbfe28d02dc6d410934a358a22fd4b9f7ace11..0000000000000000000000000000000000000000 --- a/SRV/SAQ/schemas/ServiceInfo.schema.json +++ /dev/null @@ -1,271 +0,0 @@ -{ - "description": "This type represents the general information of a MEC service.", - "type": "object", - "required": [ - "serName", - "version", - "state", - "transportInfo", - "serializer" - ], - "properties": { - "serInstanceId": { - "description": "Identifier of the service instance assigned by the MEC platform.", - "type": "string", - "readOnly": true, - "example": "ServiceInstance123" - }, - "serName": { - "description": "The name of the service. This is how the service producing MEC application identifies the service instance it produces.", - "type": "string", - "example": "ExampleService" - }, - "serCategory": { - "description": "This type represents the category reference", - "type": "object", - "required": [ - "href", - "id", - "name", - "version" - ], - "properties": { - "href": { - "description": "Reference of the catalogue", - "type": "string", - "format": "uri", - "example": "/example/catalogue1" - }, - "id": { - "description": "Unique identifier of the category", - "type": "string", - "example": "id12345" - }, - "name": { - "description": "Name of the category, example values include RNI, Location & Bandwidth Management", - "type": "string", - "example": "RNI" - }, - "version": { - "description": "Category version", - "type": "string", - "example": "version1" - } - } - }, - "version": { - "description": "Service version", - "type": "string", - "example": "ServiceVersion1" - }, - "state": { - "description": "This enumeration defines the possible states of a service.", - "type": "string", - "enum": [ - "ACTIVE", - "INACTIVE" - ], - "example": "ACTIVE" - }, - "transportInfo": { - "description": "This type represents the general information of a MEC service.", - "type": "object", - "required": [ - "id", - "name", - "type", - "protocol", - "version", - "endpoint", - "security" - ], - "properties": { - "id": { - "description": "The identifier of this transport", - "type": "string", - "example": "TransId12345" - }, - "name": { - "description": "The name of this transport", - "type": "string", - "example": "REST" - }, - "description": { - "description": "Human-readable description of this transport", - "type": "string", - "example": "REST API" - }, - "type": { - "description": "The enumeration TransportType represents types of transports", - "type": "string", - "enum": [ - "REST_HTTP", - "MB_TOPIC_BASED", - "MB_ROUTING", - "MB_PUBSUB", - "RPC", - "RPC_STREAMING", - "WEBSOCKET" - ], - "example": "REST_HTTP" - }, - "protocol": { - "description": "The name of the protocol used. Shall be set to HTTP for a REST API.", - "type": "string", - "example": "HTTP" - }, - "version": { - "description": "The version of the protocol used", - "type": "string", - "example": "2.0" - }, - "endpoint": { - "description": "This type represents information about a transport endpoint", - "type": "object", - "oneOf": [{ - "description": "Entry point information of the service as string, formatted according to URI syntax", - "type": "object", - "required": [ - "uris" - ], - "properties": { - "uris": { - "type": "array", - "minItems": 0, - "items": { - "description": "Entry point information of the service", - "type": "string", - "format": "uri", - "example": "/mecSerMgmtApi/service/EntryPoint" - } - } - } - }, - { - "description": "Entry point information of the service as one or more pairs of IP address and port", - "type": "object", - "required": [ - "addresses" - ], - "properties": { - "addresses": { - "type": "array", - "minItems": 0, - "items": { - "description": "A IP address and port pair", - "type": "object", - "required": [ - "host", - "port" - ], - "properties": { - "host": { - "description": "Host portion of the address", - "type": "string", - "example": "192.0.2.0" - }, - "port": { - "description": "Port portion of the address", - "type": "integer", - "format": "uint32", - "example": 8080 - } - } - } - } - } - }, - { - "description": "Entry point information of the service in a format defined by an implementation, or in an external specification.", - "type": "object", - "required": [ - "alternative" - ], - "properties": { - "alternative": { - "type": "object" - } - } - } - ] - }, - "security": { - "description": "This type represents security information related to a transport", - "type": "object", - "properties": { - "oAuth2Info": { - "description": "Parameters related to use of OAuth 2.0", - "required": [ - "grantTypes", - "tokenEndpoint" - ], - "properties": { - "grantTypes": { - "description": "List of supported OAuth 2.0 grant types.", - "type": "array", - "minItems": 1, - "maxItems": 4, - "items": { - "description": "OAuth 2.0 grant type", - "type": "string", - "enum": [ - "OAUTH2_AUTHORIZATION_CODE", - "OAUTH2_IMPLICIT_GRANT", - "OAUTH2_RESOURCE_OWNER", - "OAUTH2_CLIENT_CREDENTIALS" - ], - "example": "OAUTH2_CLIENT_CREDENTIALS" - } - }, - "tokenEndpoint": { - "description": "The token endpoint", - "type": "string", - "format": "uri", - "example": "/mecSerMgmtApi/security/TokenEndPoint" - } - }, - "type": "object" - } - } - }, - "implSpecificInfo": { - "description": "Additional implementation specific details of the transport", - "type": "object" - } - } - }, - "serializer": { - "description": "The enumeration represents types of serializers", - "type": "string", - "enum": [ - "JSON", - "XML", - "PROTOBUF3" - ], - "example": "JSON" - }, - "scopeOfLocality": { - "description": "The scope of locality as expressed by \"consumedLocalOnly\" and \"isLocal\". If absent, defaults to MEC_HOST", - "type": "string", - "enum": [ - "MEC_SYSTEM", - "MEC_HOST", - "NFVI_POP", - "ZONE", - "ZONE_GROUP", - "NFVI_NODE" - ], - "example": "MEC_SYSTEM" - }, - "consumedLocalOnly": { - "description": "Indicate whether the service can only be consumed by the MEC applications located in the same locality (as defined by scopeOfLocality) as this service instance.", - "type": "boolean", - "example": false - }, - "isLocal": { - "description": "Indicate whether the service is located in the same locality (as defined by scopeOfLocality) as the consuming MEC application.", - "type": "boolean", - "example": true - } - } -} \ No newline at end of file diff --git a/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json b/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json deleted file mode 100644 index 2780574b8fa8a7106158f4e11157cd46458a76fa..0000000000000000000000000000000000000000 --- a/SRV/UEAREASUB/jsons/CircleNotificationSubscription.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "address": "acr:10.0.0.1", - "callbackReference": { - "callbackData": "1234", - "notifyURL": "http://application.example.com/notifications/distance_notifications/123456" - }, - "checkImmediate": "true", - "clientCorrelator": "0123", - "enteringLeavingCriteria": "Entering", - "frequency": "10", - "latitude": "-80.86302", - "longitude": "41.277306", - "radius": "500", - "trackingAccuracy": "10" -} \ No newline at end of file diff --git a/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json b/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json deleted file mode 100644 index 3f9f6e8ad4428615feca12ff624cb2e67898a071..0000000000000000000000000000000000000000 --- a/SRV/UEAREASUB/jsons/CircleNotificationSubscriptionError.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "address": "acr:10.0.0.1", - "callback": { - "callbackData": "1234", - "notifyURL": "http://application.example.com/notifications/distance_notifications/123456" - }, - "checkImmediate": "true", - "clientCorrelator": "0123", - "enteringLeavingCriteria": "Entering", - "frequency": "10", - "latitude": "-80.86302", - "longitude": "41.277306", - "radius": "500", - "trackingAccuracy": "10" -} \ No newline at end of file diff --git a/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json b/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json deleted file mode 100644 index f8b20f2828e1fd1b88440ada9a8a1e83b2814f7b..0000000000000000000000000000000000000000 --- a/SRV/UEAREASUB/schemas/CircleNotificationSubscription.schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "properties": { - "undefinedJsonSchema": { - "type": "string", - "description": "Json Schema for the given object is not yet defined" - } - }, - "required": [ - "undefinedJsonSchema" - ] -} \ No newline at end of file diff --git a/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json b/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json deleted file mode 100644 index f8b20f2828e1fd1b88440ada9a8a1e83b2814f7b..0000000000000000000000000000000000000000 --- a/SRV/UEDISTLOOK/schemas/TerminalDistance.schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "properties": { - "undefinedJsonSchema": { - "type": "string", - "description": "Json Schema for the given object is not yet defined" - } - }, - "required": [ - "undefinedJsonSchema" - ] -} \ No newline at end of file diff --git a/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json b/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json deleted file mode 100644 index f8b20f2828e1fd1b88440ada9a8a1e83b2814f7b..0000000000000000000000000000000000000000 --- a/SRV/UEDISTSUB/schemas/DistanceNotificationSubscription.schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "properties": { - "undefinedJsonSchema": { - "type": "string", - "description": "Json Schema for the given object is not yet defined" - } - }, - "required": [ - "undefinedJsonSchema" - ] -} \ No newline at end of file diff --git a/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.json b/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.json deleted file mode 100644 index 0a27ccbd001045fedd47496ca23a1a8be79e35cb..0000000000000000000000000000000000000000 --- a/SRV/UEINFOSUB/schemas/ZonalTrafficSubscription.schema.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "properties": { - "undefinedJsonSchema": { - "type": "string", - "description": "Json Schema for the given object is not yet defined" - } - }, - "required": [ - "undefinedJsonSchema" - ] -} - diff --git a/SRV/UELOCLOOK/schemas/UserInfo.schema.json b/SRV/UELOCLOOK/schemas/UserInfo.schema.json deleted file mode 100644 index 6b78189622d47411c4d020195a2f965551e0b46d..0000000000000000000000000000000000000000 --- a/SRV/UELOCLOOK/schemas/UserInfo.schema.json +++ /dev/null @@ -1,144 +0,0 @@ -{ - "type": "object", - "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° to +90°. Cardinality greater than one only if \"shape\" equals 7.", - "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.", - "items": { - "type": "number" - }, - "minItems": 1, - "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", - "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" - ], - "description": "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.\n", - "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" -} diff --git a/SRV/UELOCLOOK/schemas/UserList.schema.json b/SRV/UELOCLOOK/schemas/UserList.schema.json deleted file mode 100644 index 32b692b0d106444ba8d009fc8be829406917387e..0000000000000000000000000000000000000000 --- a/SRV/UELOCLOOK/schemas/UserList.schema.json +++ /dev/null @@ -1,169 +0,0 @@ -{ - "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° to +90°. 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° to +180°. 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" - } - } -} diff --git a/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json b/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json deleted file mode 100644 index f8b20f2828e1fd1b88440ada9a8a1e83b2814f7b..0000000000000000000000000000000000000000 --- a/SRV/UELOCSUB/schemas/UserTrackingSubscription.schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "properties": { - "undefinedJsonSchema": { - "type": "string", - "description": "Json Schema for the given object is not yet defined" - } - }, - "required": [ - "undefinedJsonSchema" - ] -} \ No newline at end of file diff --git a/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json b/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json deleted file mode 100644 index f8b20f2828e1fd1b88440ada9a8a1e83b2814f7b..0000000000000000000000000000000000000000 --- a/SRV/UETRACKSUB/schemas/PeriodicNotificationSubscription.schema.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "properties": { - "undefinedJsonSchema": { - "type": "string", - "description": "Json Schema for the given object is not yet defined" - } - }, - "required": [ - "undefinedJsonSchema" - ] -} \ No newline at end of file diff --git a/extensions/mockserverlibrary.patch b/extensions/mockserverlibrary.patch deleted file mode 100644 index 8097a9d0dd924a57b59d40d73513c806415979bf..0000000000000000000000000000000000000000 --- a/extensions/mockserverlibrary.patch +++ /dev/null @@ -1,59 +0,0 @@ -diff --git a/src/MockServerLibrary/library.py b/src/MockServerLibrary/library.py -index a9e6227..7ba1eed 100644 ---- a/src/MockServerLibrary/library.py -+++ b/src/MockServerLibrary/library.py -@@ -66,6 +66,9 @@ class MockServerLibrary(object): - match_type = 'STRICT' if exact else 'ONLY_MATCHING_FIELDS' - req['body'] = {'type': body_type, 'json': json.dumps(body), 'matchType': match_type} - -+ if body_type is 'JSON_SCHEMA' and body: -+ req['body'] = {'type': body_type, 'json': json.dumps(body)} -+ - return req - - def create_mock_response(self, status_code, headers=None, body_type='JSON', body=None): -@@ -97,6 +100,42 @@ class MockServerLibrary(object): - - return rsp - -+ def create_mock_http_forward(self, path, delay=1, unit='SECONDS'): -+ """Creates a mock http override forward to be used by mockserver. -+ -+ Returns the http forward in a dictionary format. -+ -+ `path` is the new url where to forward the request -+ -+ `delay` is the delay of the forward action -+ -+ `unit` is the unit of the delay time (default "SECONDS") -+ """ -+ fwd = {} -+ fwd['httpRequest'] = {'path': path} -+ fwd['delay'] = {'timeUnit': unit, 'value': delay} -+ -+ return fwd -+ -+ def create_mock_expectation_with_http_forward(self, request, forward, count=1, unlimited=True): -+ """Creates a mock expectation with request and forward action to be used by mockserver. -+ -+ `request` is a mock request matcher in a dictionary format. -+ -+ `forward` is a mock forward in a dictionary format. -+ -+ `count` is the number of expected requests -+ -+ `unlimited` is a boolean value which, if enabled, allows unspecified number of -+ requests to reply to -+ """ -+ data = {} -+ data['httpRequest'] = request -+ data['httpOverrideForwardedRequest'] = forward -+ data['times'] = {'remainingTimes': int(count), 'unlimited': unlimited} -+ -+ self.create_mock_expectation_with_data(data) -+ - def create_mock_expectation(self, request, response, count=1, unlimited=True): - """Creates a mock expectation to be used by mockserver. - - - diff --git a/requirements.txt b/requirements.txt index 2c8b44f1d4ef33cd592c4487a4e6fff9c59b6b39..a17d6be79f5aa053e1ea192c8d771df30799f75a 100644 --- a/requirements.txt +++ b/requirements.txt @@ -7,4 +7,5 @@ RESTinstance==1.0.0rc4 robotframework-dependencylibrary==1.0.0.post1 robotframework-jsonlibrary==0.3 robotframework-jsonschemalibrary==1.0 -robotframework-requests==0.5.0 +robotframework-requests==0.8.0 +robotframework-mockserver>=0.0.7 diff --git a/scripts/docker/Dockerfile b/scripts/docker/Dockerfile index 6b9bf39082c30df67840bcf629f3b01f3f70b4cd..f09948e4a43bd4f2f9cfca28d4bb42f680157882 100644 --- a/scripts/docker/Dockerfile +++ b/scripts/docker/Dockerfile @@ -42,11 +42,7 @@ RUN pip3 install robotframework RUN DEBIAN_FRONTEND=noninteractive \ && cd /home/etsi/dev/robot \ && pip3 install -r requirements.txt \ - && chmod +x /home/etsi/dev/robot/scripts/* \ - && git clone https://github.com/etsi-cti-admin/robotframework-mockserver \ - && cd robotframework-mockserver \ - && patch -p1 < ../extensions/mockserverlibrary.patch \ - && python3 -m pip install -e . + && chmod +x /home/etsi/dev/robot/scripts/* CMD tail -f /dev/null