*** Variables ***
${apiRoot}
${apiName} wai
${apiVersion} v2
${MEC-APP_SCHEMA} http
${MEC-APP_HOST} 127.0.0.1
${MEC-APP_PORT} 8082
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
${SUB_TYPE} AssocStaSubscription
${SUB_ID} 1
${NOT_EXISTING_SUB_ID} 99
${CALLBACK_URI} http://callback.uri/1
${NEW_CALLBACK_URI} http://new.callback.uri/1
${MAC_ID} macId01
\ No newline at end of file
{
"_links":{
"href":""
},
"apId": {
"macId": "macId01"
},
"callbackReference": "http://new.callback.uri/1",
"subscriptionType": "AssocStaSubscription"
}
\ No newline at end of file
{
"_links":{
"href":""
},
"apId": {
"macId": "macId01"
},
"callbackReference": "http://callback.uri/1",
"subscriptionType": "INVALID_VALUE"
}
\ No newline at end of file
{
"properties": {
"_links": {
"description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.",
"properties": {
"self": {
"properties": {
"href": {
"description": "URI referring to a resource",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"href"
],
"type": "object",
"x-etsi-ref": "6.5.23"
}
},
"required": [
"self"
],
"type": "object",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Structure (inlined)"
},
"apId": {
"properties": {
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the Access Point.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique Identifier assigned to an Access Point (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks including Basic Service Set and Extended Service Set.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.3"
},
"callbackReference": {
"description": "URI selected by the service consumer to receive notifications on the subscribed WLAN information. This shall be included both in the request and in response.",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "URI"
},
"expiryDeadline": {
"properties": {
"nanoSeconds": {
"description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Uint32"
},
"seconds": {
"description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Uint32"
}
},
"required": [
"seconds",
"nanoSeconds"
],
"type": "object",
"x-etsi-ref": "6.5.2"
},
"subscriptionType": {
"description": "Shall be set to \"AssocStaSubscription\".",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"subscriptionType",
"callbackReference",
"apId"
],
"type": "object",
"x-etsi-ref": "6.3.2"
}
\ No newline at end of file
''[Documentation] robot --outputdir ../../outputs ./WaiMeasurement.robot
... Test Suite to validate WLAN Measurement API (MEAS) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../../pics.txt
Resource ../../../GenericKeywords.robot
Library String
Library OperatingSystem
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
TP_MEC_MEC028_SRV_WAI_012_OK
[Documentation]
... Check that the IUT responds with a list of measurement
... configurations available from the WLAN Access Information Service
... Reference "ETSI GS MEC 028 2.2.1, clause 7.7.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve a list of list of measurement configurations
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is MeasurementConfigLinkList
TP_MEC_MEC028_SRV_WAI_013_OK
[Documentation]
... Check that the IUT responds with a new measurement configuration
... Reference "ETSI GS MEC 028 2.2.1, clause 7.7.3.4
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfig
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
${path} Catenate SEPARATOR= jsons/ MeasurementConfig.json
${body} Get File ${path}
${json_object}= Evaluate json.loads('''${body}''') json
Create a new measurement configuration ${body}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is MeasurementConfigLinkList
Should Be Equal As Strings ${response['body']['staIdentity']['staId']} ${STA_ID}
Should Be Equal As Strings ${response['body']['measurementId'] ${MEAS_ID}
Should Be Equal As Strings ${json_object['measurementInfo']} ${response['body']['measurementInfo']}
TP_MEC_MEC028_SRV_WAI_013_BR
[Documentation]
... Check that the IUT responds with an error when an invalid request is sent
... Reference "ETSI GS MEC 028 2.2.1, clause 7.7.3.4
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfig
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
${path} Catenate SEPARATOR= jsons/ MeasurementConfigError.json
${body} Get File ${path}
${json_object}= Evaluate json.loads('''${body}''') json
Create a new measurement configuration ${body}
Check HTTP Response Status Code Is 400
TP_MEC_MEC028_SRV_WAI_014_OK
[Documentation]
... Check that the IUT responds with the specified measurement configuration
... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.1
... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList"
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Check HTTP Response Body Json Schema Is MeasurementConfig
Retrieve a specified measurement configuration ${MEAS_ID}
Check HTTP Response Status Code Is 200
Should Be Equal As Strings ${response['body']['measurementId'] ${MEAS_ID}
TP_MEC_MEC028_SRV_WAI_014_NF
[Documentation]
... Check that the IUT responds with an error when an invalid request is sent
... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.1
... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList"
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID}
Check HTTP Response Status Code Is 404
TP_MEC_MEC028_SRV_WAI_015_OK
[Documentation]
... Check that the IUT responds with the modified measurement configuration
... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.2
... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList"
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
${path} Catenate SEPARATOR= jsons/ MeasurementConfigUpdate.json
${body} Get File ${path}
${json_object}= Evaluate json.loads('''${body}''') json
Update a specified measurement configuration ${MEAS_ID} ${body}
Check HTTP Response Status Code Is 200
Should Be Equal As Strings ${response['body']['staIdentity']['staId']} ${json_object['staIdentity']['staId']}
Should Be Equal As Strings ${response['body']['measurementId'] ${MEAS_ID}
Should Be Equal As Strings ${response['body']['measurementInfo']} ${json_object['measurementInfo']}
TP_MEC_MEC028_SRV_WAI_015_NF
[Documentation]
... Check that the IUT responds with an error when an invalid request is sent
... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.2
... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList"
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Update a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID} MeasurementConfigUpdate.json
Check HTTP Response Status Code Is 404
TP_MEC_MEC028_SRV_WAI_016_OK
[Documentation]
... Check that the IUT responds with with 204 when requested to delete the specified measurement configuration
... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.5
... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList"
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Delete a specified measurement configuration ${MEAS_ID}
Check HTTP Response Status Code Is 204
TP_MEC_MEC028_SRV_WAI_016_NF
[Documentation]
... Check that the IUT responds with an error when an invalid request is sent
... Reference "ETSI GS MEC 028 2.2.1, clause 7.8.3.5
... "https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.2.1/WlanInformationApi.yaml#/schemas/MeasurementConfigLinkList"
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Delete a specified measurement configuration ${INVALID_MEASUREMENT_CONFIG_ID}
Check HTTP Response Status Code Is 204
*** Keywords ***
Retrieve a list of list of measurement configurations
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement
${output}= Output response
Set Suite Variable ${response} ${output}
Create a new measurement configuration
[Arguments] ${body}
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
POST ${apiRoot}/${apiName}/${apiVersion}/queries/measurements ${body}
${output}= Output response
Set Suite Variable ${response} ${output}
Retrieve a specified measurement configuration
[Arguments] ${MEAS_CONF_ID}
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
Update a specified measurement configuration
[Arguments] ${MEAS_CONF_ID} ${content}
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID} ${body}
${output}= Output response
Set Suite Variable ${response} ${output}
Delete a specified measurement configuration
[Arguments] ${MEAS_CONF_ID}
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/queries/measurement/${MEAS_CONF_ID}
${output}= Output response
Set Suite Variable ${response} ${output}
*** Variables ***
${apiRoot}
${apiName} wai
${apiVersion} v2
${MEC-APP_SCHEMA} http
${MEC-APP_HOST} 127.0.0.1
${MEC-APP_PORT} 8082
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
${STA_ID} 123
${MEAS_ID} 456
${INVALID_MEASUREMENT_CONFIG_ID} 999
\ No newline at end of file
{
"staId": [
{
"macId": "123"
}
],
"measurementId": "123",
"measurementInfo": {
"measurementDuration": 10
},
"_links": {
"self": {
"href": "/link/"
}
}
}
\ No newline at end of file
{
"StaIdentities": [
{
"macId": "123"
}
],
"measurementId": "123",
"measurementInfo": {
"measurementDuration": 10
},
"_links": {
"self": {
"href": "/link/"
}
}
}
\ No newline at end of file
{
"staId": [
{
"macId": "123"
}
],
"measurementId": "123",
"measurementInfo": {
"measurementDuration": 50
},
"_links": {
"self": {
"href": "/link/"
}
}
}
\ No newline at end of file
{
"properties": {
"_links": {
"properties": {
"self": {
"properties": {
"href": {
"description": "URI referring to a resource",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"href"
],
"type": "object",
"x-etsi-ref": "6.5.23"
}
},
"required": [
"self"
],
"type": "object",
"x-etsi-mec-cardinality": "0..1"
},
"staId": {
"minItems": 1,
"type": "array",
"items": {
"properties": {
"aid": {
"description": "Number which identifies a particular association between a station and an Access Point ",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the station.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.11"
}
},
"measurementId": {
"type": "string"
},
"measurementInfo": {
"properties": {
"measurementDuration": {
"type": "integer",
"format": "unit16"
},
"randomInterval": {
"type": "integer",
"format": "unit16"
},
"channelLoadConf": {
"properties": {
"apId": {
"properties": {
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the Access Point.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique Identifier assigned to an Access Point (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks including Basic Service Set and Extended Service Set.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.3"
},
"cChannelId": {
"description": "Channel number which load is reported",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"channelLoad": {
"description": "Channel load as per IEEE 802.11-2012 [8], section 11.11.9.3",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
}
},
"required": [
"apId",
"cChannelId",
"channelLoad"
],
"type": "object",
"x-etsi-ref": "6.5.24"
},
"beaconRequestConf": {
"properties": {
"bssId": {
"description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report is requested. When requesting beacon reports for all BSSs on the channel, the BSSID field contains the wildcard BSSID.",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array",
"x-etsi-mec-cardinality": "1..N",
"x-etsi-mec-origin-type": "String"
},
"channelId": {
"description": "Channel number to scan. A Channel Number of 0 indicates a request to make iterative measurements for all supported channels in the Operating Class where the measurement is permitted on the channel and the channel is valid for the current regulatory domain. A Channel Number of 255 indicates a request to make iterative measurements for all supported channels in the current Operating Class listed in the latest AP Channel Report received from the serving AP.",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"measurementMode": {
"description": "0 for passive.\n1 for active.\n2 for beacon table.",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"reportingCondition": {
"description": "As in table T9-89 of IEEE 802.11-2012 [8].",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"ssId": {
"description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is requested.",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array",
"x-etsi-mec-cardinality": "1..N",
"x-etsi-mec-origin-type": "String"
},
"staId": {
"properties": {
"aid": {
"description": "Number which identifies a particular association between a station and an Access Point ",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the station.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.11"
}
},
"required": [
"staId",
"channelId",
"measurementMode",
"bssId",
"ssId",
"reportingCondition"
],
"type": "object",
"x-etsi-ref": "6.5.25"
},
"staStatisticsConf": {
"properties": {
"groupIdentity": {
"description": "As per table T 9-114 of IEEE 802.11-2012 [8].",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"staId": {
"properties": {
"aid": {
"description": "Number which identifies a particular association between a station and an Access Point ",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the station.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.11"
},
"triggerCondition": {
"type": "integer"
},
"triggerTimeout": {
"description": "The Trigger Timeout field contains a value in units of 100 TUs during which a measuring STA does not generate further triggered STA Statistics Reports after a trigger condition has been met.",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"triggeredReport": {
"type": "boolean"
}
},
"required": [
"staId",
"groupIdentity",
"triggeredReport",
"triggerTimeout",
"triggerCondition"
],
"type": "object",
"x-etsi-ref": "6.5.26"
},
"neighborReportConf": {
"properties": {
"ssid": {
"type": "string"
},
"bssid": {
"type": "string"
}
}
}
},
"type": "object",
"x-etsi-ref": "6.2.3"
}
},
"required": [
"staId",
"measurementId",
"measurementInfo"
],
"type": "object"
}
\ No newline at end of file
{
"required": [
"_links"
],
"properties": {
"_links": {
"required": [
"self"
],
"properties": {
"self": {
"properties": {
"href": {
"description": "URI referring to a resource",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"href"
],
"type": "object",
"x-etsi-ref": "6.5.23"
}
}
},
"measurementConfig": {
"type": "array",
"items": {
"required": [
"href",
"measurementId"
],
"properties": {
"href": {
"type": "string"
},
"measurementId": {
"type": "string"
}
}
}
}
}
}
\ No newline at end of file
''[Documentation] robot --outputdir ../../outputs ./WaiSTAInfo.robot
... Test Suite to validate WLAN Information API (STA_INFO) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../../pics.txt
Resource ../../../GenericKeywords.robot
Library String
Library OperatingSystem
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
TP_MEC_MEC028_SRV_WAI_003_OK
[Documentation]
... Check that the IUT responds with the list of Station Point
... Reference "ETSI GS MEC 028 2.2.1, clause 7.4.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schema/StaInfo #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve the station information
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is StaInfo
## Post condition
FOR ${staInfo} IN @{response['body']}
${passed} Run Keyword And Return Status Should Be Equal As Strings ${staInfo['staId']['macId']} ${MAC_ID}
Exit For Loop If ${passed}
END
Should Be True ${passed}
TP_MEC_MEC028_SRV_WAI_004_OK
[Documentation]
... Check that the IUT responds with the list of Station Point filtered by the macId provided as query parameter
... Reference "ETSI GS MEC 028 2.2.1, clause 7.4.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schema/StaInfo #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve the station information using filters ${filter}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is StaInfo
## Post condition
FOR ${staInfo} IN @{response['body']}
${passed} Run Keyword And Return Status Should Be Equal As Strings ${staInfo['staId']['macId']} ${MAC_ID}
Exit For Loop If ${passed}
END
Should Be True ${passed}
TP_MEC_MEC028_SRV_WAI_004_BR
[Documentation]
... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application
... ETSI GS MEC 028 2.2.1, clause 7.4.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schema/StaInfo #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve the station information using filters ${bad_filter}
Check HTTP Response Status Code Is 400
Check HTTP Response Body Json Schema Is ProblemDetails
*** Keywords ***
Retrieve the station information
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/queries/sta/sta_information
${output}= Output response
Set Suite Variable ${response} ${output}
Retrieve the station information using filters
[Arguments] ${filter}
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/queries/sta/sta_information?filter=${filter}
${output}= Output response
Set Suite Variable ${response} ${output}
\ No newline at end of file
*** Variables ***
${apiRoot}
${apiName} wai
${apiVersion} v2
${MEC-APP_SCHEMA} http
${MEC-APP_HOST} 127.0.0.1
${MEC-APP_PORT} 8082
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
${MAC_ID} macId01
${filter} (eq,staId/macId,macId01)
${bad_filter} (eq,staId/mac,macId01)
\ No newline at end of file
{
"properties": {
"detail": {
"description": "A human-readable explanation specific to this occurrence of the problem",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"instance": {
"description": "A URI reference that identifies the specific occurrence of the problem",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
},
"status": {
"description": "The HTTP status code for this occurrence of the problem",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"title": {
"description": "A short, human-readable summary of the problem type",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"type": {
"description": "A URI reference according to IETF RFC 3986 that identifies the problem type",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "URI"
}
},
"type": "object"
}
\ No newline at end of file
{
"items":{
"properties": {
"apAssociated": {
"properties": {
"assocId": {
"description": "Unique number which identifies a particular association between the station and Access Point.",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "string"
},
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the Access Point.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "string"
},
"macId": {
"description": "Unique identifier assigned to the Access Point (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "string"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.12"
},
"beaconReport": {
"properties": {
"bssId": {
"description": "The BSSID field indicates the BSSID of the BSS(s) for which a beacon report has been received.",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array",
"x-etsi-mec-cardinality": "1..N",
"x-etsi-mec-origin-type": "String"
},
"channelId": {
"description": "Channel number where the beacon was received.",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"measurementId": {
"description": "Measurement ID of the Measurement configuration applied to this Beacon Report.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"reportingCondition": {
"description": "As in table T9-89 of IEEE 802.11-2012 [8].",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Integer"
},
"ssId": {
"description": "(Optional) The SSID subelement indicates the ESS(s) or IBSS(s) for which a beacon report is received.",
"items": {
"type": "string"
},
"minItems": 1,
"type": "array",
"x-etsi-mec-cardinality": "1..N",
"x-etsi-mec-origin-type": "String"
},
"staId": {
"properties": {
"aid": {
"description": "Number which identifies a particular association between a station and an Access Point ",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the station.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.11"
}
},
"required": [
"staId",
"measurementId",
"channelId",
"bssId",
"ssId",
"reportingCondition"
],
"type": "object",
"x-etsi-ref": "6.5.27"
},
"channel": {
"description": "Channel currently used by the station.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"rssi": {
"properties": {
"rssi": {
"description": "The Received Signal Strength Indicator from a station",
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Uint8"
}
},
"required": [
"rssi"
],
"type": "object",
"x-etsi-ref": "6.5.21"
},
"staDataRate": {
"properties": {
"staId": {
"properties": {
"aid": {
"description": "Number which identifies a particular association between a station and an Access Point ",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the station.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.11"
},
"staLastDataDownlinkRate": {
"description": "The data transmit rate in kbps that was most recently used for transmission of data PPDUs from the access point to the station.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"staLastDataUplinkRate": {
"description": "The data transmit rate in Kbps that was most recently used for transmission of data PPDUs from the associated station to the access point.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
}
},
"type": "object",
"x-etsi-ref": "6.5.22"
},
"staId": {
"properties": {
"aid": {
"description": "Number which identifies a particular association between a station and an Access Point ",
"type": "string",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "String"
},
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the station.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique identifier assigned to station (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.11"
},
"staStatistics": {
"properties": {
"groupIdentity": {
"description": "Indicates the requested statistics group describing the Statistics Group Data according to table 9-114 of IEEE 802.11-2016 [8].",
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "UInt8"
},
"md": {
"description": "Measurement Duration.",
"format": "uint16",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "UInt16"
},
"statisticsGroupData": {
"description": "Statistics Group Data as defined in Annex C of IEEE 802.112016 [8].",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "not specified",
"properties": {
"dot11AMPDUDelimiterCRCErrorCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11AMPDUReceivedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11AMSDUAckFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11AckFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11BeamformingFrameCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11ChannelWidthSwitchCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11DualCTSFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11DualCTSSuccessCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11ExplicitBARFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11FCSErrorCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11FailedAMSDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11FailedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11FortyMHzFrameReceivedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11FortyMHzFrameTransmittedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11FrameDuplicateCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11GrantedRDGUnusedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11GrantedRDGUsedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11GroupReceivedFrameCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11GroupTransmittedFrameCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11ImplicitBARFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11MPDUInReceivedAMPDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11MultipleRetryAMSDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11MultipleRetryCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11PSMPUTTGrantDuration": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11PSMPUTTUsedDuration": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosAckFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosDiscardedFrameCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosFailedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosFrameDuplicateCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosMPDUsReceivedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosMultipleRetryCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosRTSFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosRTSSuccessCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosReceivedFragmentCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosRetriesReceivedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosRetryCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosTransmittedFragmentCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11QosTransmittedFrameCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RSNAStatsBIPMICErrors": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RSNAStatsCCMPDecryptErrors": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RSNAStatsCCMPReplays": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RSNAStatsCMACReplays": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RSNAStatsRobustMgmtCCMPReplays": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RSNAStatsTKIPICVErrors": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RSNAStatsTKIPReplays": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RTSFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RTSLSIGFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RTSLSIGSuccessCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RTSSuccessCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11ReceivedAMSDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11ReceivedFragmentCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11ReceivedOctetsInAMPDUCount": {
"format": "int64",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint64"
},
"dot11ReceivedOctetsInAMSDUCount": {
"format": "int64",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint64"
},
"dot11RetryAMSDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11RetryCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11STAStatisticsAPAverageAccessDelay": {
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint8"
},
"dot11STAStatisticsAverageAccessDelayBackGround": {
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint8"
},
"dot11STAStatisticsAverageAccessDelayBestEffort": {
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint8"
},
"dot11STAStatisticsAverageAccessDelayVideo": {
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint8"
},
"dot11STAStatisticsAverageAccessDelayVoice": {
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint8"
},
"dot11STAStatisticsChannelUtilization": {
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint8"
},
"dot11STAStatisticsStationCount": {
"format": "uint8",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint8"
},
"dot11STBCCTSFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11STBCCTSSuccessCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedAMPDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedAMSDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedFragmentCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedFrameCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedFramesInGrantedRDGCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedMPDUsInAMPDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedOctetsInAMPDUCount": {
"format": "int64",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint64"
},
"dot11TransmittedOctetsInAMSDUCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TransmittedOctetsInGrantedRDGCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TwentyMHzFrameReceivedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11TwentyMHzFrameTransmittedCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11nonSTBCCTSFailureCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
},
"dot11nonSTBCCTSSuccessCount": {
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Uint32"
}
},
"type": "object"
}
},
"required": [
"md",
"groupIdentity",
"statisticsGroupData"
],
"type": "object",
"x-etsi-ref": "6.5.13"
},
"timeStamp": {
"properties": {
"nanoSeconds": {
"description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Uint32"
},
"seconds": {
"description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Uint32"
}
},
"required": [
"seconds",
"nanoSeconds"
],
"type": "object",
"x-etsi-ref": "6.5.2"
}
},
"required": [
"staId"
],
"type": "object",
"x-etsi-ref": "6.2.3"
}
}
\ No newline at end of file
''[Documentation] robot --outputdir ../../outputs ./WaiSubscription.robot
... Test Suite to validate WLAN Information API (SUB) operations.
*** Settings ***
Resource environment/variables.txt
Resource ../../../pics.txt
Resource ../../../GenericKeywords.robot
Library String
Library OperatingSystem
Library REST ${MEC-APP_SCHEMA}://${MEC-APP_HOST}:${MEC-APP_PORT} ssl_verify=false
*** Test Cases ***
TP_MEC_MEC028_SRV_WAI_005_OK
[Documentation]
... Check that the IUT responds with the requested list of subscription
... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve the subscription information ${SUB_FILTER}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is SubscriptionLinkList
FOR ${assocStaSub} IN @{response['body']['assocStaSubscription']}
${passed} Run Keyword And Return Status Should Be Equal As Strings ${assocStaSub['_links']['self']['href']} ${HREF}
Exit For Loop If ${passed}
END
TP_MEC_MEC028_SRV_WAI_006_OK
[Documentation]
... Check that the IUT responds with the requested list of subscription
... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve the subscription information ${SUB_FILTER}
Check HTTP Response Status Code Is 200
Check HTTP Response Body Json Schema Is SubscriptionLinkList
Should Be Equal As Strings ${response['body']['_links']['self']['href']} ${HREF}
TP_MEC_MEC028_SRV_WAI_006_BR
[Documentation]
... Check that the IUT responds with an error when a request with incorrect parameters is sent by a MEC Application
... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Retrieve the subscription information ${INVALID_SUB_FILTER}
Check HTTP Response Status Code Is 400
TP_MEC_MEC028_SRV_WAI_006_NF
[Documentation]
... Check that the IUT responds with an error when a request with not existing parameters is sent
... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated
Retrieve the subscription information using wrong endpoint
Check HTTP Response Status Code Is 404
TP_MEC_MEC028_SRV_WAI_007_OK
[Documentation]
... Check that the IUT responds with a Notification Subscription
... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.4
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Send a request for creating a subscription AssocStaSubscription.json
Check HTTP Response Status Code Is 201
Check HTTP Response Body Json Schema Is AssocStaSubscription
Should Be Equal As Strings ${response['body']['subscriptionType']} ${SUB_TYPE}
Should Be Equal As Strings ${response['body']['_links']['self']['href']} ${HREF}
Should Be Equal As Strings ${response['headers']['Location']} ${HREF}
TP_MEC_MEC028_SRV_WAI_007_BR
[Documentation]
... Check that the IUT responds with an error when an invalid Subscription request is sent
... ETSI GS MEC 028 2.2.1, clause 7.5.3.4
... https://forge.etsi.org/rep/mec/gs028-wai-api/blob/v2.1.1/WlanInformationApi.yaml#/schemas/AssocStaSubscription #Outdated
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Send a request for creating a subscription AssocStaSubscription_BR.json
Check HTTP Response Status Code Is 400
TP_MEC_MEC028_SRV_WAI_007_NF
[Documentation]
... Check that the IUT responds with an error when a request with not existing parameters is sent
... Reference "ETSI GS MEC 028 2.2.1, clause 7.5.3.1
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
Send a request for creating a subscription using wrong endpoint AssocStaSubscription.json
Check HTTP Response Status Code Is 404
*** Keywords ***
Send a request for creating a subscription
[Arguments] ${content}
Log Creating a new subscription
#Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
${path} Catenate SEPARATOR= jsons/ ${content}
${body} Get File ${path}
Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${body}
Log ${body}
${output}= Output response
Set Suite Variable ${response} ${output}
Send a request for creating a subscription using wrong endpoint
[Arguments] ${content}
Log Creating a new subscription
#Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"application/json"}
Set Headers {"Authorization":"${TOKEN}"}
${path} Catenate SEPARATOR= jsons/ ${content}
${body} Get File ${path}
Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions_INVALID_URI ${body}
${output}= Output response
Set Suite Variable ${response} ${output}
Retrieve the subscription information
[Arguments] ${subscription_type}
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
#Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?subscription_type=${subscription_type}
${output}= Output response
Set Suite Variable ${response} ${output}
Retrieve the subscription information using wrong endpoint
Should Be True ${PIC_MEC_SYSTEM} == 1
Should Be True ${PIC_SERVICES} == 1
#Set Headers {"Accept":"application/json"}
Set Headers {"Content-Type":"*/*"}
Set Headers {"Authorization":"${TOKEN}"}
GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions_INVALID_URI
${output}= Output response
Set Suite Variable ${response} ${output}
\ No newline at end of file
*** Variables ***
${apiRoot}
${apiName} wai
${apiVersion} v2
${MEC-APP_SCHEMA} http
${MEC-APP_HOST} 127.0.0.1
${MEC-APP_PORT} 8082
${TOKEN} Basic YWxhZGRpbjpvcGVuc2VzYW1l
${SUB_TYPE} AssocStaSubscription
${SUB_FILTER} assoc_sta
${INVALID_SUB_FILTER} assocStaSub
${HREF} /wai/v2/subscriptions/1
${CALLBACK_URI} http://callback.uri/1
\ No newline at end of file
{
"apId": {
"macId": "macId01"
},
"callbackReference": "http://callback.uri/1",
"subscriptionType": "AssocStaSubscription"
}
\ No newline at end of file
{
"_links":{
"href":""
},
"apId": {
"macId": "macId01"
},
"callbackReference": "http://callback.uri/1",
"subscriptionType": "INVALID_VALUE"
}
\ No newline at end of file
{
"properties": {
"_links": {
"description": "Hyperlink related to the resource. This shall be only included in the HTTP responses and in HTTP PUT requests.",
"properties": {
"self": {
"properties": {
"href": {
"description": "URI referring to a resource",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"href"
],
"type": "object",
"x-etsi-ref": "6.5.23"
}
},
"required": [
"self"
],
"type": "object",
"x-etsi-mec-cardinality": "0..1",
"x-etsi-mec-origin-type": "Structure (inlined)"
},
"apId": {
"properties": {
"ipAddress": {
"description": "IPv4 or IPv6 address allocated for the Access Point.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
},
"macId": {
"description": "Unique Identifier assigned to an Access Point (as network interface controller) for communications at the data link layer of a network segment.",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
},
"ssid": {
"description": "Service Set Identifier to identify logical networks including Basic Service Set and Extended Service Set.",
"items": {
"type": "string"
},
"minItems": 0,
"type": "array",
"x-etsi-mec-cardinality": "0..N",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"macId"
],
"type": "object",
"x-etsi-ref": "6.5.3"
},
"callbackReference": {
"description": "URI selected by the service consumer to receive notifications on the subscribed WLAN information. This shall be included both in the request and in response.",
"format": "uri",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "URI"
},
"expiryDeadline": {
"properties": {
"nanoSeconds": {
"description": "The nanoseconds part of the time. Time is defined as Unix-time since January 1, 1970, 00:00:00 UTC.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Uint32"
},
"seconds": {
"description": "The seconds part of the time. Time is defined as Unixtime since January 1, 1970, 00:00:00 UTC.",
"format": "uint32",
"type": "integer",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "Uint32"
}
},
"required": [
"seconds",
"nanoSeconds"
],
"type": "object",
"x-etsi-ref": "6.5.2"
},
"subscriptionType": {
"description": "Shall be set to \"AssocStaSubscription\".",
"type": "string",
"x-etsi-mec-cardinality": "1",
"x-etsi-mec-origin-type": "String"
}
},
"required": [
"subscriptionType",
"callbackReference",
"apId"
],
"type": "object",
"x-etsi-ref": "6.3.2"
}
\ No newline at end of file