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 00000000..3cb0497e Binary files /dev/null and b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/_deprecated-services/mwdi+diagram.invalidOrMissingRequestBody.receiver.deprecated.png differ 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 3aff01f6..42b5b6ef 100644 Binary files a/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.png and b/testing/2_functional/invalidOrMissingRequestBody/v2.0.1/Receiver/mwdi+diagram.invalidOrMissingRequestBody.receiver.png differ 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