From 4f5aeb8ead33db728f371fb478899ed6a7e61218 Mon Sep 17 00:00:00 2001 From: kmohr-soprasteria <57349523+kmohr-soprasteria@users.noreply.github.com> Date: Thu, 19 Jun 2025 16:29:42 +0200 Subject: [PATCH] [Testing] Update invalidOrMissingRequestBody/receiver testcases Fixes #1330 --- .../v2.0.1/Receiver/README.md | 11 +- ...issingRequestBody.receiver.deprecated.json | 52 + ...ngRequestBody.receiver.deprecated.plantuml | 69 + ...MissingRequestBody.receiver.deprecated.png | Bin 0 -> 61586 bytes ...issingRequestBody.receiver.deprecated.json | 2679 +++++++++++++++++ ...issingRequestBody.receiver.deprecated.yaml | 1865 ++++++++++++ ...alidOrMissingRequestBody.receiver.plantuml | 42 +- ...m.invalidOrMissingRequestBody.receiver.png | Bin 70875 -> 22370 bytes ....invalidOrMissingRequestBody.receiver.json | 2321 +------------- 9 files changed, 4700 insertions(+), 2339 deletions(-) create mode 100644 testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+data.invalidOrMissingRequestBody.receiver.deprecated.json create mode 100644 testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.plantuml create mode 100644 testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.png create mode 100644 testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+testcase.invalidOrMissingRequestBody.receiver.deprecated.json create mode 100644 testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/simulators/MicroWaveDeviceInventory+simu.invalidOrMissingRequestBody.receiver.deprecated.yaml diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/README.md b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/README.md index 52a5f616..3273dec3 100644 --- a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/README.md +++ b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/README.md @@ -1,5 +1,14 @@ # Functional Testing of Invalid or Missing RequestBody Handling of the Receivers of Notifications +For the receiver services the OAS contains a requestBody. The tests therefore are executed with both an invalid requestBody and with a missing requestBody. In all cases a 400 response is expected. + +Note: +- The *regard*-services for device and alarm notifications have been deprecated with MWDI v2.0.0. +- The *regard*-service for controller notifications however remains in use. +- The testcase collections therefore have been splitted. + ![Overview](./mwdi+diagram.invalidOrMissingRequestBody.receiver.png) -For the receiver services the OAS contains a requestBody. The tests therefore are executed with both an invalid requestBody and with a missing requestBody. In all cases a 400 response is expected. \ No newline at end of file + +**Deprecated services** +![OverviewDeprecated](./_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.png) diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+data.invalidOrMissingRequestBody.receiver.deprecated.json b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+data.invalidOrMissingRequestBody.receiver.deprecated.json new file mode 100644 index 00000000..202ba9cc --- /dev/null +++ b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+data.invalidOrMissingRequestBody.receiver.deprecated.json @@ -0,0 +1,52 @@ +[ + { + "mode": "debug", + "serverList": [ + { + "serverName": "dummy", + "dummyUri": "ping.openBackhaul.com" + }, + { + "serverName": "mwdi", + "server": "http://IP_ADRESS:PORT", + "pathToControlConstruct": "/core-model-1-4:network-control-domain=cache/control-construct={mountName}", + "authorizationCode": "YOUR_BASIC_AUTH_CODE", + "operationKey": "Operation key not yet provided.", + "userName": "Thorsten Heinze", + "originator": "InterfaceValidator_TR532v2.0", + "xCorrelator": "00000000-0000-0000-0000-000000000532", + "traceIndicator": "1", + "customerJourney": "" + }, + { + "serverName": "mwdi in mwdi+simulator.invalidOrMissingRequestBody.receiver.deprecated", + "server": "http://localhost:3010", + "pathToControlConstruct": "/core-model-1-4:network-control-domain=cache/control-construct={mountName}", + "authorizationCode": "", + "operationKey": "Operation key not yet provided.", + "userName": "Thorsten Heinze", + "originator": "InterfaceValidator_TR532v2.0", + "xCorrelator": "00000000-0000-0000-0000-000000000532", + "traceIndicator": "1", + "customerJourney": "" + } + ], + "collectionInputList": [ + { + "collectionName": "invalidOrMissingRequestBody.receiver.deprecated", + "serverToBeApplied": "mwdi", + "mountName": "513250004", + "linkId": "101550001", + "kindOfReference": "dynamic" + }, + { + "collectionName": "invalidOrMissingRequestBody.receiver.deprecated_simulator", + "serverToBeApplied": "mwdi in mwdi+simulator.invalidOrMissingRequestBody.receiver.deprecated", + "mountName": "305250001", + "linkId": "101550001", + "kindOfReference": "static", + "suffixUrlEncodingIsRequired": true + } + ] + } +] diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.plantuml b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.plantuml new file mode 100644 index 00000000..4d08a0e3 --- /dev/null +++ b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.plantuml @@ -0,0 +1,69 @@ +@startuml mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated +skinparam responseMessageBelowArrow true + +title +mwdi+testcase.invalidOrMissingRequestBody.receiver.deprecated +end title + +participant "Postman" as Postman +participant "Data" as Data +participant "Collection" as Collection + +participant "/v1/regard-controller-attribute-value-change" as RCAVC +participant "/v1/regard-device-alarm" as RDA +participant "/v1/regard-device-attribute-value-change" as RDAVC +participant "/v1/regard-device-object-deletion" as RDOD +participant "/v1/regard-device-object-creation" as RDOC + +group Preparation + Data --\\o Postman : {servers} + activate Postman + Postman --\\o Collection : {servers} +end + +note over Postman, RCAVC + For each service there are two testcases to be executed. + Both tests differ in the provided requestBody: + - an invalid requestBody according to OAS + - no requestBody provided at all +end note + +group /v1/regard-device-alarm + Collection --\\o Postman : {servers} + Postman -> RDA : (a) {invalidRequestBody} \n(b) no requestBody + Postman <-- RDA : 400 + note right Postman #Orange + check for 400 + end note +end + +group /v1/regard-device-attribute-value-change + Collection --\\o Postman : {servers} + Postman -> RDAVC : (a) {invalidRequestBody} \n(b) no requestBody + Postman <-- RDAVC : 400 + note right Postman #Orange + check for 400 + end note +end + +group /v1/regard-device-object-deletion + Collection --\\o Postman : {servers} + Postman -> RDOD : (a) {invalidRequestBody} \n(b) no requestBody + Postman <-- RDOD : 400 + note right Postman #Orange + check for 400 + end note +end + +group /v1/regard-device-object-creation + Collection --\\o Postman : {servers} + Postman -> RDOC : (a) {invalidRequestBody} \n(b) no requestBody + Postman <-- RDOC : 400 + note right Postman #Orange + check for 400 + end note +end + +deactivate Postman + +@enduml diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.png b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.png new file mode 100644 index 0000000000000000000000000000000000000000..3cb0497e46a08a3c9de180fbea811f7bea3205f8 GIT binary patch literal 61586 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 literal 0 HcmV?d00001 diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+testcase.invalidOrMissingRequestBody.receiver.deprecated.json b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+testcase.invalidOrMissingRequestBody.receiver.deprecated.json new file mode 100644 index 00000000..edadd96e --- /dev/null +++ b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+testcase.invalidOrMissingRequestBody.receiver.deprecated.json @@ -0,0 +1,2679 @@ +{ + "info": { + "name": "mwdi+testcase.invalidOrMissingRequestBody.receiver.deprecated", + "schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json" + }, + "item": [ + { + "name": "UserInput", + "item": [ + { + "name": "for loading user input", + "event": [ + { + "listen": "prerequest", + "script": { + "exec": [ + "console.clear();\r", + "logger.struc(\"==========================================================================================\");\r", + "logger.struc(\"===== mwdi+testcase.invalidOrMissingRequestBody.receiver.deprecated ==========================\");\r", + "logger.struc(\"==========================================================================================\");\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Loading Input Data from File\r", + "****************************************************************************************/\r", + "var inputFromFile;\r", + "try {\r", + " inputFromFile = data\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Input data could not be loaded.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Environmental Variables \r", + "****************************************************************************************/\r", + "try {\r", + " pm.environment.clear();\r", + "\r", + " let mode;\r", + " mode = inputFromFile.mode;\r", + " // Mode to be applied while running this testcase collection \r", + " // \"analysis\" -> human does detailed analysis of response bodies etc.\r", + " // \"testing\" -> automated approval based on binary result\r", + " // \"debugging\" -> support for programming the testcase collection\r", + "\r", + " let logLevel;\r", + " switch(mode) {\r", + " case \"debugging\":\r", + " logLevel = \"debug\";\r", + " break;\r", + " case \"analysis\":\r", + " logLevel = \"log\";\r", + " break;\r", + " case \"testing\":\r", + " logLevel = \"error\";\r", + " break;\r", + " default:\r", + " logLevel = \"debug\";\r", + " };\r", + " // Level of detail of the logging; find more info in pre-request script on the collection's level\r", + "\r", + " let serverList = [];\r", + " serverList = inputFromFile.serverList;\r", + " // list of addresses of applications, controllers etc.\r", + " // serverName : key attribute for identifying the servers\r", + " // dummyUri : http address that shall be addressed by bare processing Requests\r", + " // server : part of the URI that is comprised from protocol, IP address and TCP port\r", + " // pathToControlConstruct : part of the URI that is identical for all Requests that are addressing into the device's data tree\r", + " // authorizationCode : authentication that has to be sent in case of BasicAuth protection (e.g. OpenDaylight NBI)\r", + " // operationKey : ApiKey that has to be sent in case of addressing a MW SDN application (e.g. MicroWaveDeviceInventory)\r", + " // userName : user header to be sent in case of addressing a MW SDN application\r", + " // originator : originator header to be sent in case of addressing a MW SDN application\r", + " // xCorrelator : x-correlator header to be sent in case of addressing a MW SDN application\r", + " // traceIndicator : trace-indicator header to be sent in case of addressing a MW SDN application\r", + " // customerJourney : customer-journey header to be sent in case of addressing a MW SDN application\r", + "\r", + " let collectionInputList = [];\r", + " collectionInputList = inputFromFile.collectionInputList;\r", + " // list of inputs to individual test case collections\r", + " // serverToBeApplied : server that shall be addressed in the respective request/test case\r", + " // mountName : mountName of the device that is to be validated\r", + " // uuid of the object that is to be validated\r", + " // localId of the object that is to be validated\r", + " // linkId : linkName of the link that is to be validated\r", + " // linkPort : id of the linkPort that is to be validated\r", + "\r", + " pm.environment.set(\"mode\", mode);\r", + " pm.environment.set(\"logLevel\", logLevel);\r", + " pm.environment.set(\"serverList\", serverList);\r", + " pm.environment.set(\"collectionInputList\", collectionInputList);\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Environment variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Collection Variables \r", + "****************************************************************************************/\r", + "try {\r", + " pm.collectionVariables.clear()\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Collection variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Setting Local Variables and Preparing the Request\r", + "****************************************************************************************/\r", + "try {\r", + " let uri;\r", + " let dummyServerInfo;\r", + " dummyServerInfo = ExtractServerInformation(inputFromFile.serverList, \"dummy\");\r", + " uri = dummyServerInfo.dummyUri;\r", + "\r", + " pm.variables.clear();\r", + "\r", + " pm.variables.set(\"uri\", uri);\r", + "\r", + " pm.request.headers.upsert({ key: \"Accept\", value: \"application/json\" });\r", + " pm.request.headers.upsert({ key: \"Content-Type\", value: \"application/json\" })\r", + "\r", + "} catch (error) {\r", + " logger.error(\"! Local variables could not be set.\")\r", + "}\r", + "\r", + "\r", + "/****************************************************************************************\r", + "* Functions\r", + "****************************************************************************************/\r", + "function ExtractServerInformation(serverList, searchedServerName) {\r", + " try {\r", + " for(let i=0; i log -> info -> warn -> error -> struc -> none", + "// It creates \"logger\" global variable which can be used anywhere in nested collection scripts", + "", + "const logLevels = [\"debug\", \"log\", \"info\", \"warn\", \"error\", \"struc\", \"none\"];", + "", + "const shouldLog = (level) => {", + " return logLevels.indexOf(level) >= logLevels.indexOf(pm.environment.get(\"logLevel\"));", + "};", + "", + "logger = {", + " debug: (message, ...optionalParams) => {", + " shouldLog(\"debug\") && console.log(message, ...optionalParams);", + " },", + " log: (message, ...optionalParams) => {", + " shouldLog(\"log\") && console.log(message, ...optionalParams);", + " },", + " info: (message, ...optionalParams) => {", + " shouldLog(\"info\") && console.log(message, ...optionalParams);", + " },", + " warn: (message, ...optionalParams) => {", + " shouldLog(\"warn\") && console.log(message, ...optionalParams);", + " },", + " error: (message, ...optionalParams) => {", + " shouldLog(\"error\") && console.error(message, ...optionalParams);", + " },", + " struc: (message, ...optionalParams) => {", + " shouldLog(\"error\") && console.log(message, ...optionalParams);", + " },", + "};", + "" + ] + } + }, + { + "listen": "test", + "script": { + "type": "text/javascript", + "exec": [ + "" + ] + } + } + ] +} \ No newline at end of file diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/simulators/MicroWaveDeviceInventory+simu.invalidOrMissingRequestBody.receiver.deprecated.yaml b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/simulators/MicroWaveDeviceInventory+simu.invalidOrMissingRequestBody.receiver.deprecated.yaml new file mode 100644 index 00000000..302a98e6 --- /dev/null +++ b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/simulators/MicroWaveDeviceInventory+simu.invalidOrMissingRequestBody.receiver.deprecated.yaml @@ -0,0 +1,1865 @@ +openapi: 3.0.0 +info: + title: MWDI_2.0.1+simulator.invalidOrMissingRequestBody.receiver.deprecated + version: 1.0.0 + +paths: +######################################################################################################################## +# Service Layer - Individual Part +# MWDI_2.0.1+simulator.invalidOrMissingRequestBody.receiver.deprecated in static reference mode +######################################################################################################################## + + /v1/regard-device-alarm: + post: + operationId: regardDeviceAlarm + summary: 'Receives notifications about alarms at devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:alarm-event-notification + properties: + notification-proxy-1-0:alarm-event-notification: + type: object + required: + - alarm-event-sequence-number + - timestamp + - resource + - alarm-type-id + - alarm-type-qualifier + - problem-severity + properties: + alarm-event-sequence-number: + type: integer + timestamp: + type: string + resource: + type: string + alarm-type-id: + type: string + alarm-type-qualifier: + type: string + problem-severity: + type: string + example: + notification-proxy-1-0:alarm-event-notification: + alarm-event-sequence-number: 1 + timestamp: '2023-07-11T08:45:02+01:00' + resource: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=LTP-MWPS-TTP-RADIO-1A/layer-protocol=LP-MWPS-TTP-RADIO-1A/air-interface-2-0:air-interface-pac' + alarm-type-id: 'siae-alarms-1-0:radioEquipLinkTelemetryFailAlarm' + alarm-type-qualifier: '' + problem-severity: 'major' + responses: + '400': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + + /v1/regard-device-attribute-value-change: + post: + operationId: regardDeviceAttributeValueChange + summary: 'Receives notifications about changes of values of attributes inside the devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:attribute-value-changed-notification + properties: + notification-proxy-1-0:attribute-value-changed-notification: + type: object + required: + - counter + - timestamp + - object-path + - attribute-name + - new-value + properties: + counter: + type: integer + timestamp: + type: string + object-path: + type: string + attribute-name: + type: string + new-value: + type: string + example: + notification-proxy-1-0:attribute-value-changed-notification: + counter: 32 + timestamp: '2010-11-20T14:00:00+01:00' + object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=RF-2146697857/layer-protocol=2146697857/air-interface-2-0:air-interface-pac/air-interface-configuration' + attribute-name: 'performance-monitoring-is-on' + new-value: 'true' + responses: + '400': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + + /v1/regard-device-object-creation: + post: + operationId: regardDeviceObjectCreation + summary: 'Receives notifications about objects that have been created inside the devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:object-creation-notification + properties: + notification-proxy-1-0:object-creation-notification: + type: object + required: + - counter + - timestamp + - object-path + properties: + counter: + type: integer + timestamp: + type: string + object-path: + type: string + example: + notification-proxy-1-0:object-creation-notification: + counter: 2 + timestamp: '2023-07-10T12:27:03+01:00' + object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/profile-collection/profile=co-channel-17' + responses: + '400': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + + /v1/regard-device-object-deletion: + post: + operationId: regardDeviceObjectDeletion + summary: 'Receives notifications about objects that have been deleted inside the devices' + tags: + - IndividualServices + security: + - apiKeyAuth: [] + requestBody: + required: true + content: + application/json: + schema: + type: object + required: + - notification-proxy-1-0:object-deletion-notification + properties: + notification-proxy-1-0:object-deletion-notification: + type: object + required: + - counter + - timestamp + - object-path + properties: + counter: + type: integer + timestamp: + type: string + object-path: + type: string + example: + notification-proxy-1-0:object-deletion-notification: + counter: 14 + timestamp: '2023-07-13T09:31:48+01:00' + object-path: '/core-model-1-4:network-control-domain=live/control-construct=513250009/logical-termination-point=RF-2146697857' + responses: + '400': + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + +######################################################################################################################## +# Common Components +######################################################################################################################## +components: + parameters: + user: + name: user + in: header + required: true + schema: + type: string + example: 'User Name' + description: 'User identifier from the system starting the service call' + originator: + name: originator + in: header + required: true + schema: + type: string + minLength: 3 + example: 'Resolver' + description: > + 'Identification for the system consuming the API, as defined in + [/core-model-1-4:control-construct/logical-termination-point={uuid}/layer-protocol=0/http-client-interface-1-0:http-client-interface-pac/http-client-interface-configuration/application-name]' + x-correlator: + name: x-correlator + in: header + required: true + schema: + type: string + pattern: '^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$' + description: 'Empty string accepted from external applications.' + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses' + trace-indicator: + name: trace-indicator + in: header + required: true + schema: + type: string + pattern: '^([0-9]+)(\.([0-9]+))*$' + description: 'Empty string accepted from external applications.' + example: '1.3.1' + description: 'Sequence of request numbers along the flow' + customer-journey: + name: customer-journey + in: header + required: true + schema: + type: string + example: 'Unknown value' + description: 'Holds information supporting customer’s journey to which the execution applies' + mountName: + name: mountName + in: path + required: true + schema: + type: string + example: '222250001' + description: 'The mountName of the device that is addressed by the request' + uuid: + name: uuid + in: path + required: true + schema: + type: string + example: 'LTP-MWPS-TTP-1-1' + description: 'Instance identifier that is unique within the device' + uuid1: + name: uuid1 + in: path + required: true + schema: + type: string + example: 'LTP-MWPS-TTP-1-1' + description: 'Another instance identifier that is unique within the device' + localId: + name: localId + in: path + required: true + schema: + type: string + example: 'LP-MWPS-TTP-1-1' + description: 'Instance identifier that is unique within its list' + fields: + name: fields + in: query + required: false + schema: + type: string + example: 'node(node-id;netconf-node-topology:connection-status)' + description: 'Query parameter to filter ressources according to RFC8040 fields filter spec' + responses: + responseForErroredServiceRequests: + description: 'Response in case of errored service requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + headers: + x-correlator: + schema: + type: string + pattern: '^[0-9A-Fa-f]{8}(?:-[0-9A-Fa-f]{4}){3}-[0-9A-Fa-f]{12}$' + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses. Its value must be identical at the response compared with its corresponding request' + exec-time: + schema: + type: integer + example: 1100 + description: 'Value written by the service provider, reporting the total elapsed time for the execution, including all the additional processing needed to retrieve the data from the backend service. Expressed in milliseconds' + backend-time: + schema: + type: integer + example: 850 + description: 'Value written by the service provider, reporting the elapsed time for data retrieval from the backend (service invocation, database access…). Expressed in milliseconds' + responseForErroredOamRequests: + description: 'Response in case of errored OaM requests' + content: + application/json: + schema: + $ref: '#/components/schemas/errorDescription' + '429': + description: 'Response in case too many requests need to be executed in parallel or too many requests have been received within a time period. The maximum number of parallel requests is defined in an IntegerProfile with the service name as a prefix and MaxNumberOfParallelRequests as a suffix. Some time period to elapse for throttling incomming requests is defined in an IntegerProfile with the service name as a prefix and ThrottlingPeriod as a suffix' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 429 + maximum: 429 + format: int32 + message: + type: string + enum: + - 'Too many requests' + '460': + description: 'Response in case the mountName provided in the request is not found in the list of connected devices' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 460 + maximum: 460 + format: int32 + message: + type: string + enum: + - 'Not connected. Requested device is currently not in connected state at the controller' + '461': + description: 'Response in case the (parent) topology object provided in the request (body or path) is not found in the cache.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 461 + maximum: 461 + format: int32 + message: + type: string + enum: + - 'Not available. The topology (parent) object is currently not found in the cache.' + '470': + description: 'Response in case the resource specified in the request does not exist within the connected device' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 470 + maximum: 470 + format: int32 + message: + type: string + enum: + - 'Resource not existing. Device informs about addressed resource unknown' + '471': + description: 'Response in case the (child) topology object specified in the request (body or path) does not exist within the cache.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 471 + maximum: 471 + format: int32 + message: + type: string + enum: + - '(Child) topology object not existing. Cache informs about addressed resource unknown.' + '502': + description: 'Response in case the server is acting as a gateway or proxy and received an invalid response from the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 502 + maximum: 502 + format: int32 + message: + type: string + enum: + - 'Bad Gateway' + '530': + description: 'Response in case the referenced resource exists (e.g. device connected and resource exists in internal datatree), but response data is either not available, lost during transmission, incomplete or corrupted' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 530 + maximum: 530 + format: int32 + message: + type: string + enum: + - 'Data invalid. Response data not available, incomplete or corrupted' + '531': + description: 'Response in case the server is acting as a gateway or proxy and was unable to authenticate at the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 531 + maximum: 531 + format: int32 + message: + type: string + enum: + - 'Bad Gateway. Authentication at upstream server failed.' + '532': + description: 'Response in case the server is acting as a gateway or proxy and was unable to connect to the upstream server (device or application providing a consumed service)' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 532 + maximum: 532 + format: int32 + message: + type: string + enum: + - 'Bad Gateway. Upstream server not responding.' + '533': + description: 'Response in case the referenced resource for an connected device does not exist at the controller.' + content: + application/json: + schema: + type: object + required: + - code + - message + properties: + code: + type: integer + minimum: 533 + maximum: 533 + format: int32 + message: + type: string + enum: + - 'Resource unknown. The resource for the connected device does not exist at the Controller.' + headers: + x-correlator: + schema: + type: string + example: '550e8400-e29b-11d4-a716-446655440000' + description: 'UUID for the service execution flow that allows to correlate requests and responses. Its value must be identical at the response compared with its corresponding request' + exec-time: + schema: + type: integer + example: 1100 + description: 'Value written by the service provider, reporting the total elapsed time for the execution, including all the additional processing needed to retrieve the data from the backend service. Expressed in milliseconds' + backend-time: + schema: + type: integer + example: 850 + description: 'Value written by the service provider, reporting the elapsed time for data retrieval from the backend (service invocation, database access…). Expressed in milliseconds' + life-cycle-state: + schema: + type: string + enum: + - 'EXPERIMENTAL' + - 'OPERATIONAL' + - 'DEPRECATED' + - 'OBSOLETE' + - 'UNKNOWN' + - 'NOT_YET_DEFINED' + example: 'EXPERIMENTAL' + schemas: + errorDescription: + type: object + required: + - code + - message + properties: + code: + type: integer + format: int32 + message: + type: string + genericRepresentation: + type: object + required: + - response-value-list + - consequent-action-list + properties: + response-value-list: + type: array + items: + type: object + required: + - field-name + - value + - datatype + properties: + field-name: + type: string + description: > + 'Field name + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-capability/field-name]' + value: + type: string + description: > + 'Field value + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-configuration/value]' + datatype: + type: string + description: > + 'Field datatype + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-response-p-*/response-profile-1-0:response-profile-pac/response-profile-capability/datatype]' + consequent-action-list: + type: array + items: + type: object + required: + - label + - request + - display-in-new-browser-window + properties: + label: + type: string + description: > + 'Label that shall be presented on the button + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/label]' + request: + type: string + description: > + 'Request that shall be called, when button gets pressed + from + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-protocol}] + :// + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-address/ipv-4-address} + or + {/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-address/domain-name}] + : + [{/core-model-1-4:control-construct/logical-termination-point=mwdi-1-2-2-tcp-s-*/layer-protocol=0/tcp-server-interface-1-0:tcp-server-interface-pac/tcp-server-interface-configuration/local-port}] + [{/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-configuration/consequent-operation-reference}]' + input-value-list: + type: array + items: + type: object + required: + - field-name + properties: + field-name: + type: string + description: > + 'Name of an input value required for executing the Request + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/input-value-list=*/name]' + unit: + type: string + description: > + 'Unit of an input value required for executing the Request + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/input-value-list=*/unit]' + display-in-new-browser-window: + type: boolean + description: > + 'True in case Request shall be represented in a new browser window + from [/core-model-1-4:control-construct/profile-collection/profile=mwdi-1-2-2-action-p-*/action-profile-1-0:action-profile-pac/action-profile-capability/display-in-new-browser-window]' + logicalTerminationPoint: + type: object + required: + - uuid + - ltp-direction + - client-ltp + - server-ltp + - layer-protocol + properties: + uuid: + type: string + ltp-direction: + type: string + client-ltp: + type: array + uniqueItems: true + items: + type: string + server-ltp: + type: array + uniqueItems: true + items: + type: string + layer-protocol: + type: array + minItems: 1 + maxItems: 1 + items: + oneOf: + - description: 'operation server' + type: object + required: + - local-id + - layer-protocol-name + - operation-server-interface-1-0:operation-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + operation-server-interface-1-0:operation-server-interface-pac: + type: object + required: + - operation-server-interface-capability + - operation-server-interface-configuration + properties: + operation-server-interface-capability: + type: object + required: + - operation-name + properties: + operation-name: + type: string + operation-server-interface-configuration: + type: object + required: + - life-cycle-state + properties: + life-cycle-state: + type: string + - description: 'http server' + type: object + required: + - local-id + - layer-protocol-name + - http-server-interface-1-0:http-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + http-server-interface-1-0:http-server-interface-pac: + type: object + required: + - http-server-interface-capability + properties: + http-server-interface-capability: + type: object + required: + - application-name + - release-number + - data-update-period + properties: + application-name: + type: string + release-number: + type: string + data-update-period: + type: string + - description: 'tcp server' + type: object + required: + - local-id + - layer-protocol-name + - tcp-server-interface-1-0:tcp-server-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + tcp-server-interface-1-0:tcp-server-interface-pac: + type: object + required: + - tcp-server-interface-configuration + properties: + tcp-server-interface-configuration: + type: object + required: + - description + - local-protocol + - local-address + - local-port + properties: + description: + type: string + local-protocol: + type: string + local-address: + type: object + properties: + ipv-4-address: + type: string + domain-name: + type: string + local-port: + type: integer + - description: 'operation client' + type: object + required: + - local-id + - layer-protocol-name + - operation-client-interface-1-0:operation-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + operation-client-interface-1-0:operation-client-interface-pac: + type: object + required: + - operation-client-interface-configuration + - operation-client-interface-status + properties: + operation-client-interface-configuration: + type: object + required: + - operation-name + properties: + operation-name: + type: string + operation-client-interface-status: + type: object + required: + - operational-state + - life-cycle-state + properties: + operational-state: + type: string + life-cycle-state: + type: string + - description: 'elasticsearch client' + type: object + required: + - local-id + - layer-protocol-name + - elasticsearch-client-interface-1-0:elasticsearch-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + elasticsearch-client-interface-1-0:elasticsearch-client-interface-pac: + type: object + required: + - elasticsearch-client-interface-configuration + - elasticsearch-client-interface-status + properties: + elasticsearch-client-interface-configuration: + type: object + required: + - index-alias + properties: + index-alias: + type: string + elasticsearch-client-interface-status: + type: object + required: + - operational-state + - life-cycle-state + properties: + operational-state: + type: string + life-cycle-state: + type: string + - description: 'http client' + type: object + required: + - local-id + - layer-protocol-name + - http-client-interface-1-0:http-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + http-client-interface-1-0:http-client-interface-pac: + type: object + required: + - http-client-interface-configuration + properties: + http-client-interface-configuration: + type: object + required: + - application-name + - release-number + properties: + application-name: + type: string + release-number: + type: string + - description: 'tcp client' + type: object + required: + - local-id + - layer-protocol-name + - tcp-client-interface-1-0:tcp-client-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + tcp-client-interface-1-0:tcp-client-interface-pac: + type: object + required: + - tcp-client-interface-configuration + properties: + tcp-client-interface-configuration: + type: object + required: + - remote-protocol + - remote-address + - remote-port + properties: + remote-protocol: + type: string + remote-address: + type: object + properties: + ip-address: + type: object + properties: + ipv-4-address: + type: string + domain-name: + type: string + remote-port: + type: integer + forwardingDomain: + type: object + required: + - uuid + - forwarding-construct + properties: + uuid: + type: string + forwarding-construct: + type: array + items: + type: object + required: + - uuid + - name + - fc-port + properties: + uuid: + type: string + name: + type: array + items: + type: object + required: + - value-name + - value + properties: + value-name: + type: string + value: + type: string + fc-port: + type: array + items: + type: object + required: + - local-id + - port-direction + - logical-termination-point + properties: + local-id: + type: string + port-direction: + type: string + logical-termination-point: + type: string + + CONTROL_CONSTRUCT: + type: object + required: + - uuid + - alarms-1-0:alarm-pac + - equipment + - firmware-1-0:firmware-collection + - profile-collection + - logical-termination-point + properties: + uuid: + type: string + alarms-1-0:alarm-pac: + $ref: '#/components/schemas/ALARM_PAC' + equipment: + type: array + items: + $ref: '#/components/schemas/EQUIPMENT' + firmware-1-0:firmware-collection: + $ref: '#/components/schemas/FIRMWARE_COLLECTION' + profile-collection: + $ref: '#/components/schemas/PROFILE_COLLECTION' + forwarding-domain: + type: array + items: + $ref: '#/components/schemas/FORWARDING_DOMAIN' + logical-termination-point: + type: array + items: + $ref: '#/components/schemas/LOGICAL_TERMINATION_POINT' + + ALARM_PAC: + type: object + required: + - alarm-capability + - alarm-configuration + - current-alarms + - alarm-event-records + properties: + alarm-capability: + $ref: '#/components/schemas/ALARM_CAPABILITY' + alarm-configuration: + $ref: '#/components/schemas/ALARM_CONFIGURATION' + current-alarms: + $ref: '#/components/schemas/CURRENT_ALARMS' + alarm-event-records: + $ref: '#/components/schemas/ALARM_EVENT_RECORDS' + ALARM_CAPABILITY: + type: object + ALARM_CONFIGURATION: + type: object + CURRENT_ALARMS: + type: object + ALARM_EVENT_RECORDS: + type: object + + EQUIPMENT: + type: object + required: + - uuid + properties: + uuid: + type: string + connector: + type: array + items: + $ref: '#/components/schemas/CONNECTOR' + contained-holder: + type: array + items: + $ref: '#/components/schemas/CONTAINED_HOLDER' + expected-equipment: + type: array + items: + $ref: '#/components/schemas/EXPECTED_EQUIPMENT' + actual-equipment: + type: object + CONNECTOR: + type: object + required: + - local-id + properties: + local-id: + type: string + CONTAINED_HOLDER: + type: object + required: + - local-id + properties: + local-id: + type: string + EXPECTED_EQUIPMENT: + type: object + required: + - local-id + properties: + local-id: + type: string + ACTUAL_EQUIPMENT: + type: object + + FIRMWARE_COLLECTION: + type: object + required: + - firmware-component-list + properties: + firmware-component-list: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_LIST' + FIRMWARE_COMPONENT_LIST: + type: array + items: + type: object + required: + - local-id + - firmware-component-pac + properties: + local-id: + type: string + firmware-component-pac: + type: object + required: + - firmware-component-capability + - firmware-component-status + properties: + firmware-component-capability: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_CAPABILITY' + firmware-component-status: + $ref: '#/components/schemas/FIRMWARE_COMPONENT_STATUS' + FIRMWARE_COMPONENT_CAPABILITY: + type: object + FIRMWARE_COMPONENT_STATUS: + type: object + + PROFILE_COLLECTION: + type: object + required: + - profile + properties: + profile: + type: array + items: + $ref: '#/components/schemas/PROFILE' + PROFILE: + oneOf: + - description: 'co-channel-profile' + type: object + required: + - uuid + - profile-name + - co-channel-profile-1-0:co-channel-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'co-channel-profile-1-0:PROFILE_NAME_TYPE_CO_CHANNEL_PROFILE' + co-channel-profile-1-0:co-channel-profile-pac: + type: object + required: + - co-channel-profile-capability + - co-channel-profile-configuration + properties: + co-channel-profile-capability: + $ref: '#/components/schemas/CO_CHANNEL_PROFILE_CAPABILITY' + co-channel-profile-configuration: + $ref: '#/components/schemas/CO_CHANNEL_PROFILE_CONFIGURATION' + - description: 'policing-profile' + type: object + required: + - uuid + - profile-name + - policing-profile-1-0:policing-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'policing-profile-1-0:PROFILE_NAME_TYPE_POLICING_PROFILE' + policing-profile-1-0:policing-profile-pac: + type: object + required: + - policing-profile-capability + - policing-profile-configuration + properties: + policing-profile-capability: + $ref: '#/components/schemas/POLICING_PROFILE_CAPABILITY' + policing-profile-configuration: + $ref: '#/components/schemas/POLICING_PROFILE_CONFIGURATION' + - description: 'qos-profile' + type: object + required: + - uuid + - profile-name + - qos-profile-1-0:qos-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'qos-profile-1-0:PROFILE_NAME_TYPE_QOS_PROFILE' + qos-profile-1-0:qos-profile-pac: + type: object + required: + - qos-profile-capability + - qos-profile-configuration + properties: + qos-profile-capability: + $ref: '#/components/schemas/QOS_PROFILE_CAPABILITY' + qos-profile-configuration: + $ref: '#/components/schemas/QOS_PROFILE_CONFIGURATION' + - description: 'scheduler-profile' + type: object + required: + - uuid + - profile-name + - scheduler-profile-1-0:scheduler-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'scheduler-profile-1-0:PROFILE_NAME_TYPE_SCHEDULER_PROFILE' + scheduler-profile-1-0:scheduler-profile-pac: + type: object + required: + - scheduler-profile-capability + - scheduler-profile-configuration + properties: + scheduler-profile-capability: + $ref: '#/components/schemas/SCHEDULER_PROFILE_CAPABILITY' + scheduler-profile-configuration: + $ref: '#/components/schemas/SCHEDULER_PROFILE_CONFIGURATION' + - description: 'wred-profile' + type: object + required: + - uuid + - profile-name + - wred-profile-1-0:wred-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'wred-profile-1-0:PROFILE_NAME_TYPE_WRED_PROFILE' + wred-profile-1-0:wred-profile-pac: + type: object + required: + - wred-profile-capability + - wred-profile-configuration + properties: + wred-profile-capability: + $ref: '#/components/schemas/WRED_PROFILE_CAPABILITY' + wred-profile-configuration: + $ref: '#/components/schemas/WRED_PROFILE_CONFIGURATION' + - description: 'wred-template-profile' + type: object + required: + - uuid + - profile-name + - wred-template-profile-1-0:wred-template-profile-pac + properties: + uuid: + type: string + profile-name: + type: string + enum: + - 'wred-template-profile-1-0:PROFILE_NAME_TYPE_WRED_TEMPLATE_PROFILE' + wred-template-profile-1-0:wred-template-profile-pac: + type: object + required: + - wred-template-profile-capability + - wred-template-profile-configuration + properties: + wred-profile-capability: + $ref: '#/components/schemas/WRED_TEMPLATE_PROFILE_CAPABILITY' + wred-profile-configuration: + $ref: '#/components/schemas/WRED_TEMPLATE_PROFILE_CONFIGURATION' + CO_CHANNEL_PROFILE_CAPABILITY: + type: object + CO_CHANNEL_PROFILE_CONFIGURATION: + type: object + POLICING_PROFILE_CAPABILITY: + type: object + POLICING_PROFILE_CONFIGURATION: + type: object + QOS_PROFILE_CAPABILITY: + type: object + QOS_PROFILE_CONFIGURATION: + type: object + SCHEDULER_PROFILE_CAPABILITY: + type: object + SCHEDULER_PROFILE_CONFIGURATION: + type: object + WRED_PROFILE_CAPABILITY: + type: object + WRED_PROFILE_CONFIGURATION: + type: object + WRED_TEMPLATE_PROFILE_CAPABILITY: + type: object + WRED_TEMPLATE_PROFILE_CONFIGURATION: + type: object + + LOGICAL_TERMINATION_POINT: + type: object + required: + - uuid + - layer-protocol + properties: + uuid: + type: string + ltp-augment-1-0:ltp-augment-pac: + $ref: '#/components/schemas/LTP_AUGMENT_PAC' + embedded-clock: + type: array + items: + $ref: '#/components/schemas/EMBEDDED_CLOCK' + layer-protocol: + type: array + items: + $ref: '#/components/schemas/LAYER_PROTOCOL' + LTP_AUGMENT_PAC: + type: object + EMBEDDED_CLOCK: + type: object + LAYER_PROTOCOL: + oneOf: + - description: 'air-interface' + type: object + required: + - local-id + - layer-protocol-name + - air-interface-2-0:air-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'air-interface-2-0:LAYER_PROTOCOL_NAME_TYPE_AIR_LAYER' + air-interface-2-0:air-interface-pac: + $ref: '#/components/schemas/AIR_INTERFACE_PAC' + - description: 'ethernet-container' + type: object + required: + - local-id + - layer-protocol-name + - ethernet-container-2-0:ethernet-container-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'ethernet-container-2-0:LAYER_PROTOCOL_NAME_TYPE_ETHERNET_CONTAINER_LAYER' + ethernet-container-2-0:ethernet-container-pac: + $ref: '#/components/schemas/ETHERNET_CONTAINER_PAC' + - description: 'hybrid-mw-structure' + type: object + required: + - local-id + - layer-protocol-name + - hybrid-mw-structure-2-0:hybrid-mw-structure-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'hybrid-mw-structure-2-0:LAYER_PROTOCOL_NAME_TYPE_HYBRID_MW_STRUCTURE_LAYER' + hybrid-mw-structure-2-0:hybrid-mw-structure-pac: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_PAC' + - description: 'mac-interface' + type: object + required: + - local-id + - layer-protocol-name + - mac-interface-1-0:mac-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'mac-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_MAC_LAYER' + mac-interface-1-0:mac-interface-pac: + $ref: '#/components/schemas/MAC_INTERFACE_PAC' + - description: 'pure-ethernet-structure' + type: object + required: + - local-id + - layer-protocol-name + - pure-ethernet-structure-2-0:pure-ethernet-structure-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'pure-ethernet-structure-2-0:LAYER_PROTOCOL_NAME_TYPE_PURE_ETHERNET_STRUCTURE_LAYER' + pure-ethernet-structure-2-0:pure-ethernet-structure-pac: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_PAC' + - description: 'vlan-interface' + type: object + required: + - local-id + - layer-protocol-name + - vlan-interface-1-0:vlan-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'vlan-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_VLAN_LAYER' + vlan-interface-1-0:vlan-interface-pac: + $ref: '#/components/schemas/VLAN_INTERFACE_PAC' + - description: 'wire-interface' + type: object + required: + - local-id + - layer-protocol-name + - wire-interface-2-0:wire-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'wire-interface-2-0:LAYER_PROTOCOL_NAME_TYPE_WIRE_LAYER' + wire-interface-2-0:wire-interface-pac: + $ref: '#/components/schemas/WIRE_INTERFACE_PAC' + - description: 'ip-interface' + type: object + required: + - local-id + - layer-protocol-name + - ip-interface-1-0:ip-interface-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'ip-interface-1-0:LAYER_PROTOCOL_NAME_TYPE_IP_LAYER' + ip-interface-1-0:ip-interface-pac: + $ref: '#/components/schemas/IP_INTERFACE_PAC' + - description: 'tdm-container' + type: object + required: + - local-id + - layer-protocol-name + - tdm-container-2-0:tdm-container-pac + properties: + local-id: + type: string + layer-protocol-name: + type: string + enum: + - 'tdm-container-2-0:LAYER_PROTOCOL_NAME_TYPE_TDM_CONTAINER_LAYER' + tdm-container-2-0:tdm-container-pac: + $ref: '#/components/schemas/TDM_CONTAINER_PAC' + FORWARDING_DOMAIN: + type: object + required: + - uuid + properties: + uuid: + type: string + fc: + type: array + items: + $ref: '#/components/schemas/FORWARDING_CONSTRUCT' + FORWARDING_CONSTRUCT: + type: object + required: + - uuid + properties: + uuid: + type: string + fc-port: + type: array + items: + $ref: '#/components/schemas/FORWARDING_CONSTRUCT_PORT' + FORWARDING_CONSTRUCT_PORT: + type: object + required: + - local-id + properties: + local-id: + type: string + LINK: + oneOf: + - description: 'generic' + type: object + required: + - uuid + - layer-protocol-name + - link-direction + - forwarding-domain + - link-port + properties: + uuid: + type: string + layer-protocol-name: + type: string + link-direction: + type: string + enum: + - 'core-model-1-4:FORWARDING_DIRECTION_BIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_UNIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_OMNIDIRECTIONAL' + - 'core-model-1-4:FORWARDING_DIRECTION_UNDEFINED_OR_UNKNOWN' + forwarding-domain: + type: array + items: + type: string + link-port: + type: array + items: + $ref: '#/components/schemas/LINK_PORT' + - description: 'minimum for rest' + type: object + required: + - uuid + - layer-protocol-name + - end-point-list + properties: + uuid: + type: string + layer-protocol-name: + type: string + end-point-list: + type: array + items: + type: object + required: + - control-construct + - logical-termination-point + - layer-protocol + properties: + control-construct: + type: string + logical-termination-point: + type: string + layer-protocol: + type: string + LINK_PORT: + oneOf: + - description: 'generic' + type: object + required: + - local-id + - link-port-direction + - logical-termination-point + properties: + local-id: + type: string + link-port-direction: + type: string + enum: + - 'core-model-1-4:PORT_DIRECTION_INPUT' + - 'core-model-1-4:PORT_DIRECTION_OUTPUT' + - 'core-model-1-4:PORT_DIRECTION_BIDIRECTIONAL' + - 'core-model-1-4:PORT_DIRECTION_OMNIDIRECTIONAL' + - 'core-model-1-4:PORT_DIRECTION_UNIDENTIFIED_OR_UNKNOWN' + logical-termination-point: + type: string + + AIR_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - air-interface-capability + - air-interface-configuration + - air-interface-status + - air-interface-historical-performances + additionalProperties: false + properties: + air-interface-capability: + $ref: '#/components/schemas/AIR_INTERFACE_CAPABILITY' + air-interface-configuration: + $ref: '#/components/schemas/AIR_INTERFACE_CONFIGURATION' + air-interface-status: + $ref: '#/components/schemas/AIR_INTERFACE_STATUS' + air-interface-historical-performances: + $ref: '#/components/schemas/AIR_INTERFACE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - air-interface-capability + - air-interface-configuration + - air-interface-status + - air-interface-current-performance + - air-interface-historical-performances + properties: + air-interface-capability: + $ref: '#/components/schemas/AIR_INTERFACE_CAPABILITY' + air-interface-configuration: + $ref: '#/components/schemas/AIR_INTERFACE_CONFIGURATION' + air-interface-status: + $ref: '#/components/schemas/AIR_INTERFACE_STATUS' + air-interface-current-performance: + $ref: '#/components/schemas/AIR_INTERFACE_CURRENT_PERFORMANCE' + air-interface-historical-performances: + $ref: '#/components/schemas/AIR_INTERFACE_HISTORICAL_PERFORMANCES' + AIR_INTERFACE_CAPABILITY: + type: object + AIR_INTERFACE_CONFIGURATION: + type: object + AIR_INTERFACE_STATUS: + type: object + AIR_INTERFACE_CURRENT_PERFORMANCE: + type: object + AIR_INTERFACE_HISTORICAL_PERFORMANCES: + type: object + + ETHERNET_CONTAINER_PAC: + oneOf: + - description: 'cache' + type: object + required: + - ethernet-container-capability + - ethernet-container-configuration + - ethernet-container-status + - ethernet-container-historical-performances + additionalProperties: false + properties: + ethernet-container-capability: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CAPABILITY' + ethernet-container-configuration: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CONFIGURATION' + ethernet-container-status: + $ref: '#/components/schemas/ETHERNET_CONTAINER_STATUS' + ethernet-container-historical-performances: + $ref: '#/components/schemas/ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - ethernet-container-capability + - ethernet-container-configuration + - ethernet-container-status + - ethernet-container-current-performance + - ethernet-container-historical-performances + properties: + ethernet-container-capability: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CAPABILITY' + ethernet-container-configuration: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CONFIGURATION' + ethernet-container-status: + $ref: '#/components/schemas/ETHERNET_CONTAINER_STATUS' + ethernet-container-current-performance: + $ref: '#/components/schemas/ETHERNET_CONTAINER_CURRENT_PERFORMANCE' + ethernet-container-historical-performances: + $ref: '#/components/schemas/ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES' + ETHERNET_CONTAINER_CAPABILITY: + type: object + ETHERNET_CONTAINER_CONFIGURATION: + type: object + ETHERNET_CONTAINER_STATUS: + type: object + ETHERNET_CONTAINER_CURRENT_PERFORMANCE: + type: object + ETHERNET_CONTAINER_HISTORICAL_PERFORMANCES: + type: object + + HYBRID_MW_STRUCTURE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - hybrid-mw-structure-capability + - hybrid-mw-structure-configuration + - hybrid-mw-structure-status + - hybrid-mw-structure-historical-performances + additionalProperties: false + properties: + hybrid-mw-structure-capability: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CAPABILITY' + hybrid-mw-structure-configuration: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CONFIGURATION' + hybrid-mw-structure-status: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_STATUS' + hybrid-mw-structure-historical-performances: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - hybrid-mw-structure-capability + - hybrid-mw-structure-configuration + - hybrid-mw-structure-status + - hybrid-mw-structure-current-performance + - hybrid-mw-structure-historical-performances + properties: + hybrid-mw-structure-capability: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CAPABILITY' + hybrid-mw-structure-configuration: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CONFIGURATION' + hybrid-mw-structure-status: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_STATUS' + hybrid-mw-structure-current-performance: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_CURRENT_PERFORMANCE' + hybrid-mw-structure-historical-performances: + $ref: '#/components/schemas/HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES' + HYBRID_MW_STRUCTURE_CAPABILITY: + type: object + HYBRID_MW_STRUCTURE_CONFIGURATION: + type: object + HYBRID_MW_STRUCTURE_STATUS: + type: object + HYBRID_MW_STRUCTURE_CURRENT_PERFORMANCE: + type: object + HYBRID_MW_STRUCTURE_HISTORICAL_PERFORMANCES: + type: object + + MAC_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - mac-interface-capability + - mac-interface-configuration + - mac-interface-status + properties: + mac-interface-capability: + $ref: '#/components/schemas/MAC_INTERFACE_CAPABILITY' + mac-interface-configuration: + $ref: '#/components/schemas/MAC_INTERFACE_CONFIGURATION' + mac-interface-status: + $ref: '#/components/schemas/MAC_INTERFACE_STATUS' + - description: 'live' + type: object + required: + - mac-interface-capability + - mac-interface-configuration + - mac-interface-status + properties: + mac-interface-capability: + $ref: '#/components/schemas/MAC_INTERFACE_CAPABILITY' + mac-interface-configuration: + $ref: '#/components/schemas/MAC_INTERFACE_CONFIGURATION' + mac-interface-status: + $ref: '#/components/schemas/MAC_INTERFACE_STATUS' + MAC_INTERFACE_CAPABILITY: + type: object + MAC_INTERFACE_CONFIGURATION: + type: object + MAC_INTERFACE_STATUS: + type: object + + PURE_ETHERNET_STRUCTURE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - pure-ethernet-structure-capability + - pure-ethernet-structure-configuration + - pure-ethernet-structure-status + - pure-ethernet-structure-historical-performances + additionalProperties: false + properties: + pure-ethernet-structure-capability: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CAPABILITY' + pure-ethernet-structure-configuration: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CONFIGURATION' + pure-ethernet-structure-status: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_STATUS' + pure-ethernet-structure-historical-performances: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - pure-ethernet-structure-capability + - pure-ethernet-structure-configuration + - pure-ethernet-structure-status + - pure-ethernet-structure-current-performance + - pure-ethernet-structure-historical-performances + properties: + pure-ethernet-structure-capability: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CAPABILITY' + pure-ethernet-structure-configuration: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CONFIGURATION' + pure-ethernet-structure-status: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_STATUS' + pure-ethernet-structure-current-performance: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_CURRENT_PERFORMANCE' + pure-ethernet-structure-historical-performances: + $ref: '#/components/schemas/PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES' + PURE_ETHERNET_STRUCTURE_CAPABILITY: + type: object + PURE_ETHERNET_STRUCTURE_CONFIGURATION: + type: object + PURE_ETHERNET_STRUCTURE_STATUS: + type: object + PURE_ETHERNET_STRUCTURE_CURRENT_PERFORMANCE: + type: object + PURE_ETHERNET_STRUCTURE_HISTORICAL_PERFORMANCES: + type: object + + VLAN_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - vlan-interface-capability + - vlan-interface-configuration + additionalProperties: false + properties: + vlan-interface-capability: + $ref: '#/components/schemas/VLAN_INTERFACE_CAPABILITY' + vlan-interface-configuration: + $ref: '#/components/schemas/VLAN_INTERFACE_CONFIGURATION' + - description: 'live' + type: object + required: + - vlan-interface-capability + - vlan-interface-configuration + properties: + vlan-interface-capability: + $ref: '#/components/schemas/VLAN_INTERFACE_CAPABILITY' + vlan-interface-configuration: + $ref: '#/components/schemas/VLAN_INTERFACE_CONFIGURATION' + VLAN_INTERFACE_CAPABILITY: + type: object + VLAN_INTERFACE_CONFIGURATION: + type: object + + WIRE_INTERFACE_PAC: + oneOf: + - description: 'cache' + type: object + required: + - wire-interface-capability + - wire-interface-configuration + - wire-interface-status + - wire-interface-historical-performances + additionalProperties: false + properties: + wire-interface-capability: + $ref: '#/components/schemas/WIRE_INTERFACE_CAPABILITY' + wire-interface-configuration: + $ref: '#/components/schemas/WIRE_INTERFACE_CONFIGURATION' + wire-interface-status: + $ref: '#/components/schemas/WIRE_INTERFACE_STATUS' + wire-interface-historical-performances: + $ref: '#/components/schemas/WIRE_INTERFACE_HISTORICAL_PERFORMANCES' + - description: 'live' + type: object + required: + - wire-interface-capability + - wire-interface-configuration + - wire-interface-status + - wire-interface-current-performance + - wire-interface-historical-performances + properties: + wire-interface-capability: + $ref: '#/components/schemas/WIRE_INTERFACE_CAPABILITY' + wire-interface-configuration: + $ref: '#/components/schemas/WIRE_INTERFACE_CONFIGURATION' + wire-interface-status: + $ref: '#/components/schemas/WIRE_INTERFACE_STATUS' + wire-interface-current-performance: + $ref: '#/components/schemas/WIRE_INTERFACE_CURRENT_PERFORMANCE' + wire-interface-historical-performances: + $ref: '#/components/schemas/WIRE_INTERFACE_HISTORICAL_PERFORMANCES' + WIRE_INTERFACE_CAPABILITY: + type: object + WIRE_INTERFACE_CONFIGURATION: + type: object + WIRE_INTERFACE_STATUS: + type: object + WIRE_INTERFACE_CURRENT_PERFORMANCE: + type: object + WIRE_INTERFACE_HISTORICAL_PERFORMANCES: + type: object + IP_INTERFACE_PAC: + type: object + required: + - ip-interface-capability + - ip-interface-configuration + - ip-interface-status + properties: + ip-interface-capability: + $ref: '#/components/schemas/IP_INTERFACE_CAPABILITY' + ip-interface-configuration: + $ref: '#/components/schemas/IP_INTERFACE_CONFIGURATION' + ip-interface-status: + $ref: '#/components/schemas/IP_INTERFACE_STATUS' + IP_INTERFACE_CAPABILITY: + type: object + IP_INTERFACE_CONFIGURATION: + type: object + IP_INTERFACE_STATUS: + type: object + + TDM_CONTAINER_PAC: + type: object + required: + - tdm-container-capability + - tdm-container-configuration + - tdm-container-status + properties: + tdm-container-capability: + $ref: '#/components/schemas/TDM_CONTAINER_CAPABILITY' + tdm-container-configuration: + $ref: '#/components/schemas/TDM_CONTAINER_CONFIGURATION' + tdm-container-status: + $ref: '#/components/schemas/TDM_CONTAINER_STATUS' + TDM_CONTAINER_CAPABILITY: + type: object + TDM_CONTAINER_CONFIGURATION: + type: object + TDM_CONTAINER_STATUS: + type: object + + securitySchemes: + apiKeyAuth: + type: apiKey + in: header + name: operation-key + basicAuth: + type: http + scheme: basic diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.plantuml b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.plantuml index cdb91764..56972ce6 100644 --- a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.plantuml +++ b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.plantuml @@ -10,10 +10,6 @@ participant "Data" as Data participant "Collection" as Collection participant "/v1/regard-controller-attribute-value-change" as RCAVC -participant "/v1/regard-device-alarm" as RDA -participant "/v1/regard-device-attribute-value-change" as RDAVC -participant "/v1/regard-device-object-deletion" as RDOD -participant "/v1/regard-device-object-creation" as RDOC group Preparation Data --\\o Postman : {servers} @@ -22,7 +18,7 @@ group Preparation end note over Postman, RCAVC - For each service there are two testcases to be executed. + Two testcases to be executed. Both tests differ in the provided requestBody: - an invalid requestBody according to OAS - no requestBody provided at all @@ -38,42 +34,6 @@ group /v1/regard-controller-attribute-value-change end note end -group /v1/regard-device-alarm - Collection --\\o Postman : {servers} - Postman -> RDA : (a) {invalidRequestBody} \n(b) no requestBody - Postman <-- RDA : 400 - note right Postman #Orange - check for 400 - end note -end - -group /v1/regard-device-attribute-value-change - Collection --\\o Postman : {servers} - Postman -> RDAVC : (a) {invalidRequestBody} \n(b) no requestBody - Postman <-- RDAVC : 400 - note right Postman #Orange - check for 400 - end note -end - -group /v1/regard-device-object-deletion - Collection --\\o Postman : {servers} - Postman -> RDOD : (a) {invalidRequestBody} \n(b) no requestBody - Postman <-- RDOD : 400 - note right Postman #Orange - check for 400 - end note -end - -group /v1/regard-device-object-creation - Collection --\\o Postman : {servers} - Postman -> RDOC : (a) {invalidRequestBody} \n(b) no requestBody - Postman <-- RDOC : 400 - note right Postman #Orange - check for 400 - end note -end - deactivate Postman @enduml diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.png b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.png index 3aff01f6eb2b22235675080a45d8b38ab2802b1c..42b5b6efd80bfe1621a871fc20f0b72e2fc1ed87 100644 GIT binary patch literal 22370 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

