pax_global_header 0000666 0000000 0000000 00000000064 13540442377 0014523 g ustar 00root root 0000000 0000000 52 comment=f833775665b33bdcdf5eee05fd54f7fe328844a6
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/ 0000775 0000000 0000000 00000000000 13540442377 0023167 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/.jenkins.sh 0000664 0000000 0000000 00000000354 13540442377 0025244 0 ustar 00root root 0000000 0000000 #!/bin/bash
# Copyright ETSI 2018
# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt
#set -vx
#set -e
cd "$(dirname "$0")"
run_dir="$(pwd)"
./scripts/build-container.sh
./scripts/run-container.sh "${run_dir}"
exit $?
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/GenericKeywords.robot 0000664 0000000 0000000 00000002572 13540442377 0027350 0 ustar 00root root 0000000 0000000 *** Settings ***
Library JSONSchemaLibrary schemas/
Library BuiltIn
*** Variables ***
${response}
*** Keywords ***
Check HTTP Response Status Code Is
[Arguments] ${expected_status}
${status}= Convert To Integer ${expected_status}
Should Be Equal ${response['status']} ${status}
Log Status code validated
Check HTTP Response Body Json Schema Is
[Arguments] ${input}
Should Contain ${response['headers']['Content-Type']} application/json
${schema} = Catenate SEPARATOR= ${input} .schema.json
Validate Json ${schema} ${response['body']}
Log Json Schema Validation OK
Should Be Present In Json List
[Arguments] ${expr} ${json_field} ${json_value}
Log Check if ${json_field} is present in ${expr} with the value ${jsonvalue}
:FOR ${item} IN @{expr}
\ Exit For Loop If "${item['${json_field}']}" == "${json_value}"
Log Item found ${item}
[return] ${item}
Check Result Contains
[Arguments] ${source} ${parameter} ${value}
Should Be Present In Json List ${source} ${parameter} ${value}
Check ProblemDetails
[Arguments] ${expected_status}
${status}= Convert To Integer ${expected_status}
Should Be Equal ${response['body']['problemDetails']['status']} ${status}
Log ProblemDetails Status code validated
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/LICENSE 0000664 0000000 0000000 00000002703 13540442377 0024176 0 ustar 00root root 0000000 0000000 Copyright 2019 ETSI
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice,
this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice,
this list of conditions and the following disclaimer in the documentation
and/or other materials provided with the distribution.
3. Neither the name of the copyright holder nor the names of its contributors
may be used to endorse or promote products derived from this software without
specific prior written permission.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
OF THE POSSIBILITY OF SUCH DAMAGE. gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/ 0000775 0000000 0000000 00000000000 13540442377 0023607 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/GRANT/ 0000775 0000000 0000000 00000000000 13540442377 0024462 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/GRANT/README.md 0000664 0000000 0000000 00000000000 13540442377 0025727 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/PKGM/ 0000775 0000000 0000000 00000000000 13540442377 0024345 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/PKGM/README.md 0000664 0000000 0000000 00000000000 13540442377 0025612 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/ 0000775 0000000 0000000 00000000000 13540442377 0025040 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/README.md 0000664 0000000 0000000 00000000000 13540442377 0026305 0 ustar 00root root 0000000 0000000 SysUeAppsContext.robot 0000664 0000000 0000000 00000015434 13540442377 0031300 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX ''[Documentation] robot --outputdir ../../outputs ./SysUeAppContext.robot
... Test Suite to validate Bandwidth Management API (BWA) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/UeAppContextAPI.robot
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['callbackReference']}= ${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['callbackReference']}= '' # 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['callbackReference']}= ${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
[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}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/environment/ 0000775 0000000 0000000 00000000000 13540442377 0027404 5 ustar 00root root 0000000 0000000 variables.txt 0000664 0000000 0000000 00000002742 13540442377 0032043 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/environment *** 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": "${CREATE_APP_CTX}", "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": "${CREATE_APP_CTX}", "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
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/resources/ 0000775 0000000 0000000 00000000000 13540442377 0027052 5 ustar 00root root 0000000 0000000 UeAppsContextAPI.robot 0000664 0000000 0000000 00000002613 13540442377 0033140 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/resources *** 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
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/schemas/ 0000775 0000000 0000000 00000000000 13540442377 0026463 5 ustar 00root root 0000000 0000000 UEAppInterfaceAPI.schema.json 0000664 0000000 0000000 00000045341 13540442377 0033672 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPCTX/schemas {
"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"
}
}
}
}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPS/ 0000775 0000000 0000000 00000000000 13540442377 0024604 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPS/README.md 0000664 0000000 0000000 00000000000 13540442377 0026051 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEO/UEAPPS/SysUeApplications.robot0000664 0000000 0000000 00000007443 13540442377 0031302 0 ustar 00root root 0000000 0000000 ''[Documentation] robot --outputdir ../../outputs ./SysUeApplications.robot
... Test Suite to validate Bandwidth Management API (BWA) operations.
*** Settings ***
Resource ../UEAPPCTX/environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource ../UEAPPCTX/resources/UeAppContextAPI.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 wrong 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}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEPM/ 0000775 0000000 0000000 00000000000 13540442377 0023725 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEPM/PKGM/ 0000775 0000000 0000000 00000000000 13540442377 0024463 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEPM/PKGM/README.md 0000664 0000000 0000000 00000000000 13540442377 0025730 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEX/ 0000775 0000000 0000000 00000000000 13540442377 0023620 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEX/ANY/ 0000775 0000000 0000000 00000000000 13540442377 0024247 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEX/ANY/README.md 0000664 0000000 0000000 00000000000 13540442377 0025514 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEX/LCM/ 0000775 0000000 0000000 00000000000 13540442377 0024233 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/MEX/LCM/README.md 0000664 0000000 0000000 00000000000 13540442377 0025500 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/README.md 0000664 0000000 0000000 00000002443 13540442377 0024451 0 ustar 00root root 0000000 0000000 # MEC Testing Framework in Robot Framework
## Introduction
This repositories contains the test specifications and test adapter code for MEC Testing project in Robot Framework
## Contact information
Email at cti_support at etsi dot org
## License
Unless specified otherwise, the content of this repository and the files contained are released under the BSD-3-Clause license.
See the attached LICENSE file or visit https://forge.etsi.org/legal-matters.
## Standard links
- Mobile-Edge Computation standards, accessible [here](https://www.etsi.org/standards#page=1&search=MEC&title=1&etsiNumber=1&content=1&version=0&onApproval=1&published=1&historical=1&startDate=1988-01-15&endDate=2019-05-06&harmonized=0&keyword=&TB=&stdType=&frequency=&mandate=&collection=&sort=1)
## RFC links
- RFC 7159 - The JavaScript Object Notation (JSON) Data Interchange Format, accessible [here](https://tools.ietf.org/html/rfc7159.html)
NOTE All draft can be found in the 'IETF XML Registry', accessible [here](https://www.iana.org/assignments/xml-registry/xml-registry.xhtml)
## Installation
TODO
## Usage
TODO
## How to Report a Bug
The ETSI MEC Testing Framework project is under constant development, so it is possible that you will
encounter a bug while using it. Please report bugs at cti_support at etsi dot org.
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/ 0000775 0000000 0000000 00000000000 13540442377 0023641 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/AMS/ 0000775 0000000 0000000 00000000000 13540442377 0024261 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/AMS/AMSService.robot 0000664 0000000 0000000 00000036032 13540442377 0027275 0 ustar 00root root 0000000 0000000 ''[Documentation] robot --outputdir ./outputs ./SRV/UETAG/PlatUeIdentity.robot
... Test Suite to validate UE Identity Tag (UETAG) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Library REST ${AMS_SCHEMA}://${AMS_HOST}:${AMS_PORT} ssl_verify=false
Library BuiltIn
Library OperatingSystem
Library MockServerLibrary
*** Test Cases ***
Request Registered AMS information
[Documentation] TP_MEC_SRV_AMS_001_OK
... 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
Get Registered AMS information
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is AppMobilityServiceInfos
Request Registered AMS information using attribute-selector
[Documentation] TP_MEC_SRV_AMS_001_OK
... 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
Get Registered AMS information using attribute-selector appMobilityServiceId ${APP_MOBILITY_SERVICE_ID}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is AppMobilityServiceInfos
Check Result Contains ${response['body']['AppMobilityServiceInfo']} appMobilityServiceId ${APP_MOBILITY_SERVICE_ID}
Request Registered AMS information using bad parameters
[Documentation] TP_MEC_SRV_AMS_001_BR
... 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
Get 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
... 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
Create a new application mobility service RegistrationInfo
Check HTTP Response Status Code Is 201
Check HTTP Response Body Json Schema Is AppMobilityServiceInfo
Log Checking Postcondition
Check Result Contains ${response['body']['AppMobilityServiceInfo']['registeredAppMobilityService']['serviceConsumerId']['']} appInstanceId ${APP_INS_ID}
Register an UE Identity Tag using invalid parameter
[Documentation] TP_MEC_SRV_AMS_002_BR
... 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
Create a new application mobility service RegistrationInfoMalformed
Check HTTP Response Status Code Is 400
Request Subscriptions List for the registered AMS services
[Documentation] TP_MEC_SRV_AMS_003_OK
... Check that the AMS service returns information about the available subscriptions when requested.
... Permitted SUBSCRIPTION_TYPE are:
... - MobilityProcedureSubscription
... - AdjacentAppInfoSubscription"
... ETSI GS MEC 021 2.0.8, clause 8.6.3.1
Get Subscriptions for registered AMS
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is SubscriptionLinkList
Request Subscription List for registered AMS Services using wrong attribute parameters
[Documentation] TP_MEC_SRV_AMS_003_BR
... Check that the AMS service sends an error when it receives a malformed query about the available subscriptions
Get Subscriptions for registered AMS with wrong attbirube parameter
Check HTTP Response Status Code Is 400
Create a notification subscription
[Documentation] TP_MEC_SRV_AMS_004_OK
... Check that the AMS service creates a notification subscriptions when requested.
... Permitted SUBSCRIPTION_TYPE are:
... - MobilityProcedureSubscription
... - AdjacentAppInfoSubscription"
... ETSI GS MEC 021 2.0.8, clause 8.6.3.4
Post a new notification subscription NotificationSubscription
Check HTTP Response Status Code Is 201
Check HTTP Response Body Json Schema Is NotificationSubscription
Create a notification subscription with wrong attribute parameter
[Documentation] TP_MEC_SRV_AMS_004_BR
... Check that the AMS service creates a notification subscriptions when requested.
... Permitted SUBSCRIPTION_TYPE are:
... - MobilityProcedureSubscription
... - AdjacentAppInfoSubscription"
... ETSI GS MEC 021 2.0.8, clause 8.6.3.4
Post a new notification subscription NotificationSubscriptionError
Check HTTP Response Status Code Is 400
Request a specific subscription
[Documentation] TP_MEC_SRV_AMS_005_OK
... Check that the AMS service returns information about a given subscription when requested.
... Permitted SUBSCRIPTION_TYPE are:
... - MobilityProcedureSubscription
... - AdjacentAppInfoSubscription"
... ETSI GS MEC 021 2.0.8, clause 8.7.3.1
Get individual subscription for AMS services ${SUBSCRIPTION_ID}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is NotificationSubscription
Request a specific subscription using wrong identifier
[Documentation] TP_MEC_SRV_AMS_005_NF
... 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
Get individual subscription for AMS services ${NON_EXISTENT_SUBSCRIPTION_ID}
Check HTTP Response Status Code Is 404
Modify a specific subscription
[Documentation] TP_MEC_SRV_AMS_007_OK
... Check that the AMS service modifies a given subscription when requested.
... Permitted SUBSCRIPTION_TYPE are:
... - MobilityProcedureSubscription
... - AdjacentAppInfoSubscription
... ETSI GS MEC 021 2.0.8, clause 8.7.3.2
Update individual subscription for AMS services ${SUBSCRIPTION_ID} NotificationSubscription
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is NotificationSubscription
Modify a specific subscription using malformed request
[Documentation] TP_MEC_SRV_AMS_007_BR
... Check that the AMS service sends an error when it receives a malformed modify request for a given subscription.
... Permitted SUBSCRIPTION_TYPE are:
... - MobilityProcedureSubscription
... - AdjacentAppInfoSubscription
... ETSI GS MEC 021 2.0.8, clause 8.7.3.2
Update individual subscription for AMS services ${SUBSCRIPTION_ID} NotificationSubscriptionError
Check HTTP Response Status Code Is 400
Modify a specific subscription using wrong identifier
[Documentation] TP_MEC_SRV_AMS_007_NF
... 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
Update individual subscription for AMS services ${NON_EXISTENT_SUBSCRIPTION_ID} NotificationSubscription
Check HTTP Response Status Code Is 404
Remove a specific subscription
[Documentation] TP_MEC_SRV_AMS_006_OK
... Check that the AMS service deletes a given subscription when requested
... ETSI GS MEC 021 2.0.8, clause 8.7.3.5
Delete individual subscription for AMS services ${SUBSCRIPTION_ID}
Check HTTP Response Status Code Is 204
Remove a specific subscription using wrong identifier
[Documentation] TP_MEC_SRV_AMS_006_NF
... 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
Delete individual subscription for AMS services ${NON_EXISTENT_SUBSCRIPTION_ID}
Check HTTP Response Status Code Is 404
Post Mobility Procedure Notification
[Documentation] TP_MEC_SRV_AMS_008_OK
... 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
${json}= Get File schemas/MobilityProcedureNotification.schema.json
Log Creating mock request and response to handle Mobility Procedure Notification
&{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json}
&{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204
Create Mock Expectation ${req} ${rsp}
Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req}
Log Verifying results
Verify Mock Expectation ${req}
Log Cleaning the endpoint
Clear Requests ${callback_endpoint}
Post Adjacent Application Info Notification
[Documentation] TP_MEC_SRV_AMS_009_OK
... 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
${json}= Get File schemas/AdjacentAppInfoNotification.schema.json
Log Creating mock request and response to handle Adjacent Application Info Notification
&{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json}
&{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204
Create Mock Expectation ${req} ${rsp}
Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req}
Log Verifying results
Verify Mock Expectation ${req}
Log Cleaning the endpoint
Clear Requests ${callback_endpoint}
Post Expire Notification
[Documentation] TP_MEC_SRV_AMS_010_OK
... 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
${json}= Get File schemas/ExpiryNotification.schema.json
Log Creating mock request and response to handle Expire Notification
&{req}= Create Mock Request Matcher POST ${callback_endpoint} body_type="JSON_SCHEMA" body=${json}
&{rsp}= Create Mock Response headers="Content-Type: application/json" status_code=204
Create Mock Expectation ${req} ${rsp}
Wait Until Keyword Succeeds ${total_polling_time} ${polling_interval} Verify Mock Expectation ${req}
Log Verifying results
Verify Mock Expectation ${req}
Log Cleaning the endpoint
Clear Requests ${callback_endpoint}
*** Keywords ***
Get Registered AMS information
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Get ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices
${output}= Output response
Set Suite Variable ${response} ${output}
Get Registered AMS information using attribute-selector
[Arguments] ${key} ${value}
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Get ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices?${key}=${value}
${output}= Output response
Set Suite Variable ${response} ${output}
Get Registered AMS information using bad parameters
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Get ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices?appMobilityService=${APP_MOBILITY_SERVICE_ID} //param should be appMobilityServiceId
${output}= Output response
Set Suite Variable ${response} ${output}
Create a new application mobility service
[Arguments] ${content}
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
${file}= Catenate SEPARATOR= json/ ${content} .json
${body}= Get File ${file}
Post ${apiRoot}/${apiName}/${apiVersion}/appMobilityServices ${body}
${output}= Output response
Set Suite Variable ${response} ${output}
Get Subscriptions for registered AMS
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions
${output}= Output response
Set Suite Variable ${response} ${output}
Get Subscriptions for registered AMS with wrong attbirube parameter
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions?subscriptionTyp=${SUBSCRIPTION_TYPE}
${output}= Output response
Set Suite Variable ${response} ${output}
Post a new notification subscription
[Arguments] ${content}
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
${file}= Catenate SEPARATOR= json/ ${content} .json
${body}= Get File ${file}
Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body}
${output}= Output response
Set Suite Variable ${response} ${output}
Get individual subscription for AMS services
[Arguments] ${content}
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Delete individual subscription for AMS services
[Arguments] ${content}
Should Be True ${PIC_AMS} == 1
Set Headers {"Authorization":"${TOKEN}"}
Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Update individual subscription for AMS services
[Arguments] ${identifier} ${content}
Should Be True ${PIC_AMS} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
${file}= Catenate SEPARATOR= json/ ${content} .json
${body}= Get File ${file}
Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${identifier} ${body}
${output}= Output response
Set Suite Variable ${response} ${output}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/AMS/README.md 0000664 0000000 0000000 00000000000 13540442377 0025526 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/AMS/environment/ 0000775 0000000 0000000 00000000000 13540442377 0026625 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/AMS/environment/variables.txt 0000664 0000000 0000000 00000001766 13540442377 0031350 0 ustar 00root root 0000000 0000000 *** Variables ***
# Generic variables
${AMS_SCHEMA} http
${AMS_HOST} 10.192.2.172
${AMS_PORT} 8081
${response} {}
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
${apiRoot}
${apiName}
${apiVersion} v1
# Specific variables
${APP_MOBILITY_SERVICE_ID} KtRGymNQ84dG3mQfRepa
${APP_INS_ID} 5abe4782-2c70-4e47-9a4e-0ee3a1a0fd1f
${SUBSCRIPTION_TYPE} MobilityProcedureSubscription
${SUBSCRIPTION_ID} e0deee2b-6e50-4f33-ab09-8bf0585025d3
${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 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/APPSAQ/ 0000775 0000000 0000000 00000000000 13540442377 0024626 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/APPSAQ/PlatAppServices.robot 0000664 0000000 0000000 00000006375 13540442377 0030755 0 ustar 00root root 0000000 0000000 *** Settings ***
Documentation
... A test suite for validating Application Service Availability Query (APPSAQ) operations.
Resource ../../resources/GenericKeywords.robot
Default Tags TP_MEC_SRV_APPSAQ
*** Variables ***
*** Test Cases ***
Get the available MEC services for a given application instance
[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.0.8, clause 7.15.3.1
... OpenAPI https://forge.etsi.org/gitlab/mec/gs011-app-enablement-api/blob/master/Mp1.yaml#/definitions/ServiceInfo
[Tags] TP_MEC_SRV_APPSAQ_001_OK TP_MEC_SRV_APPSAQ_BV
Given the Plaform IUT has a MEC Application instantiated
Log MEC 011, clause 5.2.5
# When the Plaform IUT entity receives a vGET for /mec_service_mgmt/v1/applications/${APP_INSTANCE_ID}/services
When the Plaform IUT entity receives a vGET for /${APP_INSTANCE_ID}/services
Log MEC 011, clause 7.15.3.1
Then the Plaform IUT sends a response 200 ServiceInfoList
MEC Applications sends incorrect parameters in request
[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.0.8, clause 7.15.3.1
[Tags] TP_MEC_SRV_APPSAQ_001_BR TP_MEC_SRV_APPSAQ_BI
Given the Plaform IUT has a MEC Application instantiated
Log MEC 011, clause 5.2.5
Log Wrong parameter name should trigger an error response.
# When the Plaform IUT entity receives a vGET for /mec_service_mgmt/v1/applications/${APP_INSTANCE_ID}/services?instance_id=some_instance_id
When the Plaform IUT entity receives a vGET for /${APP_INSTANCE_ID}/services?instance_id=some_instance_id
Log MEC 011, clause 7.15.3.1
Then the Plaform IUT sends a response 400 ProblemDetails
New MEC Applications service registration
[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.0.8, clause 7.15.3.4
[Tags] TP_MEC_SRV_APPSAQ_002_OK TP_MEC_SRV_APPSAQ_BV
Given the Plaform IUT has a MEC Application instantiated
# TODO where does the __some_service__ data comes from?
Given a MEC Application subscribed to service notifications for __some_service__
Log MEC 011, clause 5.2.4
Log Wrong parameter name should trigger an error response.
# TODO where does the __some_data__ comes from?
# When the Plaform IUT entity receives a vPOST for /mec_service_mgmt/v1/applications/${APP_INSTANCE_ID}/services
When the Plaform IUT entity receives a vPOST for /${APP_INSTANCE_ID}/services __some_data__ ServiceInfo
Log MEC 011, clause 7.15.3.4
Then the Plaform IUT sends a response 201 ServiceInfo
And the Plaform IUT response header parameter Location __location__
Log MEC 011, clause 6.4.2
And the Plaform IUT sends a notification message to the subscribed MEC Applications with ServiceAvailabilityNotification
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/APPSAQ/README.md 0000664 0000000 0000000 00000000000 13540442377 0026073 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/APPSUB/ 0000775 0000000 0000000 00000000000 13540442377 0024633 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/APPSUB/README.md 0000664 0000000 0000000 00000000000 13540442377 0026100 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/ 0000775 0000000 0000000 00000000000 13540442377 0024252 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/PlatBandwidthManager.robot0000664 0000000 0000000 00000036005 13540442377 0031345 0 ustar 00root root 0000000 0000000 ''[Documentation] robot --outputdir ../../outputs ./PlatBandwidthManager.robot
... Test Suite to validate Bandwidth Management API (BWA) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/BandwidthManagerAPI.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
Request the list of configured bandwidth allocations
[Documentation] TC_MEC_SRV_BWA_001_OK
... 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 https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json
Retrieve the list of configured bandwidth allocations ${APP_INSTANCE_ID}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is bwInfo
Check AppInstanceId ${APP_INSTANCE_ID}
Request the list of configured bandwidth allocations with wrong app instance id
[Documentation] TC_MEC_SRV_BWA_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 015 V1.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}
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
Request to register Bandwidth Management Services
[Documentation] TC_MEC_SRV_BWA_002_OK
... 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
... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json
Registration for bandwidth services ${APP_INSTANCE_ID} ${REQUEST_FOR_BW_REQUIREMENTS}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is bwInfo
Check AppInstanceId ${APP_INSTANCE_ID}
Request to register Bandwidth Management Services using wrong parameters
[Documentation] TC_MEC_SRV_BWA_002_BR
... 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
... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json
Registration for bandwidth services ${APP_INSTANCE_ID} ${REQUEST_FOR_BW_REQUIREMENTS_BR}
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
Request for a bandwidth allocation
[Documentation] TC_MEC_SRV_BWA_003_OK
... 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
... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json
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}
Request for a bandwidth allocation using wrong parameters
[Documentation] TC_MEC_SRV_BWA_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 015 V1.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}
Check HTTP Response Status Code Is 404
Check ProblemDetails 404
Updates the requested bandwidth requirements
[Documentation] TC_MEC_SRV_BWA_004_OK
... 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
... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json
# Preamble
Register Bandwidth Management Service
# Test body
Update a bandwidth allocation ${ALLOCATION_ID} ${REQUEST_FOR_BW_REQUIREMENTS}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is bwInfo
Check AppInstanceId ${APP_INSTANCE_ID}
Check Allocation ${ALLOCATION_ID}
# Postamble
Unregister Bandwidth Management Service
Updates the requested bandwidth requirements using wrong allocationDirection
[Documentation] TC_MEC_SRV_BWA_004_BR
... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application
... Reference ETSI GS MEC 015 V1.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
# Test body
Update a bandwidth allocation ${ALLOCATION_ID} ${REQUEST_FOR_BW_REQUIREMENTS_BR}
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
# Postamble
Unregister Bandwidth Management Service
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 ${NOT_EXISTENT_ALLOCATION_ID} ${REQUEST_FOR_BW_REQUIREMENTS}
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
... 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
... 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
# Test body
Update a bandwidth allocation with invalid ETAG ${ALLOCATION_ID} ${REQUEST_FOR_BW_REQUIREMENTS}
Check HTTP Response Status Code Is 412
Check ProblemDetails 412
# Postamble
Unregister Bandwidth Management Service
Request for deltas changes
[Documentation] TC_MEC_SRV_BWA_005_OK
... 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
# Preamble
Register Bandwidth Management Service
# Test body
Request a deltas changes ${ALLOCATION_ID} ${REQUEST_FOR_DELTAS_CHANGES}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is bwInfo
Check AppInstanceId ${APP_INSTANCE_ID}
Check Allocation ${ALLOCATION_ID}
# Postamble
Unregister Bandwidth Management Service
Request for deltas changes using invalid requestType
[Documentation] TC_MEC_SRV_BWA_005_BR
... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application
... Reference ETSI GS MEC 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
# Test body
Request a deltas changes ${ALLOCATION_ID} ${REQUEST_FOR_DELTAS_CHANGES_BR}
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
# Postamble
Unregister Bandwidth Management Service
Request for deltas changes using an unknown URI
[Documentation] TC_MEC_SRV_BWA_005_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.3
... Reference https://forge.etsi.org/rep/mec/gs015-bandwith-mgmt-api/blob/master/BwManagementApi.json
Request a deltas changes ${NOT_EXISTENT_ALLOCATION_ID} ${REQUEST_FOR_DELTAS_CHANGES}
Check HTTP Response Status Code Is 404
Check ProblemDetails 404
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
# Test body
Request a deltas changes with invalid ETAG ${ALLOCATION_ID} ${REQUEST_FOR_DELTAS_CHANGES}
Check HTTP Response Status Code Is 412
Check ProblemDetails 412
# Postamble
Unregister Bandwidth Management Service
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
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Register Bandwidth Management Service
# Test body
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Delete /exampleAPI/bwm/v1/bw_allocations/${ALLOCATION_ID}
${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
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 {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Delete /exampleAPI/bwm/v1/bw_allocations/${NON_EXISTENT_ALLOCATION_ID}
${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
[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 {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/bwm/v1/bw_allocations/${app_instance_id}
${output}= Output response
Set Suite Variable ${response} ${output}
Registration for bandwidth services
[Arguments] ${app_instance_id} ${content}
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
log ${content}
Post /exampleAPI/bwm/v1/bw_allocations/${APP_INSTANCE_ID} ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Get a bandwidth allocation
[Arguments] ${allocation_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 {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/bwm/v1/bw_allocations/${allocation_id}
${output}= Output response
Set Suite Variable ${response} ${output}
Update a bandwidth allocation
[Arguments] ${allocation_id} ${content}
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"ETag":"${ETAG_VALUE}"}
Set Headers {"Content-Length":"0"}
Put /exampleAPI/bwm/v1/bw_allocations/${allocation_id} ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Update a bandwidth allocation with invalid ETAG
[Arguments] ${allocation_id} ${content}
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"${ETAG_LABEL}":"${INVALID_ETAG}"}
Set Headers {"Content-Length":"0"}
Put /exampleAPI/bwm/v1/bw_allocations/${allocation_id} ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Request a deltas changes
[Arguments] ${allocation_id} ${content}
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"${ETAG_LABEL}":"${ETAG}"}
Set Headers {"Content-Length":"0"}
Patch /exampleAPI/bwm/v1/bw_allocations/${allocation_id} ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Request a deltas changes with invalid ETAG
[Arguments] ${allocation_id} ${content}
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"${ETAG_LABEL}":"${INVALID_ETAG}"}
Set Headers {"Content-Length":"0"}
Patch /exampleAPI/bwm/v1/bw_allocations/${allocation_id} ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/README.md 0000664 0000000 0000000 00000000000 13540442377 0025517 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/environment/ 0000775 0000000 0000000 00000000000 13540442377 0026616 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/environment/variables.txt 0000664 0000000 0000000 00000003244 13540442377 0031332 0 ustar 00root root 0000000 0000000 *** 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
${INVALID_ETAG} invalid_etag
${APP_INSTANCE_ID} appInst01
${NON_EXISTENT_APP_INSTANCE_ID} appInst99
${ALLOCATION_ID} allInst01
${NON_EXISTENT_ALLOCATION_ID} allInst99
${FIXED_ALLOCATION} fixed_allocation
${REQUEST_FOR_BW_REQUIREMENTS} { "appInsId": "${APP_INSTANCE_ID}", "requestType": "APPLICATION_SPECIFIC_BW_ALLOCATION", "fixedBWPriority": "not defined in the present document", "fixedAllocation": "${FIXED_ALLOCATION}", "allocationDirection": "00 = Downlink (towards the UE)"}
${REQUEST_FOR_BW_REQUIREMENTS_BR} { "appInsId": "${APP_INSTANCE_ID}", "requestType": "UNKMOWN", "fixedBWPriority": "not defined in the present document", "fixedAllocation": "${FIXED_ALLOCATION}", "allocationDirection": "00 = Downlink (towards the UE)"}
${REQUEST_FOR_DELTAS_CHANGES} { "appInsId": "${APP_INSTANCE_ID}", "requestType": "APPLICATION_SPECIFIC_BW_ALLOCATION", "fixedBWPriority": "not defined in the present document", "fixedAllocation": "string", "allocationDirection": "00 = Downlink (towards the UE)"}
${REQUEST_FOR_DELTAS_CHANGES_BR} { "appInsId": "${APP_INSTANCE_ID}", "requestType": "UNKNOWN", "fixedBWPriority": "not defined in the present document", "fixedAllocation": "string", "allocationDirection": "00 = Downlink (towards the UE)"}
${response} {}
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
${ETAG_VALUE}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/resources/ 0000775 0000000 0000000 00000000000 13540442377 0026264 5 ustar 00root root 0000000 0000000 BandwidthManagerAPI.robot 0000664 0000000 0000000 00000004357 13540442377 0033016 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/resources *** 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 ***
Register Bandwidth Management Service
... Register a 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 {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Post /exampleAPI/bwm/v1/bw_allocations ${REQUEST_FOR_BW_REQUIREMENTS}
${output}= Output response
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}
Unregister Bandwidth Management Service
... Unregister a Bandwidth Management Service
[Arguments] ${value}
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"}
Delete /exampleAPI/bwm/v1/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
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/schemas/ 0000775 0000000 0000000 00000000000 13540442377 0025675 5 ustar 00root root 0000000 0000000 BandwidthManagementAPI.schema.json 0000664 0000000 0000000 00000056524 13540442377 0034217 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/BWA/schemas {
"swagger": "2.0",
"info": {
"description": "The ETSI MEC ISG MEC015 Bandwidth Management API described using OpenAPI",
"version": "1.1.1",
"title": "BWM API",
"license": {
"name": "ETSI Forge copyright notice",
"url": "https://forge.etsi.org/etsi-forge-copyright-notice.txt"
}
},
"externalDocs": {
"description": "ETSI MEC015 V1.1.1 Bandwidth Management API",
"url": "http://www.etsi.org/deliver/etsi_gs/MEC/001_099/015/01.01.01_60/gs_MEC015v010101p.pdf"
},
"host": "127.0.0.1:8081",
"basePath": "/bwm/v1",
"schemes": [
"http",
"https"
],
"consumes": [
"application/json"
],
"produces": [
"application/json"
],
"security": [
{
"OauthSecurity": [
"all"
]
}
],
"securityDefinitions": {
"OauthSecurity": {
"type": "oauth2",
"flow": "application",
"tokenUrl": "https://oauth.exampleAPI/token",
"scopes": {
"all": "Single oauth2 scope for API"
}
}
},
"parameters": {
"Body.BwInfo": {
"name": "bwInfo",
"in": "body",
"description": "BwInfo with updated information is included as entity body of the request",
"required": true,
"schema": {
"$ref": "#/definitions/BwInfo"
}
},
"Body.BwInfoDeltas": {
"name": "bwInfoDeltas",
"in": "body",
"description": "Description of the changes to instruct the server how to modify the resource representation. ",
"required": true,
"schema": {
"$ref": "#/definitions/BwInfoDeltas"
}
},
"Path.AllocationId": {
"name": "allocationId",
"in": "path",
"description": "Represents a bandwidth allocation instance",
"required": true,
"type": "string"
},
"Query.AppInstanceId": {
"name": "app_instance_id",
"in": "query",
"description": "A mobile edge application instance may use multiple app_instance_ids as an input parameter to query the bandwidth allocation of a list of mobile edge application instances. ",
"required": false,
"type": "array",
"items": {
"type": "string"
}
},
"Query.AppName": {
"name": "app_name",
"in": "query",
"description": "A mobile edge application instance may use multiple ser_names as an input parameter to query the bandwidth allocation of a list of mobile edge application instances. ",
"required": false,
"type": "array",
"items": {
"type": "string"
}
},
"Query.SessionId": {
"name": "session_id",
"in": "query",
"description": "A mobile edge application instance may use session_id as an input parameter to query the bandwidth allocation of a list of sessions. ",
"required": false,
"type": "array",
"items": {
"type": "string"
}
}
},
"paths": {
"/bw_allocations": {
"get": {
"description": "This method retrieves information about a list of bandwidthAllocation resources",
"produces": [
"application/json"
],
"parameters": [
{
"$ref": "#/parameters/Query.AppInstanceId"
},
{
"$ref": "#/parameters/Query.AppName"
},
{
"$ref": "#/parameters/Query.SessionId"
}
],
"responses": {
"200": {
"description": "Upon success, a response body containing an array of the bandwidthAllocations is returned.",
"schema": {
"required": [
"bwInfo"
],
"properties": {
"bwInfo": {
"$ref": "#/definitions/BwInfo"
}
}
}
},
"400": {
"description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"403": {
"description": "The operation is not allowed given the current status of the resource. More information should be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.",
"schema": {
"required": [
"ProblemDetails"
],
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"404": {
"description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
}
}
},
"post": {
"description": "This method is used to create a bandwidthAllocation resource.",
"produces": [
"application/json"
],
"parameters": [
{
"$ref": "#/parameters/Body.BwInfo"
}
],
"responses": {
"201": {
"description": "Upon success, the HTTP response shall include a \"Location\" HTTP header that contains the resource URI of the created resource.",
"schema": {
"required": [
"bwInfo"
],
"properties": {
"bwInfo": {
"$ref": "#/definitions/BwInfo"
}
}
}
},
"400": {
"description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"403": {
"description": "The operation is not allowed given the current status of the resource. More information should be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.",
"schema": {
"required": [
"ProblemDetails"
],
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"404": {
"description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
}
}
}
},
"/bw_allocations/{allocationId}": {
"get": {
"description": "This method retrieves information about a specific bandwidthAllocation resource. ",
"produces": [
"application/json"
],
"parameters": [
{
"$ref": "#/parameters/Path.AllocationId"
}
],
"responses": {
"200": {
"description": "It is used to indicate nonspecific success. The response body contains a representation of the resource.",
"schema": {
"required": [
"bwInfo"
],
"properties": {
"bwInfo": {
"$ref": "#/definitions/BwInfo"
}
}
}
},
"400": {
"description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"403": {
"description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure. required:\n - ProblemDetails\nproperties:\n ProblemDetails:\n $ref: '#/definitions/ProblemDetails'"
},
"404": {
"description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
}
}
},
"put": {
"description": "This method updates the information about a specific bandwidthAllocation resource. ",
"produces": [
"application/json"
],
"parameters": [
{
"$ref": "#/parameters/Path.AllocationId"
},
{
"$ref": "#/parameters/Body.BwInfo"
}
],
"responses": {
"200": {
"description": "Upon success, a response body containing data type describing the updated BwInfo is returned.",
"schema": {
"required": [
"bwInfo"
],
"properties": {
"bwInfo": {
"$ref": "#/definitions/BwInfo"
}
}
}
},
"400": {
"description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"403": {
"description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.",
"schema": {
"required": [
"ProblemDetails"
],
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"404": {
"description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"412": {
"description": "It is used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
}
}
},
"patch": {
"description": "This method updates the information about a specific bandwidthAllocation resource. ",
"produces": [
"application/json"
],
"parameters": [
{
"$ref": "#/parameters/Path.AllocationId"
},
{
"$ref": "#/parameters/Body.BwInfoDeltas"
}
],
"responses": {
"200": {
"description": "Upon success, a response body containing data type describing the updated BwInfo is returned.",
"schema": {
"required": [
"bwInfo"
],
"properties": {
"bwInfo": {
"$ref": "#/definitions/BwInfo"
}
}
}
},
"400": {
"description": "It is used to indicate that incorrect parameters were passed to the request. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"403": {
"description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.",
"schema": {
"required": [
"ProblemDetails"
],
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"404": {
"description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"412": {
"description": "It is used when a condition has failed during conditional requests, e.g. when using ETags to avoid write conflicts. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
}
}
},
"delete": {
"description": "Remove a specific bandwidthAllocation resource. DELETE method is typically used in \"Unregister from Bandwidth Management Service\" procedure",
"produces": [
"application/json"
],
"parameters": [
{
"$ref": "#/parameters/Path.AllocationId"
}
],
"responses": {
"204": {
"description": "No Content"
},
"403": {
"description": "The operation is not allowed given the current status of the resource. More information shall be provided in the \"detail\" attribute of the \"ProblemDetails\" structure.",
"schema": {
"required": [
"ProblemDetails"
],
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
},
"404": {
"description": "It is used when a client provided a URI that cannot be mapped to a valid resource URI. In the returned ProblemDetails structure, the \"detail\" attribute should convey more information about the error.",
"schema": {
"properties": {
"ProblemDetails": {
"$ref": "#/definitions/ProblemDetails"
}
}
}
}
}
}
}
},
"definitions": {
"ProblemDetails": {
"type": "object",
"properties": {
"type": {
"$ref": "#/definitions/Problem.type"
},
"title": {
"$ref": "#/definitions/Problem.title"
},
"status": {
"$ref": "#/definitions/Problem.status"
},
"detail": {
"$ref": "#/definitions/Problem.detail"
},
"instance": {
"$ref": "#/definitions/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"
},
"BwInfo": {
"description": "information of bandwidth resource",
"type": "object",
"required": [
"appInsId",
"requestType",
"fixedAllocation",
"allocationDirection"
],
"properties": {
"timeStamp": {
"$ref": "#/definitions/TimeStamp"
},
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"requestType": {
"$ref": "#/definitions/RequestType"
},
"sessionFilter": {
"$ref": "#/definitions/SessionFilter"
},
"fixedBWPriority": {
"$ref": "#/definitions/FixedBWPriority"
},
"fixedAllocation": {
"$ref": "#/definitions/FixedAllocation"
},
"allocationDirection": {
"$ref": "#/definitions/AllocationDirection"
}
}
},
"BwInfoDeltas": {
"description": "Conform to JSON merge patch format and processing rules specified IETF RFC 7396 [8], this type represents the attributes whose value are allowed to be updated with HTTP PATCH method in content format JSON",
"type": "object",
"properties": {
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"requestType": {
"$ref": "#/definitions/RequestType"
},
"sessionFilter": {
"$ref": "#/definitions/SessionFilter"
},
"fixedBWPriority": {
"$ref": "#/definitions/FixedBWPriority"
},
"fixedAllocation": {
"$ref": "#/definitions/FixedAllocation"
},
"allocationDirection": {
"$ref": "#/definitions/AllocationDirection"
}
}
},
"TimeStamp": {
"type": "object",
"required": [
"seconds",
"nanoSeconds"
],
"properties": {
"seconds": {
"$ref": "#/definitions/Seconds"
},
"nanoSeconds": {
"$ref": "#/definitions/NanoSeconds"
}
}
},
"AppInsId": {
"description": "Application instance identifier",
"type": "string"
},
"RequestType": {
"description": "Numeric value (0 - 255) corresponding to specific type of consumer",
"type": "string",
"enum": [
"APPLICATION_SPECIFIC_BW_ALLOCATION",
"SESSION_SPECIFIC_BW_ALLOCATION"
]
},
"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",
"type": "array",
"items": {
"type": "object",
"properties": {
"sourceIp": {
"$ref": "#/definitions/SourceIp"
},
"sourcePort": {
"$ref": "#/definitions/SourcePort"
},
"dstAddress": {
"$ref": "#/definitions/DstAddress"
},
"dstPort": {
"$ref": "#/definitions/DstPort"
},
"protocol": {
"$ref": "#/definitions/Protocol"
}
}
}
},
"FixedBWPriority": {
"description": "Indicates the allocation priority when dealing with several applications or sessions in parallel. Values are not defined in the present document",
"type": "string",
"enum": [
"not defined in the present document"
]
},
"FixedAllocation": {
"description": "Size of requested fixed BW allocation in [bps]",
"type": "string"
},
"AllocationDirection": {
"description": "The direction of the requested BW allocation",
"type": "string",
"enum": [
"00 = Downlink (towards the UE)",
"01 = Uplink (towards the application/session)",
"10 = Symmetrical"
]
},
"Seconds": {
"description": "The seconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC",
"type": "integer",
"format": "uint32"
},
"NanoSeconds": {
"description": "The nanoseconds part of the Time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC",
"type": "integer",
"format": "uint32"
},
"SourceIp": {
"description": "Source address identity of session (including range)",
"type": "string"
},
"SourcePort": {
"description": "Source port identity of session ",
"type": "array",
"items": {
"type": "string"
}
},
"DstAddress": {
"description": "Destination address identity of session (including range)",
"type": "string"
},
"DstPort": {
"description": "Destination port identity of session ",
"type": "array",
"items": {
"type": "string"
}
},
"Protocol": {
"description": "Protocol number",
"type": "string"
}
}
}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/DNS/ 0000775 0000000 0000000 00000000000 13540442377 0024265 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/DNS/README.md 0000664 0000000 0000000 00000000000 13540442377 0025532 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/FAIS/ 0000775 0000000 0000000 00000000000 13540442377 0024363 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/FAIS/README.md 0000664 0000000 0000000 00000000000 13540442377 0025630 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/README.md 0000664 0000000 0000000 00000000000 13540442377 0025106 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RLOC/ 0000775 0000000 0000000 00000000000 13540442377 0024400 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RLOC/README.md 0000664 0000000 0000000 00000000000 13540442377 0025645 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/ 0000775 0000000 0000000 00000000000 13540442377 0024414 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/README.md 0000664 0000000 0000000 00000000000 13540442377 0025661 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/RnisNotifications.robot 0000664 0000000 0000000 00000027305 13540442377 0031137 0 ustar 00root root 0000000 0000000 ''[Documentation] robot --outputdir ../../outputs ./RnisNotifications_BV.robot
... Test Suite to validate RNIS/Notification (RNIS) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/RadioNetworkInformationAPI.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
Library BuiltIn
Library OperatingSystem
Library MockServerLibrary
*** Test Cases ***
Cell change notification
[Documentation] TC_MEC_SRV_RNIS_001_OK
... 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.0.4, clause 6.4.2
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle 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
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}
RAB Establishment notification
[Documentation] TC_MEC_SRV_RNIS_002_OK
... 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.0.4, clause 6.4.3
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle 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
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}
RAB modification notification
[Documentation] TC_MEC_SRV_RNIS_003_OK
... 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.0.4, clause 6.4.4
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle 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
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}
RAB release notification
[Documentation] TC_MEC_SRV_RNIS_004_OK
... 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.0.4, clause 6.4.5
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle 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
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}
UE measurement notification
[Documentation] TC_MEC_SRV_RNIS_005_OK
... 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.0.4, clause 6.4.6
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle UE measurement notification
&{req}= Create Mock Request Matcher POST ${callback_uri}${callback_endpoint}/MeasRepUeNotification 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}
UE timing advance notification
[Documentation] TC_MEC_SRV_RNIS_006_OK
... 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.0.4, clause 6.4.7
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle UE 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
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}
UE carrier aggregation reconfiguration notification
[Documentation] TC_MEC_SRV_RNIS_007_OK
... 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.0.4, clause 6.4.8
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle UE 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
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}
S1-U bearer notification
[Documentation] TC_MEC_SRV_RNIS_008_OK
... 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.0.4, clause 6.4.10
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle 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
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}
UE Measurement notification
[Documentation] TC_MEC_SRV_RNIS_009_OK
... Check that the RNIS service sends an RNIS notification about 5G NR UE measurement report if the RNIS service has an associated subscription and the event is generated
... ETSI GS MEC 012 2.0.4, clause 6.4.11
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle UE Measurement notification
&{req}= Create Mock Request Matcher POST ${callback_uri}${callback_endpoint}/meas_rep_ue 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}
UE Measurement notification
[Documentation] TC_MEC_SRV_RNIS_010_OK
... Check that the RNIS service sends an RNIS notification on subscription expiration if the RNIS service has an associated subscription and the event is generated
... ETSI GS MEC 012 2.0.4, clause 6.4.9
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Should Be True ${PIC_RNIS_NOTIFICATIONS} == 1
${json}= Get File schemas/RadioNetworkInformationAPI.schema.json
Log Creating mock request and response to handle UE Measurement notification
&{req}= Create Mock Request Matcher POST ${callback_uri}${callback_endpoint} body_type="JSON_SCHEMA" body=${json}
&{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 ***
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/RnisQuery_BI_BO.robot 0000664 0000000 0000000 00000017751 13540442377 0030371 0 ustar 00root root 0000000 0000000 ''[Documentation] robot --outputdir ../../outputs ./RnisQuery_BI_BO.robot
... Test Suite to validate RNIS/Subscription (RNIS) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/RadioNetworkInformationAPI.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
Request RabInfo info using wrong parameters
[Documentation] TC_MEC_SRV_RNIS_016_BR
... Check that the RNIS service returns an error when the RAB information is requested with a malformatted message
... ETSI GS MEC 012 2.0.4, 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
Request RabInfo info using non existing cell id
[Documentation] TC_MEC_SRV_RNIS_016_BR
... Check that the RNIS service returns an error when the RAB information for a not existing element is requested
... ETSI GS MEC 012 2.0.4, 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
Request Plmn info using wrong parameters
[Documentation] TC_MEC_SRV_RNIS_017_BR
... Check that the RNIS service returns an error when the PLMN information is requested with a malformatted message
... ETSI GS MEC 012 2.0.4, 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
Request Plmn info using non existing application id
[Documentation] TC_MEC_SRV_RNIS_017_NF
... Check that the RNIS service returns an error when the PLMN information for a not existing element is requested
... ETSI GS MEC 012 2.0.4, 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
Request S1Bearer info using wrong parameters
[Documentation] TC_MEC_SRV_RNIS_018_BR
... Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message
... ETSI GS MEC 012 2.0.4, clause 7.4.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
Request S1Bearer info using non existing cell id
[Documentation] TC_MEC_SRV_RNIS_018_BR
... Check that the RNIS service returns an error when the S1 bearer information is requested with a malformatted message
... ETSI GS MEC 012 2.0.4, clause 7.4.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
Request L2Meas info using wrong parameters
[Documentation] TC_MEC_SRV_RNIS_019_BR
... Check that the RNIS service returns an error when the L2 measurements information is requested with a malformatted message
... ETSI GS MEC 012 2.0.4, 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
Request L2Meas info using non existing cell id
[Documentation] TC_MEC_SRV_RNIS_019_BR
... 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.0.4, 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
*** Keywords ***
Get RabInfo info using wrong parameters
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/rab_info?c_id=${C_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get RabInfo info using non existing cell id
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/rab_info?cell_id=${NOT_EXISTENT_CELL_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get Plmn info using wrong parameters
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/plmn_info?app_id=${APP_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get Plmn info using non existing application id
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/plmn_info?app_ins_id=${NOT_EXISTENT_APP_INS_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get S1Bearer info using wrong parameters
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/s1_bearer_info?c_id=${C_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get S1Bearer info using non existing cell id
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/s1_bearer_info?cell_id=${NOT_EXISTENT_CELL_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get L2Meas info using wrong parameters
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/layer2_meas?c_id=${C_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get L2Meas info using non existing cell id
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/layer2_meas?cell_id=${NOT_EXISTENT_CELL_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/RnisQuery_BV.robot 0000664 0000000 0000000 00000007117 13540442377 0030021 0 ustar 00root root 0000000 0000000 ''[Documentation] robot --outputdir ../../outputs ./RnisQuery_BV.robot
... Test Suite to validate RNIS/Subscription (RNIS) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/RadioNetworkInformationAPI.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
Request RabInfo info
[Documentation] TC_MEC_SRV_RNIS_016_OK
... Check that the RNIS service returns the RAB information when requested
... ETSI GS MEC 012 2.0.4, 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 RadioNetworkInformationAPI
Check RabInfo ${response['body']['RabInfo']}
Request Plmn info
[Documentation] TC_MEC_SRV_RNIS_017_OK
... Check that the RNIS service returns the PLMN information when requested
... ETSI GS MEC 012 2.0.4, 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 RadioNetworkInformationAPI
Check PlmnInfo ${response['body']['PlmnInfo']}
Request S1Bearer info
[Documentation] TC_MEC_SRV_RNIS_018_OK
... Check that the RNIS service returns the S1 bearer information
... ETSI GS MEC 012 2.0.4, clause 7.4.3.1
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo
Get S1Bearer info
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is RadioNetworkInformationAPI
#log ${response['body']}
Check S1BearerInfo ${response['body']['S1BearerInfo']}
Request L2Meas info
[Documentation] TC_MEC_SRV_RNIS_019_OK
... Check that the RNIS service returns the L2 measurements information
... ETSI GS MEC 012 2.0.4, clause 7.4.3.1
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/S1BearerInfo
Fail msg=Too many changes in JSON data description, not implemented
*** Keywords ***
Get RabInfo info
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/rab_info?cell_id=${CELL_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get Plmn info
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/plmn_info?app_ins_id=${APP_INS_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Get S1Bearer info
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/queries/s1_bearer_info?cell_id=${CELL_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
RnisSpecificSubscription_BI_BO.robot 0000664 0000000 0000000 00000005343 13540442377 0033331 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS ''[Documentation] robot --outputdir ../../outputs ./RnisSpecificSubscription_BI_BO.robot
... Test Suite to validate RNIS/Subscription (RNIS) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/RadioNetworkInformationAPI.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
Request RNIS subscription list using bad parameters
[Documentation] TC_MEC_SRV_RNIS_011_BR
... 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.0.4, clause 7.6.3.1
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/SubscriptionLinkList
Get RNIS subscription list with wrong parameter
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
Create RNIS subscription using bad parameters
[Documentation] TC_MEC_SRV_RNIS_012_BR
... 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.0.4, clause 7.6.3.4
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/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}}}
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
*** Keywords ***
Get RNIS subscription list with wrong parameter
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/subscriptions?subscription_type=wrongSubscriptionType
${output}= Output response
Set Suite Variable ${response} ${output}
Post RNIS subscription request
[Arguments] ${content}
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Post /exampleAPI/rni/v2/subscriptions ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
RnisSpecificSubscription_BV.robot 0000664 0000000 0000000 00000005436 13540442377 0032771 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS ''[Documentation] robot --outputdir ../../outputs ./RnisSpecificSubscription_BV.robot
... Test Suite to validate RNIS/Subscription (RNIS) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/RadioNetworkInformationAPI.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
Request RNIS subscription list
[Documentation] TC_MEC_SRV_RNIS_011_OK
... Check that the RNIS service sends the list of links to the relevant RNIS subscriptions when requested
... ETSI GS MEC 012 2.0.4, clause 7.6.3.1
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml#/definitions/SubscriptionLinkList
Get RNIS subscription list
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is RadioNetworkInformationAPI
Check Subscription ${response['body']['SubscriptionLinkList']} ${SUBSCRIPTION_VALUE}
Create RNIS subscription
[Documentation] TC_MEC_SRV_RNIS_012_OK
... Check that the RNIS service creates a new RNIS subscription
... ETSI GS MEC 012 2.0.4, clause 7.6.3.4
... Reference https://forge.etsi.org/gitlab/mec/gs012-rnis-api/blob/master/RniAPI.yaml
Post RNIS subscription request {"CellChangeSubscription": {"subscriptionType": "CELL_CHANGE", "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}}}
Check HTTP Response Status Code Is 201
Check HTTP Response Body Json Schema Is RadioNetworkInformationAPI
Check CellChangeSubscription ${response['body']['CellChangeSubscription']}
*** Keywords ***
Get RNIS subscription list
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/rni/v2/subscriptions?subscription_type=${SUBSCRIPTION_HREF_VALUE}
${output}= Output response
Set Suite Variable ${response} ${output}
Post RNIS subscription request
[Arguments] ${content}
Should Be True ${PIC_RNIS_SPECIFIC_SUBSCRIPTION} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Post /exampleAPI/rni/v2/subscriptions ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/environment/ 0000775 0000000 0000000 00000000000 13540442377 0026760 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/environment/pics.txt 0000664 0000000 0000000 00000000072 13540442377 0030456 0 ustar 00root root 0000000 0000000 *** Variables ***
${PIC_RNIS_SPECIFIC_SUBSCRIPTION} 1
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/environment/variables.txt0000664 0000000 0000000 00000002720 13540442377 0031472 0 ustar 00root root 0000000 0000000 *** 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
${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
${NOT_EXISTENT_CELL_ID} 0x8000099
${APP_INS_ID} 01
${APP_ID} 10
${NOT_EXISTENT_APP_INS_ID} 99
${response} {}
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
# 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_endpoint_error} /subs_404
${total_polling_time} 2 min
${polling_interval} 10 sec
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/resources/ 0000775 0000000 0000000 00000000000 13540442377 0026426 5 ustar 00root root 0000000 0000000 LocationAPI.robot 0000664 0000000 0000000 00000000655 13540442377 0031526 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/resources *** Settings ***
Resource ../environment/variables.txt
Resource LocationAPI.robot
#Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
Library JSONSchemaLibrary schemas/
*** Keywords ***
Check Location
[Arguments] ${value}
Log Check Location for userInfo element
Should be Equal ${response['body']['userInfo']['zoneId']} ${value}
Log Location OK
RadioNetworkInformationAPI.robot 0000664 0000000 0000000 00000003201 13540442377 0034562 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/resources *** Settings ***
Resource ../environment/variables.txt
Resource ../../../pics.txt
Resource ../../../GenericKeywords.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
Library JSONSchemaLibrary schemas/
*** Keywords ***
Check Subscription
[Arguments] ${received_value} ${expected_value}
Should Be Equal ${received_value['_links']['self']} ${LINKS_SELF}
:FOR ${item} IN @{received_value['subscription']}
\ Exit For Loop If ${item} == ${expected_value}
Log Item found ${item}
[return] ${item}
Check CellChangeSubscription
[Arguments] ${received_value}
Should Be Equal ${received_value['_links']['self']} ${LINKS_SELF}
Check RabInfo
[Arguments] ${received_value}
log ${received_value}
Should Be Equal ${received_value['appInsId']} ${APP_INS_ID}
Should Not Contain ${received_value['requestId']} ""
Should Be Equal ${received_value['cellUserInfo'][0]['ecgi']['cellId']} ${CELL_ID}
# TODO How to check the presence of a field
Check PlmnInfo
[Arguments] ${received_value}
log ${received_value}
Should Be Equal ${received_value['appInsId']} ${APP_INS_ID}
Should Not Contain ${received_value['plmn'][0]['mcc']} ""
Should Not Contain ${received_value['plmn'][0]['mnc']} ""
# TODO How to check the presence of a field
Check S1BearerInfo
[Arguments] ${received_value}
log ${received_value}
#Should Not Contain ${received_value['s1UeInfo'][0]['ecgi']['cellId']} ${CELL_ID}
# TODO How to check the presence of a field
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/schemas/ 0000775 0000000 0000000 00000000000 13540442377 0026037 5 ustar 00root root 0000000 0000000 RadioNetworkInformationAPI.schema.json 0000664 0000000 0000000 00000054113 13540442377 0035266 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/RNIS/schemas {
"ProblemDetails": {
"type": "object",
"properties": {
"type": {
"$ref": "#/definitions/Problem.type"
},
"title": {
"$ref": "#/definitions/Problem.title"
},
"status": {
"$ref": "#/definitions/Problem.status"
},
"detail": {
"$ref": "#/definitions/Problem.detail"
},
"instance": {
"$ref": "#/definitions/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"
},
"PlmnInfo": {
"type": "object",
"required": [
"appInsId",
"plmn"
],
"properties": {
"timeStamp": {
"$ref": "#/definitions/TimeStamp"
},
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"plmn": {
"type": "array",
"items": {
"$ref": "#/definitions/Plmn"
}
}
}
},
"RabInfo": {
"type": "object",
"required": [
"appInsId",
"requestId"
],
"properties": {
"timeStamp": {
"$ref": "#/definitions/TimeStamp"
},
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"requestId": {
"$ref": "#/definitions/RequestId"
},
"cellUserInfo": {
"type": "array",
"items": {
"$ref": "#/definitions/CellUserInfo"
}
}
}
},
"S1BearerInfo": {
"type": "object",
"required": [
"s1UeInfo"
],
"properties": {
"timeStamp": {
"$ref": "#/definitions/TimeStamp"
},
"s1UeInfo": {
"type": "array",
"items": {
"$ref": "#/definitions/S1UeInfo"
}
}
}
},
"S1UeInfo": {
"type": "object",
"required": [
"ecgi",
"s1BearerInfoDetailed"
],
"properties": {
"tempUeId": {
"type": "array",
"items": {
"$ref": "#/definitions/TempUeId"
}
},
"associateId": {
"type": "array",
"items": {
"$ref": "#/definitions/AssociateId"
}
},
"ecgi": {
"type": "array",
"items": {
"$ref": "#/definitions/Ecgi"
}
},
"s1BearerInfoDetailed": {
"type": "array",
"items": {
"$ref": "#/definitions/S1BearerInfoDetailed"
}
}
},
"description": "The information on users per cell."
},
"S1BearerInfoDetailed": {
"type": "object",
"required": [
"erabId",
"enbInfo",
"sGwInfo"
],
"properties": {
"erabId": {
"$ref": "#/definitions/ErabId"
},
"enbInfo": {
"$ref": "#/definitions/S1EnbInfo"
},
"sGwInfo": {
"$ref": "#/definitions/SGwInfo"
}
},
"description": "Information on UEs in the specific cell."
},
"ErabId": {
"type": "integer",
"format": "int32",
"description": "The element that uniquely identifies a S1 bearer for a specific UE, as defined in ETSI TS 136 413",
"example": 10
},
"TempUeId": {
"type": "object",
"required": [
"mmec",
"mtmsi"
],
"properties": {
"mmec": {
"$ref": "#/definitions/Mmec"
},
"mtmsi": {
"$ref": "#/definitions/Mtmsi"
}
}
},
"Mmec": {
"type": "string",
"description": "MMEC as defined in ETSI TS 136 413",
"example": "0"
},
"Mtmsi": {
"type": "string",
"description": "M-TMSI as defined in ETSI TS 136 413",
"example": "1234"
},
"S1EnbInfo": {
"type": "object",
"required": [
"ipAddress",
"tunnelId"
],
"properties": {
"ipAddress": {
"type": "string",
"description": "eNB transport layer address of this S1 bearer.",
"example": "192.0.2.0"
},
"tunnelId": {
"type": "string",
"description": "eNB GTP-U TEID of this S1 bearer.",
"example": "1111"
}
}
},
"SGwInfo": {
"type": "object",
"required": [
"ipAddress",
"tunnelId"
],
"properties": {
"ipAddress": {
"type": "string",
"description": "SGW transport layer address of this S1 bearer.",
"example": "192.0.2.1"
},
"tunnelId": {
"type": "string",
"description": "SGW GTP-U TEID of this S1 bearer.",
"example": "2222"
}
}
},
"TimeStamp": {
"type": "object",
"required": [
"nanoSeconds",
"seconds"
],
"properties": {
"seconds": {
"type": "integer",
"format": "uint32",
"description": "The seconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC",
"example": 1577836800
},
"nanoSeconds": {
"type": "integer",
"format": "uint32",
"description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC",
"example": 0
}
}
},
"AppInsId": {
"type": "string",
"format": "string",
"description": "Unique identifier for the mobile edge application instance",
"example": "01"
},
"RequestId": {
"type": "string",
"format": "string",
"description": "Unique identifier allocated by the Mobile Edge application for the Information request.",
"example": "01"
},
"CellUserInfo": {
"type": "object",
"required": [
"ecgi",
"ueInfo"
],
"properties": {
"ecgi": {
"$ref": "#/definitions/Ecgi"
},
"ueInfo": {
"type": "array",
"items": {
"$ref": "#/definitions/UeInfo"
}
}
},
"description": "The information on users per cell."
},
"Ecgi": {
"type": "object",
"required": [
"cellId",
"plmn"
],
"properties": {
"plmn": {
"$ref": "#/definitions/Plmn"
},
"cellId": {
"$ref": "#/definitions/CellId"
}
},
"description": "E-UTRAN CelI Global Identifier as defined in 3GPP TS 36.413"
},
"Plmn": {
"type": "object",
"required": [
"mcc",
"mnc"
],
"properties": {
"mcc": {
"type": "string",
"format": "string",
"description": "The Mobile Country Code part of PLMN Identity as defined in 3GPP TS 36.413",
"example": "001"
},
"mnc": {
"type": "string",
"format": "string",
"description": "The Mobile Network Code part of PLMN Identity as defined in 3GPP TS 36.413",
"example": "01"
}
}
},
"CellId": {
"type": "string",
"format": "binary",
"description": "The E-UTRAN Cell Identity as a bit string (size (28)), as defined in 3GPP TS 36.413",
"example": "0x800000A"
},
"UeInfo": {
"type": "object",
"required": [
"erabInfo"
],
"properties": {
"associateId": {
"type": "array",
"items": {
"$ref": "#/definitions/AssociateId"
}
},
"erabInfo": {
"type": "array",
"items": {
"$ref": "#/definitions/ErabQosParameters"
}
}
},
"description": "Information on UEs in the specific cell."
},
"AssociateId": {
"type": "object",
"required": [
"type",
"value"
],
"properties": {
"type": {
"type": "string",
"enum": [
"RESERVED",
"UE_IPV4_ADDRESS",
"UE_IPV6_ADDRESS",
"NATED_IP_ADDRESS",
"GTP_TEID"
],
"description": "Numeric value (0-255) corresponding to specified type of identifier",
"example": "UE_IPV4_ADDRESS"
},
"value": {
"type": "string",
"description": "Value for the identifier",
"example": "192.0.0.2"
}
}
},
"ErabQosParameters": {
"type": "object",
"properties": {
"qci": {
"$ref": "#/definitions/Qci"
},
"qosInformation": {
"type": "array",
"items": {
"$ref": "#/definitions/QosInformation"
}
}
}
},
"Qci": {
"type": "integer",
"format": "int32",
"description": "QoS Class Identifier as defined in TS 23.401",
"example": 7
},
"QosInformation": {
"type": "object",
"required": [
"erabGbrDl",
"erabGbrUl",
"erabMbrDl",
"erabMbrUl"
],
"properties": {
"erabMbrDl": {
"type": "integer",
"format": "int32",
"description": "This IE indicates the maximum downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.",
"example": 10
},
"erabMbrUl": {
"type": "integer",
"format": "int32",
"description": "This IE indicates the maximum uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.",
"example": 10
},
"erabGbrDl": {
"type": "integer",
"format": "int32",
"description": "This IE indicates the guaranteed downlink E-RAB Bit Rate as defined in TS 23.401 for this bearer.",
"example": 10
},
"erabGbrUl": {
"type": "integer",
"format": "int32",
"description": "This IE indicates the guaranteed uplink E-RAB Bit Rate as defined in TS 23.401 for this bearer.",
"example": 10
}
}
},
"SubscriptionLinkList": {
"type": "object",
"required": [
"_links"
],
"properties": {
"_links": {
"$ref": "#/definitions/Link"
},
"subscription": {
"type": "array",
"items": {
"$ref": "#/definitions/Subscription"
}
}
}
},
"MeasRepUeSubscriptionPost": {
"type": "object",
"required": [
"callbackReference",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocTri"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"MeasRepUeSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocTri"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"S1BearerSubscriptionPost": {
"type": "object",
"required": [
"callbackReference",
"s1BearerSubscriptionCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"eventType": {
"$ref": "#/definitions/EventType"
},
"s1BearerSubscriptionCriteria": {
"$ref": "#/definitions/S1BearerSubscriptionCriteria"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"S1BearerSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"s1BearerSubscriptionCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"eventType": {
"$ref": "#/definitions/EventType"
},
"s1BearerSubscriptionCriteria": {
"$ref": "#/definitions/S1BearerSubscriptionCriteria"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"RabEstSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocQci"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"RabEstSubscriptionPost": {
"type": "object",
"required": [
"callbackReference",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocQci"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"RabModSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocQci"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"RabModSubscriptionPost": {
"type": "object",
"required": [
"callbackReference",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocQci"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"RabRelSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocQci"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"RabRelSubscriptionPost": {
"type": "object",
"required": [
"callbackReference",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocQci"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"CaReConfSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssoc"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"CaReConfSubscriptionPost": {
"type": "object",
"required": [
"callbackReference",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssoc"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"CellChangeSubscriptionPost": {
"type": "object",
"required": [
"subscriptionType",
"callbackReference",
"filterCriteria"
],
"properties": {
"subscriptionType": {
"$ref": "#/definitions/SubscriptionType"
},
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocHo"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"CellChangeSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssocHo"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"MeasTaSubscriptionPost": {
"type": "object",
"required": [
"callbackReference",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssoc"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"MeasTaSubscription": {
"type": "object",
"required": [
"callbackReference",
"_links",
"filterCriteria"
],
"properties": {
"callbackReference": {
"$ref": "#/definitions/CallbackReference"
},
"_links": {
"$ref": "#/definitions/Link"
},
"filterCriteria": {
"$ref": "#/definitions/FilterCriteriaAssoc"
},
"expiryDeadline": {
"$ref": "#/definitions/TimeStamp"
}
}
},
"CallbackReference": {
"type": "string",
"format": "uri",
"description": "URL selected by the Mobile Edge application to receive notifications on the subscribed RNIS information.",
"example": "http://meAppClient.example.com/rni/v1/"
},
"Link": {
"type": "object",
"properties": {
"self": {
"$ref": "#/definitions/LinkType"
}
},
"description": "List of hyperlinks related to the resource"
},
"LinkType": {
"description": "URI referring to a resource",
"type": "string",
"format": "uri",
"example": "http://meAppClient.example.com/rni/v1/"
},
"Subscription": {
"type": "object",
"required": [
"href",
"subscriptionType"
],
"properties": {
"href": {
"$ref": "#/definitions/LinkType"
},
"subscriptionType": {
"$ref": "#/definitions/SubscriptionType"
}
},
"description": "A link to a subscription."
},
"SubscriptionType": {
"type": "string",
"description": "Numeric value corresponding to specified type of subscription.",
"enum": [
"RESERVED",
"CELL_CHANGE",
"RAB_ESTABLISHMENT",
"RAB_MODIFICATION",
"RAB_RELEASE",
"MEAS_REPORT_UE",
"MEAS_TIMING_ADVANCE",
"CA_RECONF",
"S1_BEARE",
"WRONG_PARAMETER"
],
"example": "CELL_CHANGE"
},
"FilterCriteriaAssoc": {
"type": "object",
"properties": {
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"associateId": {
"$ref": "#/definitions/AssociateId"
},
"plmn": {
"$ref": "#/definitions/Plmn"
},
"cellId": {
"$ref": "#/definitions/CellId"
}
},
"description": "List of filtering criteria for the subscription."
},
"FilterCriteriaAssocQci": {
"type": "object",
"properties": {
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"associateId": {
"$ref": "#/definitions/AssociateId"
},
"plmn": {
"$ref": "#/definitions/Plmn"
},
"cellId": {
"$ref": "#/definitions/CellId"
},
"qci": {
"$ref": "#/definitions/Qci"
}
},
"description": "List of filtering criteria for the subscription."
},
"FilterCriteriaAssocHo": {
"type": "object",
"properties": {
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"associateId": {
"$ref": "#/definitions/AssociateId"
},
"plmn": {
"$ref": "#/definitions/Plmn"
},
"cellId": {
"$ref": "#/definitions/CellId"
},
"hoStatus": {
"$ref": "#/definitions/HoStatus"
}
},
"description": "List of filtering criteria for the subscription."
},
"FilterCriteriaAssocTri": {
"type": "object",
"properties": {
"appInsId": {
"$ref": "#/definitions/AppInsId"
},
"associateId": {
"$ref": "#/definitions/AssociateId"
},
"plmn": {
"$ref": "#/definitions/Plmn"
},
"cellId": {
"$ref": "#/definitions/CellId"
},
"trigger": {
"$ref": "#/definitions/Trigger"
}
},
"description": "List of filtering criteria for the subscription."
},
"S1BearerSubscriptionCriteria": {
"type": "object",
"properties": {
"associateId": {
"$ref": "#/definitions/AssociateId"
},
"plmn": {
"$ref": "#/definitions/Plmn"
},
"cellId": {
"$ref": "#/definitions/CellId"
},
"erabId": {
"$ref": "#/definitions/ErabId"
}
},
"description": "List of filtering criteria for the subscription."
},
"HoStatus": {
"type": "string",
"description": "Description of the subscribed to event",
"enum": [
"RESERVED",
"IN_PREPARATION",
"IN_EXECUTION",
"COMPLETED",
"REJECTED",
"CANCELLED"
],
"example": "COMPLETED"
},
"EventType": {
"type": "string",
"description": "Description of the subscribed event.",
"enum": [
"RESERVED",
"S1_BEARER_ESTABLISH",
"S1_BEARER_MODIFY",
"S1_BEARER_RELEASE"
],
"example": "S1_BEARER_ESTABLISH"
},
"Trigger": {
"type": "string",
"description": "Unique identifier for the mobile edge application instance",
"enum": [
"NOT_AVAILABLE",
"PERIODICAL_REPORT_STRONGEST_CELLS",
"PERIODICAL_REPORT_STRONGEST_CELLS_FOR_SON",
"PERIODICAL_REPORT_CGI",
"EVENT_A1",
"EVENT_A2",
"EVENT_A3",
"EVENT_A4",
"EVENT_A5",
"EVENT_A6",
"EVENT_B1",
"EVENT_B2",
"EVENT_C1",
"EVENT_C2",
"EVENT_W1",
"EVENT_W2",
"EVENT_W3"
],
"example": "EVENT_A3"
}
}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/SAQ/ 0000775 0000000 0000000 00000000000 13540442377 0024265 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/SAQ/README.md 0000664 0000000 0000000 00000000000 13540442377 0025532 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/SRVSUB/ 0000775 0000000 0000000 00000000000 13540442377 0024665 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/SRVSUB/README.md 0000664 0000000 0000000 00000000000 13540442377 0026132 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/TIME/ 0000775 0000000 0000000 00000000000 13540442377 0024377 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/TIME/README.md 0000664 0000000 0000000 00000000000 13540442377 0025644 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/TRAF/ 0000775 0000000 0000000 00000000000 13540442377 0024375 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/TRAF/README.md 0000664 0000000 0000000 00000000000 13540442377 0025642 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/TRANS/ 0000775 0000000 0000000 00000000000 13540442377 0024530 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/TRANS/README.md 0000664 0000000 0000000 00000000000 13540442377 0025775 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEAREASUB/ 0000775 0000000 0000000 00000000000 13540442377 0025155 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEAREASUB/README.md 0000664 0000000 0000000 00000000000 13540442377 0026422 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEDISTLOOK/ 0000775 0000000 0000000 00000000000 13540442377 0025323 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEDISTLOOK/README.md 0000664 0000000 0000000 00000000000 13540442377 0026570 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEDISTSUB/ 0000775 0000000 0000000 00000000000 13540442377 0025210 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEDISTSUB/README.md 0000664 0000000 0000000 00000000000 13540442377 0026455 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEINFLOOK/ 0000775 0000000 0000000 00000000000 13540442377 0025174 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEINFLOOK/README.md 0000664 0000000 0000000 00000000000 13540442377 0026441 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEINFSUB/ 0000775 0000000 0000000 00000000000 13540442377 0025061 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UEINFSUB/README.md 0000664 0000000 0000000 00000000000 13540442377 0026326 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UELOC/ 0000775 0000000 0000000 00000000000 13540442377 0024510 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UELOC/README.md 0000664 0000000 0000000 00000000000 13540442377 0025755 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UELOCSUB/ 0000775 0000000 0000000 00000000000 13540442377 0025062 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UELOCSUB/README.md 0000664 0000000 0000000 00000000000 13540442377 0026327 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/ 0000775 0000000 0000000 00000000000 13540442377 0024506 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/PlatUeIdentity.robot 0000664 0000000 0000000 00000017140 13540442377 0030464 0 ustar 00root root 0000000 0000000 ''[Documentation] robot --outputdir ../../outputs ./PlatUeIdentity.robot
... Test Suite to validate UE Identity Tag (UETAG) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../pics.txt
Resource ../../GenericKeywords.robot
Resource resources/UEidentityAPI.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
Request UE Identity Tag information
[Documentation] TC_MEC_SRV_UETAG_001_OK
... Check that the IUT responds with the information on a UE Identity tag when queried by a MEC Application
... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.1
... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo
Get UE Identity Tag information
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is ueIdentityTagInfo
Check Result Contains ${response['body']['ueIdentityTagInfo']['ueIdentityTags']} ueIdentityTag ${UE_IDENTITY_TAG}
Request UE Identity Tag information using bad parameters
[Documentation] TC_MEC_SRV_UETAG_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 014 V1.1.1, clause 7.3.3.1
... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo
Get UE Identity Tag information using bad parameters
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
Request UE Identity Tag information using non-existent application instance
[Documentation] TC_MEC_SRV_UETAG_001_NF
... Check that the IUT responds with an error when a request for an URI that cannot be mapped to a valid resource URI is sent by a MEC Application
... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.1
... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo
Get UE Identity Tag information using non-existent application instance
Check HTTP Response Status Code Is 404
Check ProblemDetails 404
Register an UE Identity Tag
[Documentation] TP_MEC_SRV_UETAG_002_OK
... 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
Update an UE Identity Tag {"ueIdentityTags":[{"ueIdentityTag":"${UE_IDENTITY_TAG}","state":"REGISTERED"}]}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is UeIdentityTagInfo
Log Checking Postcondition
Check User Identity Tag state ${UE_IDENTITY_TAG} REGISTERED
Register an UE Identity Tag using invalid state
[Documentation] TP_MEC_SRV_UETAG_002_BR
... Check that the IUT responds with an error when an unauthorised request is sent by a MEC Application
... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.2
... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo
Update an UE Identity Tag using invalid state {"ueIdentityTags":[{"ueIdentityTag":"${UE_IDENTITY_TAG}","state":"INVALID_STATE"}]}
Check HTTP Response Status Code Is 400
Check ProblemDetails 400
Unregister an UE Identity Tag already in unregistered state
[Documentation] TP_MEC_SRV_UETAG_002_PF
... Check that the IUT responds with ProblemDetails on information an invalid URI
... Reference ETSI GS MEC 014 V1.1.1, clause 7.3.3.2
... Reference https://forge.etsi.org/gitlab/mec/gs014-ue-identity-api/blob/master/UEidentityAPI.yaml#/definitions/UeIdentityTagInfo
Update an UE Identity Tag using a not applicable valid state {"ueIdentityTags":[{"ueIdentityTag":"${UE_IDENTITY_TAG_INVALID_STATE}","state":"UNREGISTERED"}]}
Check HTTP Response Status Code Is 412
Check ProblemDetails 412
*** Keywords ***
Get UE Identity Tag information
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTag=${UE_IDENTITY_TAG}
${output}= Output response
Set Suite Variable ${response} ${output}
Get UE Identity Tag information using bad parameters
# FIXME Which IE protocol should be invalid?
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTagERROR=${UE_IDENTITY_TAG}
${output}= Output response
Set Suite Variable ${response} ${output}
Get UE Identity Tag information using non-existent application instance
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/ui/v1/${NON_EXISTENT_APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTag=${UE_IDENTITY_TAG}
${output}= Output response
Set Suite Variable ${response} ${output}
Update an UE Identity Tag
[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}"}
## As far as I understood, we are not checking preconditions.
# Preamble: Check that the user tag is not registered
## Check User Identity Tag state ${UE_IDENTITY_TAG} UNREGISTERED
log ${content}
Put /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Update an UE Identity Tag using invalid state
[Arguments] ${content}
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
# Test Body: Register the tag user and check that the IUT has registered the tag user
Put /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
Update an UE Identity Tag using a not applicable valid state
[Arguments] ${content}
Should Be True ${PIC_MEC_PLAT} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
# Test Body: Register the tag user and check that the IUT has registered the tag user
Put /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info ${content}
${output}= Output response
Set Suite Variable ${response} ${output}
# TODO Check ProblemDetails
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/README.md 0000664 0000000 0000000 00000000000 13540442377 0025753 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/environment/ 0000775 0000000 0000000 00000000000 13540442377 0027052 5 ustar 00root root 0000000 0000000 variables.txt 0000664 0000000 0000000 00000001074 13540442377 0031506 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/environment *** 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
${ZONE_ID} zone01
${APP_INSTANCE_ID} appInst01
${NON_EXISTENT_APP_INSTANCE_ID} appInst99
${UE_IDENTITY_TAG} UeTagA
${UE_IDENTITY_TAG_INVALID_STATE} UeTagC
${response} {}
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/resources/ 0000775 0000000 0000000 00000000000 13540442377 0026520 5 ustar 00root root 0000000 0000000 LocationAPI.robot 0000664 0000000 0000000 00000000655 13540442377 0031620 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/resources *** Settings ***
Resource ../environment/variables.txt
Resource LocationAPI.robot
#Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
Library JSONSchemaLibrary schemas/
*** Keywords ***
Check Location
[Arguments] ${value}
Log Check Location for userInfo element
Should be Equal ${response['body']['userInfo']['zoneId']} ${value}
Log Location OK
UEidentityAPI.robot 0000664 0000000 0000000 00000002475 13540442377 0032135 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/resources *** Settings ***
Resource ../environment/variables.txt
Resource ../../../pics.txt
Resource ../../../GenericKeywords.robot
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
Library JSONSchemaLibrary schemas/
*** Keywords ***
Check User Identity Tag state
[Arguments] ${ue_identity_tag} ${state}
Should Be True ${PIC_MEC_PLAT} 1
Should Be True ${PIC_SERVICES} 1
Log Check ueIdentityTag state ${state}
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
Set Headers {"Content-Length":"0"}
Get /exampleAPI/ui/v1/${APP_INSTANCE_ID}/ue_identity_tag_info?ueIdentityTag=${ue_identity_tag}
${output}= Output response
Set Suite Variable ${response} ${output}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is ueIdentityTagInfo
#Log Check ueIdentityTagsList for ${UE_IDENTITY_TAG} element
${result}= Should Be Present In Json List ${response['body']['ueIdentityTagInfo']['ueIdentityTags']} ueIdentityTag ${UE_IDENTITY_TAG}
#Log ${UE_IDENTITY_TAG} found with state ${result}
Should Be Equal ${result}[state] ${state}
[return] ${state}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/schemas/ 0000775 0000000 0000000 00000000000 13540442377 0026131 5 ustar 00root root 0000000 0000000 UeIdentityTagInfo.schema.json 0000664 0000000 0000000 00000005136 13540442377 0033544 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETAG/schemas {
"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"
},
"UeIdentityTagInfo": {
"description": "information of UE identity tag used in UE Identity feature",
"type": "object",
"required": [
"ueIdentityTags"
],
"properties": {
"ueIdentityTags": {
"$ref": "#/components/schemas/UeIdentityTags"
}
}
},
"UeIdentityTags": {
"description": "1 to N tags presented by a ME Application instance to a ME Platform",
"type": "array",
"items": {
"required": [
"ueIdentityTag",
"state"
],
"properties": {
"ueIdentityTag": {
"$ref": "#/components/schemas/UeIdentityTag"
},
"state": {
"$ref": "#/components/schemas/State"
}
}
}
},
"UeIdentityTag": {
"description": "Specific tag presented by a ME Application instance to a ME Platform",
"type": "string",
"example": "UeTagA"
},
"State": {
"description": "Status of the resource ueIdentityTagInfo",
"type": "string",
"enum": [
"UNREGISTERED",
"REGISTERED"
],
"example": "REGISTERED"
}
}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETRACKSUB/ 0000775 0000000 0000000 00000000000 13540442377 0025311 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/SRV/UETRACKSUB/README.md 0000664 0000000 0000000 00000000000 13540442377 0026556 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/TODO.md 0000664 0000000 0000000 00000014514 13540442377 0024263 0 ustar 00root root 0000000 0000000 # MEC Testing Framework in Robo Framework - TODO list
## Introduction
This file provides the list of the TODOs related to the STF 569.
## MEO
###
### UEAPPCTX
ETSI GS MEC 016 V2.1.1
https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPCTX/SysUeAppsContext.tplan2
TODO
### UEAPPS
ETSI GS MEC 016 V2.1.1
https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/MEO/UEAPPS/SysUeApplications.tplan2
- TC_MEC_SRV_BWA_001_OK To be tested
- TC_MEC_SRV_BWA_001_BR To be tested
- TC_MEC_SRV_BWA_002_OK To be tested
- TC_MEC_SRV_BWA_002_BR To be tested
- TC_MEC_SRV_BWA_003_OK To be tested
- TC_MEC_SRV_BWA_003_NF To be tested
- TC_MEC_SRV_BWA_004_OK To be tested
- TC_MEC_SRV_BWA_004_BR To be tested
- TC_MEC_SRV_BWA_004_NF To be tested
- TC_MEC_SRV_BWA_004_PF To be tested
- TC_MEC_SRV_BWA_005_OK To be tested
- TC_MEC_SRV_BWA_005_BR To be tested
- TC_MEC_SRV_BWA_005_NF To be tested
- TC_MEC_SRV_BWA_005_PF To be tested
- TC_MEC_SRV_BWA_006_OK To be tested
- TC_MEC_SRV_BWA_006_NF To be tested
## SRV
### AMS
### APPSAQ
### APPSUB
### BWA
Draft ETSI GS MEC 015 1.1.1
https://forge.etsi.org/rep/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/BWA/PlatBandwidthManager.tplan2
### DNS
### FAIS
### RLOC
### RNIS
Draft ETSI GS MEC 012 2.0.4
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BV.tplan2
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisSpecificSubscription_BI_BO.tplan2
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BV.tplan2
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/RNIS/RnisQuery_BI_BO.tplan2
- TC_MEC_SRV_RNIS_001_OK To be tested
- TC_MEC_SRV_RNIS_002_OK To be tested
- TC_MEC_SRV_RNIS_003_OK To be tested
- TC_MEC_SRV_RNIS_004_OK To be tested
- TC_MEC_SRV_RNIS_005_OK To be tested
- TC_MEC_SRV_RNIS_006_OK To be tested
- TC_MEC_SRV_RNIS_007_OK To be tested
- TC_MEC_SRV_RNIS_008_OK To be tested
- TC_MEC_SRV_RNIS_009_OK To be tested
- TC_MEC_SRV_RNIS_010_OK To be tested
- TC_MEC_SRV_RNIS_011_OK To be tested
- TC_MEC_SRV_RNIS_012_OK To be tested
- TC_MEC_SRV_RNIS_011_BR To be tested
- TC_MEC_SRV_RNIS_012_BR To be tested
- TC_MEC_SRV_RNIS_016_OK To be tested
- TC_MEC_SRV_RNIS_016_BR To be tested
- TC_MEC_SRV_RNIS_016_NF To be tested
- TC_MEC_SRV_RNIS_017_OK To be tested
- TC_MEC_SRV_RNIS_017_BR To be tested
- TC_MEC_SRV_RNIS_017_NF To be tested
- TC_MEC_SRV_RNIS_018_OK To be tested
- TC_MEC_SRV_RNIS_018_BR To be tested
- TC_MEC_SRV_RNIS_018_NF To be tested
- TC_MEC_SRV_RNIS_019_OK To be tested
- TC_MEC_SRV_RNIS_019_BR To be tested
- TC_MEC_SRV_RNIS_019_NF To be tested
### SAQ
### SRVSUB
### TIME
### TRAF
### TRANS
### UEAREASUB
### UEDISTLOOK
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTSUB/PlatUeDistanceSubscription.tplan2
TODO TerminalDistance data structure not found
### UEDISTSUB
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEDISTSUB/PlatUeDistanceSubscription.tplan2
TODO DistanceNotificationSubscription data structure not found
### UEINFLOOK
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFLOOK/PlatUeInformationLookup.tplan2
### UEINFSUB
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UEINFSUB/PlatUeInformationSubscription.tplan2
### UELOC
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/MEC-tests/blob/master/Test%20Purposes/SRV/UELOC/PlatUeLocationLookup.tplan2
### UETAG
ETSI GS MEC 014 V1.1.1 (2018-02)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/master/Test%20Purposes/SRV/UETAG/PlatUeIdentity.tplan2
- TC_MEC_SRV_UETAG_001_OK To be tested
- TC_MEC_SRV_UETAG_001_BR To be tested
- TC_MEC_SRV_UETAG_001_NF To be tested
- TC_MEC_SRV_UETAG_002_OK To be tested
- TC_MEC_SRV_UETAG_002_BR To be tested
- TC_MEC_SRV_UETAG_002_NF Done
- TC_MEC_SRV_UETAG_002_PF Done
### UETRACKSUB
Draft ETSI GS MEC 013 V2.0.3 (2018-10)
https://forge.etsi.org/gitlab/mec/gs032p2-test-purposes/blob/remove-401s/Test%20Purposes/SRV/UETRACKSUB/PlatUeTrackingSubscription.tplan2
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/examples/ 0000775 0000000 0000000 00000000000 13540442377 0025005 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/examples/emptyschema/ 0000775 0000000 0000000 00000000000 13540442377 0027324 5 ustar 00root root 0000000 0000000 EmptySchema.robot 0000664 0000000 0000000 00000000466 13540442377 0032541 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/examples/emptyschema *** Settings ***
Library BuiltIn
Library OperatingSystem
Library JSONSchemaLibrary schemas/
*** Test Cases ***
Testing Empty Schema Validation
${object}= Get File jsons/test.json
${json}= Evaluate json.loads('''${object}''') json
Validate Json EmptySchema.json ${json}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/examples/emptyschema/jsons/ 0000775 0000000 0000000 00000000000 13540442377 0030460 5 ustar 00root root 0000000 0000000 test.json 0000664 0000000 0000000 00000000111 13540442377 0032244 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/examples/emptyschema/jsons {
"test": "empty schema test",
"result": "should work with this json"
} gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/examples/emptyschema/schemas/ 0000775 0000000 0000000 00000000000 13540442377 0030747 5 ustar 00root root 0000000 0000000 EmptySchema.json 0000664 0000000 0000000 00000000104 13540442377 0033775 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/examples/emptyschema/schemas {
"type": "object",
"properties": {
},
"required": []
} gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/outputs/ 0000775 0000000 0000000 00000000000 13540442377 0024712 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/outputs/README.md 0000664 0000000 0000000 00000000001 13540442377 0026160 0 ustar 00root root 0000000 0000000
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/pics.txt 0000664 0000000 0000000 00000000305 13540442377 0024664 0 ustar 00root root 0000000 0000000 *** Variables ***
${PIC_MEC_PLAT} 1
${PIC_SERVICES} 1
${PIC_RNIS_QUERY} 1
${PIC_RNIS_SPECIFIC_SUBSCRIPTION} 1
${PIC_RNIS_NOTIFICATIONS} 1
${PIC_AMS} 1
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/red.xml 0000664 0000000 0000000 00000002033 13540442377 0024461 0 ustar 00root root 0000000 0000000
2
WORKSPACE
true
1024
true
true
false
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/requirements.txt 0000664 0000000 0000000 00000000453 13540442377 0026455 0 ustar 00root root 0000000 0000000 ###### List of required python libraries ######
## To install the libraries, use:
# pip -r requirements.txt
robotframework==3.1
RESTinstance==1.0.0rc4
robotframework-dependencylibrary==1.0.0.post1
robotframework-jsonlibrary==0.3
robotframework-jsonschemalibrary==1.0
robotframework-requests==0.5.0
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/schemas/ 0000775 0000000 0000000 00000000000 13540442377 0024612 5 ustar 00root root 0000000 0000000 ServiceInfoList.schema.json 0000664 0000000 0000000 00000001514 13540442377 0031736 0 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/schemas {
"type": "array",
"items": {
"type": "object",
"required": [
"serInstanceId",
"version",
"state",
"transportInfo",
"serializer"
],
"properties": {
"serInstanceId": {
"type": "string"
},
"serName": {
"type": "string"
},
"serCategory": {
"type": "string"
},
"version": {
"type": "string"
},
"state": {
"type": "string",
"enum": [
"ACTIVE",
"INACTIVE"
]
},
"transportInfo": {
"type": "string"
},
"serializer": {
"type": "string"
},
"scopeOfLocality": {
"type": "string"
},
"consumedLocalOnly": {
"type": "string"
},
"isLocal": {
"type": "string"
}
}
}
}
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/schemas/UserInfo.schema.json 0000664 0000000 0000000 00000004513 13540442377 0030501 0 ustar 00root root 0000000 0000000 {
"UserInfo": {
"description": "A type containing user information.",
"type": "object",
"required": [
"address",
"accessPointId",
"zoneId",
"resourceURL"
],
"properties": {
"address": {
"description": "Address of user (e.g. \"sip\" URI, \"tel\" URI, \"acr\" URI).",
"type": "string",
"format": "uri",
"example": "acr:192.0.2.1"
},
"accessPointId": {
"description": "Identifier of access point, (reference ETSI TS 129 171). Where the E-CGI is made up of the PLMN and Cell Identity (28 bit string). Then the PLMN is made up of the 3 digit MCC & 2 or 3 digit MNC. The Cell Portion is an optional element",
"type": "string",
"example": "001010000000000000000000000000001"
},
"zoneId": {
"description": "Identifier of zone",
"type": "string",
"example": "zone01"
},
"resourceURL": {
"description": "Self referring URL.",
"type": "string",
"format": "uri",
"example": "http://example.com/exampleAPI/location/v1/subscriptions/userTracking/subscription123"
},
"locationInfo": {
"description": "A type containing location information with latitude, longitude and altitude, in addition the accuracy of the information are provided.",
"type": "object",
"required": [
"latitude",
"longitude",
"accuracy"
],
"properties": {
"latitude": {
"type": "number",
"format": "float",
"example": "80.123"
},
"longitude": {
"type": "number",
"format": "float",
"example": "70.123"
},
"altitude": {
"type": "number",
"format": "float",
"example": "10.0"
},
"accuracy": {
"type": "integer",
"format": "int32",
"example": "10"
}
}
},
"contextLocationInfo": {
"description": "Contextual information of a user location (e.g., aisle, floor, room number, etc.)",
"type": "string",
"example": "GroundFloor"
},
"ancillaryInfo": {
"description": "Reserved for future use.",
"type": "string"
}
}
}
} gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/scripts/ 0000775 0000000 0000000 00000000000 13540442377 0024656 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/scripts/build-container.sh 0000775 0000000 0000000 00000001342 13540442377 0030274 0 ustar 00root root 0000000 0000000 #!/bin/bash
# Copyright ETSI 2019
# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt
#set -e
set -vx
DOCKER_FILE=./scripts/docker/Dockerfile
if [ -f ${DOCKER_FILE} ]
then
#check and build stf569-rf image
DOCKER_ID=`docker ps -a | grep -e stf569-rf | awk '{ print $1 }'`
if [ ! -z "${DOCKER_ID}" ]
then
docker rm --force stf569-rf
fi
docker build --tag stf569-rf --force-rm -f ${DOCKER_FILE} .
if [ "$?" != "0" ]
then
echo "Docker build failed: $?"
exit -1
fi
docker image ls -a
docker inspect stf569-rf:latest
if [ "$?" != "0" ]
then
echo "Docker inspect failed: $?"
exit -2
fi
else
exit -3
fi
# That's all Floks
exit 0
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/scripts/docker/ 0000775 0000000 0000000 00000000000 13540442377 0026125 5 ustar 00root root 0000000 0000000 gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/scripts/docker/Dockerfile 0000664 0000000 0000000 00000002151 13540442377 0030116 0 ustar 00root root 0000000 0000000 FROM ubuntu:16.04
MAINTAINER ETSI STF 569
LABEL description="SFT569 Robot Framework Docker Image"
ENV TERM=xterm
ENV HOSTNAME docker-robot-STF569
ARG ssh_prv_key
RUN DEBIAN_FRONTEND=noninteractive apt update \
&& apt install python3 -y \
&& apt install python3-pip -y \
&& apt install openssh-server -y \
&& DEBIAN_FRONTEND=noninteractive apt-get autoremove --purge -y \
&& DEBIAN_FRONTEND=noninteractive apt-get autoclean \
&& rm -rf /var/lib/apt/lists/*
RUN echo "docker-robot-STF569" > /etc/hostname \
&& echo "root:etsi" | chpasswd
RUN useradd --create-home --shell /bin/bash --user-group etsi --groups sudo \
&& echo "etsi:etsi" | chpasswd \
&& adduser etsi sudo \
&& echo "etsi ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
RUN DEBIAN_FRONTEND=noninteractive \
&& mkdir -p /home/etsi/dev/robot \
&& cd /home/etsi/dev/robot
ADD . /home/etsi/dev/robot
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/*
CMD tail -f /dev/null
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/scripts/launch-validation.sh 0000775 0000000 0000000 00000000241 13540442377 0030614 0 ustar 00root root 0000000 0000000 #!/bin/bash
echo "Starting check on ROBOT CODE"
for FILE in $(find . -name "*.robot"); do
echo "Syntax check on ${FILE}"
robot --dryrun -d /tmp ${FILE}
done
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/scripts/run-all.bash 0000775 0000000 0000000 00000001533 13540442377 0027074 0 ustar 00root root 0000000 0000000 #!/bin/bash
## Launch robot tests validator
mkdir logs
/bin/bash scripts/launch-validation.sh > logs/robot_stdout.log 2> logs/robot_stderr.log
## Filter failed Keywords
grep -r10n "| FAIL |" logs/robot_stdout.log | grep -v "Output:" | grep -v "Log:" | grep -v "Report:" > logs/failures.log
rm -f logs/robot_stdout.log
## Filter Errors on code
grep -rn " ERROR " logs/robot_stderr.log | grep -v "File has no tests or tasks" > logs/errors.log
rm -f logs/robot_stderr.log
ERRORS=`awk 'END{print NR}' logs/errors.log logs/failures.log`
if [ "${ERRORS}" -eq 0 ]; then
rm -f logs/errors.log
rm -f logs/failures.log
fi
if [ ! -z logs/errors.log ]; then
cat logs/errors.log
fi
if [ ! -z logs/failures.log ]; then
cat logs/failures.log
fi
if [ ! -z logs/erros.log ] || [ ! -z logs.failures.log ]; then
echo "Errors are found. Job failed"
exit 1
fi
gs032p3-robot-test-suite-f833775665b33bdcdf5eee05fd54f7fe328844a6/scripts/run-container.sh 0000775 0000000 0000000 00000000427 13540442377 0030004 0 ustar 00root root 0000000 0000000 #!/bin/bash
# Copyright ETSI 2019
# See: https://forge.etsi.org/etsi-forge-copyright-statement.txt
#set -e
#set -vx
docker run stf569-rf:latest "/bin/bash" \
-c "cd /home/etsi/dev/robot \
&& sh scripts/run-all.bash \
&& ls -ltr logs/"
# That's all Floks
exit $?
|