8SDot(Y@xxG4S;O~TqQdDTz$$_Zv8 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 R;y-|!m4)r8(i2w`{s(z<`Vs&D literal 70875 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

Fwf+TB-z(7W-m!!%4g&;OV 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 diff --git a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+testcase.invalidOrMissingRequestBody.receiver.json b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+testcase.invalidOrMissingRequestBody.receiver.json index d74473ce..25bc116f 100644 --- a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+testcase.invalidOrMissingRequestBody.receiver.json +++ b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+testcase.invalidOrMissingRequestBody.receiver.json @@ -1,4 +1,3 @@ - { "info": { "name": "mwdi+testcase.invalidOrMissingRequestBody.receiver", @@ -480,20 +479,18 @@ "response": [] }, { - "name": "/1/regard-device-alarm - requestBody invalid", + "name": "/v1/regard-controller-attribute-value-change - requestBody missing", "event": [ { "listen": "prerequest", "script": { "exec": [ - "logger.struc(\"\\n===== /v1/regard-device-alarm ============================================\");\r", + "logger.struc(\"\\n===== /v1/regard-controller-attribute-value-change ============================================\");\r", "\r", "\r", "/****************************************************************************************\r", "* Loading Input Data\r", "****************************************************************************************/\r", - "var deviceAlarm_mountName;\r", - "var deviceAlarm_alarmTypeId;\r", "var serverInfo = {};\r", "var dummyServerInfo = {};\r", "try {\r", @@ -502,9 +499,6 @@ " collectionInputList = pm.environment.get(\"collectionInputList\");\r", " collectionInfo = ExtractCollectionInput(collectionInputList, \"invalidOrMissingRequestBody.receiver\");\r", "\r", - " deviceAlarm_mountName = collectionInfo.deviceAlarm_mountName;\r", - " deviceAlarm_alarmTypeId = collectionInfo.deviceAlarm_alarmTypeId;\r", - "\r", " let serverList;\r", " serverList = pm.environment.get(\"serverList\");\r", " let serverToBeApplied;\r", @@ -521,35 +515,33 @@ "* Processing\r", "****************************************************************************************/\r", "\r", - "var alarmEventSequenceNumber = \"\";\r", + "var counter = \"\";\r", "var timestamp = \"\";\r", "var resource = \"\";\r", - "var alarmTypeId = \"\";\r", - "var alarmTypeQualifier = \"\";\r", - "var problemSeverity = \"\";\r", + "var attributeName = \"\";\r", + "var newValue = \"\";\r", + "\r", + "var dummyMountName = \"dummyMountName\"; //use a dummy mountname to not actually change the MWDI database\r", "\r", "try {\r", - " alarmEventSequenceNumber = 32;\r", + " counter = 32;\r", " timestamp = \"2023-07-11T08:21:50+01:00\";\r", - " resource = \"/core-model-1-4:network-control-domain=live/control-construct=\" + deviceAlarm_mountName;\r", - " alarmTypeId = deviceAlarm_alarmTypeId;\r", - " alarmTypeQualifier = \"\";\r", - " problemSeverity = \"major\";\r", + " resource = \"/core-model-1-4:network-control-domain=live/control-construct=odl-1/logical-termination-point=\" + dummyMountName + \"/layer-protocol=0/mount-point-1-0:mount-point-pac/mount-point-status\";\r", + " attributeName = \"connection-status\";\r", + " newValue = \"connected\";\r", "\r", "} catch (error) {\r", " logger.error(\"! Input data could not be calculated.\")\r", "}\r", "\r", "/* example requestBody\r", - "{\r", - " \"notification-proxy-1-0:alarm-event-notification\":\r", + "{\"notification-proxy-1-0:attribute-value-changed-notification\":\r", " {\r", - " \"alarm-event-sequence-number\": 3931,\r", - " \"timestamp\": \"2023-07-11T08:21:50+01:00\",\r", - " \"resource\": \"/core-model-1-4:network-control-domain=live/control-construct=513250008\",\r", - " \"alarm-type-id\":\"siae-alarms-1-0:radioEquipConcatenationAlarm\",\r", - " \"alarm-type-qualifier\":\"\",\r", - " \"problem-severity\":\"major\"\r", + " \"counter\":\"32\",\r", + " \"timestamp\":\"2023-07-11T08:21:50+01:00\",\r", + " \"resource\":\"/core-model-1-4:network-control-domain=live/control-construct=odl-1/logical-termination-point=305251234/layer-protocol=0/mount-point-1-0:mount-point-pac/mount-point-status\"\r", + " \"attribute-name\":\"connection-status\",\r", + " \"new-value\":\"connected\"\r", " }\r", "}\r", "*/\r", @@ -560,28 +552,27 @@ "****************************************************************************************/\r", "try {\r", " let servicePath;\r", - " servicePath = \"/v1/regard-device-alarm\";\r", + " servicePath = \"/v1/regard-controller-attribute-value-change\";\r", "\r", " let server;\r", " server = serverInfo.server;\r", "\r", " let uri = server + servicePath;\r", "\r", - "\r", " let requestBody;\r", " requestBody = ''\r", " + '{'\r", - " + '\"notification-proxy-1-0:alarm-event-notification\":'\r", + " + '\"notification-proxy-1-0:attribute-value-changed-notification\":'\r", " + '{'\r", - " // + '\"alarm-event-sequence-number\": ' + alarmEventSequenceNumber + ','\r", + " // + '\"counter\": ' + counter + ','\r", " + '\"timestamp\": \"' + timestamp + '\",'\r", " + '\"resource\": \"' + resource + '\",'\r", - " + '\"alarm-type-id\": \"' + alarmTypeId + '\",'\r", - " + '\"alarm-type-qualifier\": \"' + alarmTypeQualifier + '\",'\r", - " + '\"problem-severity\": \"' + problemSeverity + '\"'\r", + " + '\"attribute-name\": \"' + attributeName + '\",'\r", + " + '\"new-value\": \"' + newValue + '\"'\r", " + '}'\r", " + '}';\r", "\r", + "\r", " pm.variables.clear();\r", "\r", " pm.variables.set(\"uri\", uri);\r", @@ -688,2271 +679,7 @@ "* Processing\r", "****************************************************************************************/\r", "// returns 400, so no responseBody to be checked\r", - "var operationName = \"/v1/regard-device-alarm\";\r", - "\r", - "try {\r", - " if (uri != dummyUri) {\r", - " logger.log(\"Analysis:\");\r", - "\r", - " pm.test(operationName + \" returned 400\", function () {\r", - " pm.expect(responseCode).to.equal(400)\r", - " });\r", - " if (responseCode == 400) {\r", - " logger.log(\" - ok: \" + operationName + \" returned 400\")\r", - " } else {\r", - " logger.log(\" - FAIL: \" + operationName + \" provided \" + responseCode + \" instead of 400\")\r", - " }\r", - " }\r", - "\r", - "} catch (error) {\r", - " logger.error(\"! validation could not be completely executed.\")\r", - "}\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Setting Collection Variables\r", - "****************************************************************************************/\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Functions\r", - "****************************************************************************************/\r", - "function ExtractServerInformation(serverList, searchedServerName) {\r", - " try {\r", - " for (let i = 0; i < serverList.length; i++) {\r", - " if (serverList[i].serverName == searchedServerName) {\r", - " return serverList[i]\r", - " }\r", - " }\r", - " } catch (error) {\r", - " logger.error(\"! serverList not found or faulty\");\r", - " return {}\r", - " }\r", - " logger.warn(\"Server could not be found in serverList.\");\r", - " return {}\r", - "}\r", - "\r", - "" - ], - "type": "text/javascript", - "packages": {} - } - } - ], - "request": { - "auth": { - "type": "noauth" - }, - "method": "POST", - "header": [], - "body": { - "mode": "raw", - "raw": "{{requestBody}}", - "options": { - "raw": { - "language": "json" - } - } - }, - "url": { - "raw": "{{uri}}", - "host": [ - "{{uri}}" - ] - } - }, - "response": [] - }, - { - "name": "/v1/regard-device-attribute-value-change - requestBody invalid", - "event": [ - { - "listen": "prerequest", - "script": { - "exec": [ - "logger.struc(\"\\n===== /v1/regard-device-attribute-value-change ============================================\");\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Loading Input Data\r", - "****************************************************************************************/\r", - "var attributeValueChange_target = \"\";\r", - "var attributeValueChange_attributeName = \"\";\r", - "var attributeValueChange_newValue = \"\";\r", - "var serverInfo = {};\r", - "var dummyServerInfo = {};\r", - "try {\r", - " let collectionInfo;\r", - " let collectionInputList;\r", - " collectionInputList = pm.environment.get(\"collectionInputList\");\r", - " collectionInfo = ExtractCollectionInput(collectionInputList, \"invalidOrMissingRequestBody.receiver\");\r", - "\r", - " attributeValueChange_target = collectionInfo.attributeValueChange_target;\r", - " attributeValueChange_attributeName = collectionInfo.attributeValueChange_attributeName;\r", - " attributeValueChange_newValue = collectionInfo.attributeValueChange_newValue;\r", - "\r", - "\r", - " let serverList;\r", - " serverList = pm.environment.get(\"serverList\");\r", - " let serverToBeApplied;\r", - " serverToBeApplied = collectionInfo.serverToBeApplied;\r", - " serverInfo = ExtractServerInformation(serverList, serverToBeApplied);\r", - " dummyServerInfo = ExtractServerInformation(serverList, \"dummy\");\r", - "\r", - "} catch (error) {\r", - " logger.error(\"! Input data could not be loaded.\")\r", - "}\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Processing\r", - "****************************************************************************************/\r", - "\r", - "\r", - "var counter = \"\";\r", - "var timestamp = \"\";\r", - "var objectPath = \"\";\r", - "var attributeName = \"\";\r", - "var newValue =\"\";\r", - "\r", - "try {\r", - " counter = 32;\r", - " timestamp = \"2023-07-11T08:21:50+01:00\";\r", - " objectPath = \"/core-model-1-4:network-control-domain=live/control-construct=\" + attributeValueChange_target;\r", - " attributeName = attributeValueChange_attributeName;\r", - " newValue = attributeValueChange_newValue;\r", - "\r", - "} catch (error) {\r", - " logger.error(\"! Input data could not be calculated.\")\r", - "}\r", - "\r", - "/* example requestBody\r", - "{\r", - " \"notification-proxy-1-0:attribute-value-changed-notification\":\r", - " {\"\r", - " counter\": 32,\r", - " \"timestamp\": \"2023-07-11T08:21:50+01:00\",\r", - " \"object-path\": \"/core-model-1-4:network-control-domain=live/control-construct=513250006/logical-termination-point=LTP-MWPS-TTP-ODU-A/ltp-augment-1-0:ltp-augment-pac\",\r", - " \"attribute-name\": \"external-label\",\r", - " \"new-value\": \"External label not yet defined.\"\r", - " }\r", - "}\r", - "*/\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Setting Local Variables and Preparing the Request\r", - "****************************************************************************************/\r", - "try {\r", - " let servicePath;\r", - " servicePath = \"/v1/regard-device-attribute-value-change\";\r", - "\r", - " let server;\r", - " server = serverInfo.server;\r", - "\r", - " let uri = server + servicePath;\r", - "\r", - "\r", - " let requestBody;\r", - " requestBody = ''\r", - " + '{'\r", - " + '\"notification-proxy-1-0:attribute-value-changed-notification\":'\r", - " + '{'\r", - " // + '\"counter\": ' + counter + ','\r", - " + '\"timestamp\": \"' + timestamp + '\",'\r", - " + '\"object-path\": \"' + objectPath + '\",'\r", - " + '\"attribute-name\": \"' + attributeName + '\",'\r", - " + '\"new-value\": \"' + newValue + '\"'\r", - " + '}'\r", - " + '}';\r", - "\r", - " pm.variables.clear();\r", - "\r", - " pm.variables.set(\"uri\", uri);\r", - " pm.variables.set(\"requestBody\", requestBody);\r", - " \r", - " pm.request.headers.upsert({ key: \"Authorization\", value: serverInfo.authorizationCode });\r", - " pm.request.headers.upsert({ key: \"operation-key\", value: serverInfo.operationKey });\r", - " pm.request.headers.upsert({ key: \"user\", value: serverInfo.userName });\r", - " pm.request.headers.upsert({ key: \"originator\", value: serverInfo.originator });\r", - " pm.request.headers.upsert({ key: \"x-correlator\", value: serverInfo.xCorrelator });\r", - " pm.request.headers.upsert({ key: \"trace-indicator\", value: serverInfo.traceIndicator });\r", - " pm.request.headers.upsert({ key: \"customer-journey\", value: serverInfo.customerJourney });\r", - "\r", - " pm.request.headers.upsert({ key: \"Accept\", value: \"application/json\" });\r", - " pm.request.headers.upsert({ key: \"Content-Type\", value: \"application/json\" })\r", - "\r", - "} catch (error) {\r", - " logger.error(\"! Local variables could not be set.\")\r", - "}\r", - "\r", - "\r", - "/****************************************************************************************\r", - "* Functions\r", - "****************************************************************************************/\r", - "function ExtractServerInformation(serverList, searchedServerName) {\r", - " try {\r", - " for(let i=0; i