diff --git a/SOL003/VNFLifecycleManagement-API/CancelOperationTask.robot b/SOL003/VNFLifecycleManagement-API/CancelOperationTask.robot index 5482d6018849e15ef27a7755f4bcfb0953335993..17df4fcdad89121be6b0d93f88c071b7ca69545c 100644 --- a/SOL003/VNFLifecycleManagement-API/CancelOperationTask.robot +++ b/SOL003/VNFLifecycleManagement-API/CancelOperationTask.robot @@ -12,7 +12,7 @@ POST Cancel operation task ... Test title: POST Cancel operation task ... Test objective: The POST method initiates cancelling an ongoing VNF lifecycle operation while it is being executed or rolled back, i.e. the "VNF LCM operation occurrence" is either in "PROCESSING" or "ROLLING_BACK" state. ... Pre-conditions: The "VNF LCM operation occurrence" is either in "PROCESSING" or "ROLLING_BACK" state. - ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF instance status equal to FAILED_TEMP @@ -25,7 +25,7 @@ POST Cancel operation task Conflict ... Test title: POST Cancel operation task Conflict ... Test objective: The POST method is NOT cancelling an ongoing VNF lifecycle operation due to the fact that the VNF instance resource is not in STARTING, PROCESSING or ROLLING_BACK state ... Pre-conditions: The "VNF LCM operation occurrence" is not in STARTING, PROCESSING or ROLLING_BACK state - ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -38,7 +38,7 @@ POST Cancel operation task Not Found ... Test title: POST Cancel operation task Not Found ... Test objective: The objective is to test that POST method cannot cancel a VNF lifecycle operation because the resource is not found ... Pre-conditions: none - ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -51,7 +51,7 @@ GET Cancel operation task - Method not implemented ... Test title: GET Cancel operation task - Method not implemented ... Test objective: The objective is to test that GET method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.17.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -63,7 +63,7 @@ PUT Cancel operation task - Method not implemented ... Test title: PUT Cancel operation task - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.17.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -75,7 +75,7 @@ PATCH Cancel operation task - Method not implemented ... Test title: PATCH Cancel operation task - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.17.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -87,9 +87,34 @@ DELETE Cancel operation task - Method not implemented ... Test title: DELETE Cancel operation task - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.17.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Cancel operation task - Check HTTP Response Status Code Is 405 \ No newline at end of file + Check HTTP Response Status Code Is 405 + +POST Cancel operation task with permitted authorization scope + [Documentation] Test ID: 7.3.1.16.8 + ... Test title: POST Cancel operation task with permitted authorization scope + ... Test objective: The POST method initiates cancelling an ongoing VNF lifecycle operation while it is being executed or rolled back, i.e. the "VNF LCM operation occurrence" is either in "PROCESSING" or "ROLLING_BACK" state. + ... Pre-conditions: The "VNF LCM operation occurrence" is either in "PROCESSING" or "ROLLING_BACK" state with permitted authorization scope. + ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF instance status equal to FAILED_TEMP + POST Cancel operation task with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check operation resource state is FAILED_TEMP + +POST Cancel operation task with not permitted authorization scope + [Documentation] Test ID: 7.3.1.16.9 + ... Test title: POST Cancel operation task with not permitted authorization scope + ... Test objective: The POST method initiates cancelling an ongoing VNF lifecycle operation while it is being executed or rolled back, i.e. the "VNF LCM operation occurrence" is either in "PROCESSING" or "ROLLING_BACK" state. + ... Pre-conditions: The "VNF LCM operation occurrence" is either in "PROCESSING" or "ROLLING_BACK" state with not permitted authorization scope. + ... Reference: Clause 5.4.17.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF instance status equal to FAILED_TEMP + POST Cancel operation task with not permitted authorization scope + Check HTTP Response Status Code Is 403 \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/CancelOperationWorkflow.robot b/SOL003/VNFLifecycleManagement-API/CancelOperationWorkflow.robot index f0dd71e4dff88527817fa327574ca1cd7c91c18d..393779ecf5951c8e70f9de00093b112a23accde1 100644 --- a/SOL003/VNFLifecycleManagement-API/CancelOperationWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/CancelOperationWorkflow.robot @@ -18,7 +18,7 @@ Cancel a VNF LCM Operation - STARTING ... Test title: Cancel a VNF LCM Operation - STARTING ... Test objective: The objective is to test the workflow for Cancelling a VNF LCM Operation being in the STARTING state ... Pre-conditions: The VNF lifecycle management operation occurrence is in STARTING state. NFVO is subscribed to VNF LCM Operation Occurrence notifications (Test ID 5.4.20.1) - ... Reference: Clause 5.4.17 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.17 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF lifecycle management operation occurrence is in ROLLED_BACK state @@ -34,7 +34,7 @@ Cancel a VNF LCM Operation - PROCESSING - ROLLING_BACK ... Test title: Cancel a VNF LCM Operation - PROCESSING - ROLLING_BACK ... Test objective: The objective is to test the workflow for Cancelling a VNF LCM Operation being either in the PROCESSIONG or ROLLING_BACK state ... Pre-conditions: The VNF lifecycle management operation occurrence is in PROCESSING or ROLLING_BACK state. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state diff --git a/SOL003/VNFLifecycleManagement-API/ChangeCurrentVNFPackageTask.robot b/SOL003/VNFLifecycleManagement-API/ChangeCurrentVNFPackageTask.robot index e95699840c79717807358f6a952eb6e21a41b1fd..7b05fd10558f16104453aa7a36a4f06aac7e3238 100644 --- a/SOL003/VNFLifecycleManagement-API/ChangeCurrentVNFPackageTask.robot +++ b/SOL003/VNFLifecycleManagement-API/ChangeCurrentVNFPackageTask.robot @@ -13,7 +13,7 @@ POST Change current VNF Package Task ... Test title: POST Change current VNF Package Task ... Test objective: The objective is to test that the POST method changes the current VNF package on which the VNF instance is based. ... Pre-conditions: none - ... Reference: Clause 5.4.11a.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11a.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: in response header Location shall not be null @@ -26,7 +26,7 @@ POST Change current VNF Package Task - Conflict ... Test title: POST Change current VNF Package Task - Conflict ... Test objective: The objective is to test that the POST method cannot change the current VNF package task when another lifecycle management operation is ongoing. ... Pre-conditions: none - ... Reference: Clause 5.4.11a.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11a.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: There is another lifecycle management operation ongoing. ... Post-Conditions: none @@ -39,7 +39,7 @@ GET Change current VNF Package Task - Method not implemented ... Test title: GET Change current VNF Package Task - Method not implemented ... Test objective: The objective is to test that GET method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11a.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11a.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -51,7 +51,7 @@ PUT Change current VNF Package Task - Method not implemented ... Test title: PUT Change current VNF Package Task - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11a.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11a.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -63,7 +63,7 @@ PATCH Change current VNF Package Task - Method not implemented ... Test title: PATCH Change current VNF Package Task - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11a.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11a.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -75,12 +75,38 @@ DELETE Change current VNF Package Task - Method not implemented ... Test title: DELETE Change current VNF Package Task - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11a.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11a.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Change Current VNF Package Task Check HTTP Response Status Code Is 405 + +POST Change current VNF Package Task with permitted authorization scope + [Documentation] Test ID: 7.3.1.37.7 + ... Test title: POST Change current VNF Package Task with permitted authorization scope + ... Test objective: The objective is to test that the POST method changes the current VNF package on which the VNF instance is based with permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.11a.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Change Current VNF Package Task with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Location Header Contains URI of Created Resource + +POST Change current VNF Package Task with not permitted authorization scope + [Documentation] Test ID: 7.3.1.37.8 + ... Test title: POST Change current VNF Package Task with not permitted authorization scope + ... Test objective: The objective is to test that the POST method changes the current VNF package on which the VNF instance is based with not permitted authorization scope with not permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.11a.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Change Current VNF Package Task with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails *** Keywords *** Check resource existence diff --git a/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityTask.robot b/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityTask.robot index 5c6a9b2df8f5fbb6f4115ae939bd9a2591871618..f9fd3ebb7d8f00f1cf2f80eacd08e3c905194213 100644 --- a/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityTask.robot +++ b/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityTask.robot @@ -12,7 +12,7 @@ POST Change external VNF connectivity ... Test title: POST Change external VNF connectivity ... Test objective: The objective is to test that POST method trigger a change in VNF external connectivity ... Pre-conditions: none - ... Reference: Clause 5.4.11.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: in response header Location shall not be null @@ -26,7 +26,7 @@ GET Change external VNF connectivity - Method not implemented ... Test title: GET Change external VNF connectivity - Method not implemented ... Test objective: The objective is to test that GET method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -38,7 +38,7 @@ PUT Change external VNF connectivity - Method not implemented ... Test title: PUT Change external VNF connectivity - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -50,7 +50,7 @@ PATCH Change external VNF connectivity - Method not implemented ... Test title: PATCH Change external VNF connectivity - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -62,9 +62,35 @@ DELETE Change external VNF connectivity - Method not implemented ... Test title: DELETE Change external VNF connectivity - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.11.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Change External VNF Connectivity - Check HTTP Response Status Code Is 405 \ No newline at end of file + Check HTTP Response Status Code Is 405 + +POST Change external VNF connectivity with permitted authorization scope + [Documentation] Test ID: 7.3.1.10.6 + ... Test title: POST Change external VNF connectivity with permitted authorization scope + ... Test objective: The objective is to test that POST method trigger a change in VNF external connectivity with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.11.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Change External VNF Connectivity with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +POST Change external VNF connectivity with not permitted authorization scope + [Documentation] Test ID: 7.3.1.10.7 + ... Test title: POST Change external VNF connectivity with not permitted authorization scope + ... Test objective: The objective is to test that POST method trigger a change in VNF external connectivity with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.11.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Change External VNF Connectivity with not permitted authorization scope + Check HTTP Response Status Code Is 403 \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityWorkflow.robot b/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityWorkflow.robot index f419f744adbdfd25455b15e56622572d481f9872..29b1c2b50d6e40fc73b7ca5da8c76d4b778b4be9 100644 --- a/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/ChangeExternalVNFConnectivityWorkflow.robot @@ -17,7 +17,7 @@ Change external connectivity of VNF Workflow ... Test title: Change external connectivity of VNF Workflow ... Test objective: The objective is to change the external connectivity of a VNF instance. ... Pre-conditions: VNF instance in INSTANTIATED state - ... Reference: Clause 5.4.11 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.11 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM. The VNFD supports the external connectivity change ... Post-Conditions: VNF instance still in INSTANTIATED state and external connectivity of the VNF is changed diff --git a/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourTask.robot b/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourTask.robot index c0ea923096a7f21714118766b735566391ea12d5..11b9418739f18700ef586b5c516ab8790f5f03b9 100644 --- a/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourTask.robot +++ b/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourTask.robot @@ -12,11 +12,11 @@ POST Change deployment flavour of a vnfInstance ... Test title: POST Change deployment flavour of a vnfInstance ... Test objective: The objective is to test that POST method trigger a change in VNF deployment flavour ... Pre-conditions: VNF instance resource is not in NOT-INSTANTIATED state - ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: in response header Location shall not be null - POST Change VNF deployment flavour + POST Change VNF deployment flavour Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location Check Individual VNF LCM operation occurrence operationState is STARTING @@ -26,7 +26,7 @@ POST Change deployment flavour of a vnfInstance Conflict (Not-Instantiated) ... Test title: POST Change deployment flavour of a vnfInstance Conflict (Not-Instantiated) ... Test objective: The objective is to test that POST method cannot trigger a change in VNF deployment flavour because of a conflict with the state of the VNF instance resource. (VNF instance resource is not in NOT-INSTANTIATED state) ... Pre-conditions: VNF instance resource is in NOT-INSTANTIATED state - ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -39,7 +39,7 @@ POST Change deployment flavour of a vnfInstance Not Found ... Test title: POST Change deployment flavour of a vnfInstance Not Found ... Test objective: The objective is to test that POST method cannot trigger a change in VNF deployment flavour because the VNF instance resource is not found. ... Pre-conditions: the VNF instance resource is not existing - ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -52,7 +52,7 @@ GET Change deployment flavour VNFInstance - Method not implemented ... Test title: GET Change deployment flavour VNFInstance - Method not implemented ... Test objective: The objective is to test that GET method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.7.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -64,7 +64,7 @@ PUT Change deployment flavour VNFInstance - Method not implemented ... Test title: PUT Change deployment flavour VNFInstance - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.7.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -76,7 +76,7 @@ PATCH Change deployment flavour VNFInstance - Method not implemented ... Test title: PATCH Change deployment flavour VNFInstance - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.7.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -88,9 +88,36 @@ DELETE Change deployment flavour VNFInstance - Method not implemented ... Test title: DELETE Change deployment flavour VNFInstance - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.7.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Change VNF deployment flavour - Check HTTP Response Status Code Is 405 \ No newline at end of file + Check HTTP Response Status Code Is 405 + +POST Change deployment flavour of a vnfInstance with permitted authorization scope + [Documentation] Test ID: 7.3.1.6.8 + ... Test title: POST Change deployment flavour of a vnfInstance with permitted authorization scope + ... Test objective: The objective is to test that POST method trigger a change in VNF deployment flavour with permitted authorization scope + ... Pre-conditions: VNF instance resource is not in NOT-INSTANTIATED state + ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Change VNF deployment flavour with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +POST Change deployment flavour of a vnfInstance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.6.9 + ... Test title: POST Change deployment flavour of a vnfInstance with not permitted authorization scope + ... Test objective: The objective is to test that POST method trigger a change in VNF deployment flavour with not permitted authorization scope + ... Pre-conditions: VNF instance resource is not in NOT-INSTANTIATED state + ... Reference: Clause 5.4.7.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Change VNF deployment flavour with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourWorkflow.robot b/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourWorkflow.robot index 178c959116fb6a54f04375553f99191e76765591..ec093fd66f2fd8304c7a0922ede9344c75bf7bbc 100644 --- a/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/ChangeVNFFlavourWorkflow.robot @@ -17,7 +17,7 @@ Change VNF Flavour Workflow ... Test title: Change VNF Flavour Workflow ... Test objective: The objective is to test the workflow for a change flavour of an existing VNF instance ... Pre-conditions: VNF instance in INSTANTIATED state . NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.4.7 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.7 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: Multiple flavours are supported for the VNF (as capability in the VNFD). NFVO is able to receive notifications from VNFM ... Post-Conditions: VNF instance still in INSTANTIATED state and the flavour is changed diff --git a/SOL003/VNFLifecycleManagement-API/CreateVNFSnapshotTask.robot b/SOL003/VNFLifecycleManagement-API/CreateVNFSnapshotTask.robot index ad90d751223bfe213d97f9dc53737252c8dc5fca..f1e87e46e007305b93f6c315b67eb84af23dd465 100644 --- a/SOL003/VNFLifecycleManagement-API/CreateVNFSnapshotTask.robot +++ b/SOL003/VNFLifecycleManagement-API/CreateVNFSnapshotTask.robot @@ -13,7 +13,7 @@ POST Create VNF Snapshot Task ... Test title: POST Create VNF Snapshot Task ... Test objective: The objective is to test that POST method requests taking a snapshot of a VNF instance. ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: in response header Location shall not be null @@ -26,7 +26,7 @@ POST Create VNF Snapshot Task - NOT FOUND ... Test title: POST Create VNF Snapshot Task - NOT FOUND ... Test objective: The objective is to test that the POST method cannot request for a snapshot if the task is not supported for the VNF instance represented by the parent resource. ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: Task is not supported for the VNF instance represented by the parent resource. ... Post-Conditions: none @@ -39,7 +39,7 @@ POST Create VNF Snapshot Task - CONFLICT ... Test title: POST Create VNF Snapshot Task - CONFLICT ... Test objective: The objective is to test that the POST method cannot request for a snapshot when the VNF instance is in NOT_INSTANTIATED state. ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNF instance is in NOT_INSTANTIATED state. ... Post-Conditions: none @@ -52,7 +52,7 @@ POST Create VNF Snapshot Task - Unprocessable Content ... Test title: POST Create VNF Snapshot Task - Unprocessable Content ... Test objective: The objective is to test that the POST method cannot request for a snapshot when the provided identifier of the target "Individual VNF snapshot" resource for the VNF snapshot is invalid. ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The identifier of the target "Individual VNF snapshot" resource for the VNF snapshot is invalid. ... Post-Conditions: none @@ -65,7 +65,7 @@ GET Create VNF Snapshot Task - Method not implemented ... Test title: GET Create VNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that GET method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -77,7 +77,7 @@ PUT Create VNF Snapshot Task - Method not implemented ... Test title: PUT Create VNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -89,7 +89,7 @@ PATCH Create VNF Snapshot Task - Method not implemented ... Test title: PATCH Create VNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -101,13 +101,39 @@ DELETE Create VNF Snapshot Task - Method not implemented ... Test title: DELETE Create VNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.21.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.21.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Create VNF Snapshot Task Check HTTP Response Status Code Is 405 +POST Create VNF Snapshot Task with permitted authorization scope + [Documentation] Test ID: 7.3.1.38.9 + ... Test title: POST Create VNF Snapshot Task with permitted authorization scope + ... Test objective: The objective is to test that POST method requests taking a snapshot of a VNF instance with permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Create VNF Snapshot Task with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Location Header Contains URI of Created Resource + +POST Create VNF Snapshot Task with not permitted authorization scope + [Documentation] Test ID: 7.3.1.38.10 + ... Test title: POST Create VNF Snapshot Task with not permitted authorization scope + ... Test objective: The objective is to test that POST method requests taking a snapshot of a VNF instance with not permitted authorization scope with not permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.21.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Create VNF Snapshot Task with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails + *** Keywords *** Check resource existence Set Headers {"Accept":"${ACCEPT}"} diff --git a/SOL003/VNFLifecycleManagement-API/CreateVNFWorkflow.robot b/SOL003/VNFLifecycleManagement-API/CreateVNFWorkflow.robot index 96ff10132f7e5072d2b514f7f583b2b99b7292a0..33167b5d85aa0a4b039d66e1359af5018d2d954d 100644 --- a/SOL003/VNFLifecycleManagement-API/CreateVNFWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/CreateVNFWorkflow.robot @@ -17,7 +17,7 @@ Create VNF Instance Resource ... Test title: Create VNF Instance workflow ... Test objective: The objective is to test the workflow for the creation of a new VNF instance resource. ... Pre-conditions: NFVO is subscribed to VNF Identifier Creation notifications - ... Reference: Clause 5.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF instance resource has been created in "NOT_INSTANTIATED" state. diff --git a/SOL003/VNFLifecycleManagement-API/DeleteVNFWorkflow.robot b/SOL003/VNFLifecycleManagement-API/DeleteVNFWorkflow.robot index 243b8c1f1126a049bba37106399bfe4c5f134edb..c75a6ee307ddd5e6f95a7035f334b295d12096a5 100644 --- a/SOL003/VNFLifecycleManagement-API/DeleteVNFWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/DeleteVNFWorkflow.robot @@ -17,7 +17,7 @@ Delete VNF Instance Resource ... Test title: Delete VNF Instance workflow ... Test objective: The objective is to test the workflow for the deleteion of an existing VNF instance resource ... Pre-conditions: The VNF Instance resource is in NOT_INSTANTIATED state. NFVO is subscribed to VNF Identifier Creation notifications - ... Reference: Clause 5.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF instance resource is deleted on the VNFM. diff --git a/SOL003/VNFLifecycleManagement-API/FailOperationTask.robot b/SOL003/VNFLifecycleManagement-API/FailOperationTask.robot index ad99f5a227ca36de74b85a904517733f88dd3b92..dfb02cfb26a22211bfad1220004503ed861009bf 100644 --- a/SOL003/VNFLifecycleManagement-API/FailOperationTask.robot +++ b/SOL003/VNFLifecycleManagement-API/FailOperationTask.robot @@ -12,7 +12,7 @@ POST Fail operation task ... Test title: POST Fail operation task ... Test objective: The objective is to test that POST method mark as "finally failed" a VNF lifecycle operation ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. - ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF resource state is FINALLY_FAILED @@ -26,7 +26,7 @@ Post Fail operation task Conflict (Not-FAILED_TEMP) ... Test title: Post Fail operation task Conflict (Not-FAILED_TEMP) ... Test objective: The objective is to test that POST method cannot mark as "finally failed" a VNF lifecycle operation ... Pre-conditions: the "VNF LCM operation occurrence" resource is not in "FAILED_TEMP" state. - ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -39,7 +39,7 @@ Post Fail operation task Not Found ... Test title: Post Fail operation task Not Found ... Test objective: The objective is to test that POST method cannot mark as "finally failed" a VNF lifecycle operation because the operation is not supported ... Pre-conditions: none - ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -52,7 +52,7 @@ GET Fail operation task - Method not implemented ... Test title: GET Fail operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.16.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: @@ -64,7 +64,7 @@ PUT Fail operation task - Method not implemented ... Test title: PUT Fail operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.16.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: @@ -76,7 +76,7 @@ PATCH Fail operation task - Method not implemented ... Test title: PATCH Fail operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.16.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: @@ -88,9 +88,36 @@ DELETE Fail operation task - Method not implemented ... Test title: DELETE Fail operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.16.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: Delete Fail operation Check HTTP Response Status Code Is 405 + +POST Fail operation task with permitted authorization scope + [Documentation] Test ID: 7.3.1.15.8 + ... Test title: POST Fail operation task with permitted authorization scope + ... Test objective: The objective is to test that POST method mark as "finally failed" a VNF lifecycle operation with permitted authorization scope + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF resource state is FINALLY_FAILED + Post Fail operation with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check operation resource state is FINALLY_FAILED + +POST Fail operation task with not permitted authorization scope + [Documentation] Test ID: 7.3.1.15.9 + ... Test title: POST Fail operation task with not permitted authorization scope + ... Test objective: The objective is to test that POST method mark as "finally failed" a VNF lifecycle operation with not permitted authorization scope + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + ... Reference: Clause 5.4.16.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF resource state is FINALLY_FAILED + Post Fail operation with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/FailOperationWorkflow.robot b/SOL003/VNFLifecycleManagement-API/FailOperationWorkflow.robot index 5f2b0b7f800bb49b817699b5732a2ee902885ccd..ce239c6eaf218184af956c7bb76dbf2870fae64e 100644 --- a/SOL003/VNFLifecycleManagement-API/FailOperationWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/FailOperationWorkflow.robot @@ -17,7 +17,7 @@ Fail a VNF LCM Operation Workflow ... Test title: Fail a VNF LCM Operation Workflow ... Test objective: The objective is to test the workflow for a Fail VNF LCM Operation ... Pre-conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.4.16 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.16 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF lifecycle management operation occurrence is in FAILED state diff --git a/SOL003/VNFLifecycleManagement-API/HealVNFTask.robot b/SOL003/VNFLifecycleManagement-API/HealVNFTask.robot index acdca8aef5207a15037205f63fad5ae326094cfa..324ee24f059e9e7ffeea0b2b8f91e773d6f82164 100644 --- a/SOL003/VNFLifecycleManagement-API/HealVNFTask.robot +++ b/SOL003/VNFLifecycleManagement-API/HealVNFTask.robot @@ -12,7 +12,7 @@ POST Heal a vnfInstance ... Test title: POST Heal a vnfInstance ... Test objective: The objective is to test that POST method heal a VNF instance ... Pre-conditions: the VNF instance resource is not in NOT-INSTANTIATED state - ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -26,7 +26,7 @@ POST Heal a vnfInstance Conflict (Not-Instantiated) ... Test title: POST Heal a vnfInstance Conflict (Not-Instantiated) ... Test objective: The objective is to test that the operation cannot be executed currently, due to a conflict with the state of the VNF instance resource. ... Pre-conditions: the VNF instance resource is in NOT-INSTANTIATED state - ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -39,7 +39,7 @@ POST Heal a vnfInstance Not Found ... Test title: POST Heal a vnfInstance Not Found ... Test objective: The objective is to test that the operation cannot be executed because the VNF instance resource is not found. ... Pre-conditions: the VNF instance resource is not existing - ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -52,7 +52,7 @@ GET Heal VNFInstance - Method not implemented ... Test title: GET Heal a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.9.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -64,7 +64,7 @@ PUT Heal VNFInstance - Method not implemented ... Test title: PUT Heal a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.9.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -76,7 +76,7 @@ PATCH Heal VNFInstance - Method not implemented ... Test title: PATCH Heal a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.9.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -88,9 +88,36 @@ DELETE Heal VNFInstance - Method not implemented ... Test title: DELETE Heal a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.9.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Heal VNF - Check HTTP Response Status Code Is 405 \ No newline at end of file + Check HTTP Response Status Code Is 405 + +POST Heal a vnfInstance with permitted authorization scope + [Documentation] Test ID: 7.3.1.8.8 + ... Test title: POST Heal a vnfInstance with permitted authorization scope + ... Test objective: The objective is to test that POST method heal a VNF instance with permitted authorization scope + ... Pre-conditions: the VNF instance resource is not in NOT-INSTANTIATED state + ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Heal VNF with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +POST Heal a vnfInstance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.8.9 + ... Test title: POST Heal a vnfInstance with not permitted authorization scope + ... Test objective: The objective is to test that POST method heal a VNF instance with not permitted authorization scope + ... Pre-conditions: the VNF instance resource is not in NOT-INSTANTIATED state + ... Reference: Clause 5.4.9.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Heal VNF with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/HealVNFWorkflow.robot b/SOL003/VNFLifecycleManagement-API/HealVNFWorkflow.robot index 7e5981a31eace31aa3718ca2cf83e37f41681e66..2f6fa856be66d29c37428422ee0c9b766b52a516 100644 --- a/SOL003/VNFLifecycleManagement-API/HealVNFWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/HealVNFWorkflow.robot @@ -17,7 +17,7 @@ Heal a VNF Instance ... Test title: Heal a VNF Instance ... Test objective: The objective is to heal a VNF instance. ... Pre-conditions: VNF instance in INSTANTIATED state - ... Reference: Clause 5.4.9 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.9 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM. Heal a VNF instance is supported for the VNF (as capability in the VNFD) ... Post-Conditions: VNF instance still in INSTANTIATED state diff --git a/SOL003/VNFLifecycleManagement-API/IndividualSubscription.robot b/SOL003/VNFLifecycleManagement-API/IndividualSubscription.robot index bbe48b8eb0216b75267f2269b48691be3eab6d30..a18e72e41a684a64eeeab2794453983a26f07a64 100644 --- a/SOL003/VNFLifecycleManagement-API/IndividualSubscription.robot +++ b/SOL003/VNFLifecycleManagement-API/IndividualSubscription.robot @@ -11,7 +11,7 @@ POST Individual Subscription - Method not implemented ... Test title: POST Individual Subscription - Method not implemented ... Test objective: The objective is to test that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.19.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -23,7 +23,7 @@ GET Individual Subscription ... Test title: GET Individual Subscription ... Test objective: The objective is to test the Get individual subscription ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -36,7 +36,7 @@ PUT an individual subscription - Method not implemented ... Test title: PUT an individual subscription - Method not implemented ... Test objective: The objective is to test that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.19.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -48,7 +48,7 @@ PATCH an individual subscription - Method not implemented ... Test title: PATCH an individual subscription - Method not implemented ... Test objective: The objective is to test that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.19.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -60,7 +60,7 @@ DELETE an individual subscription ... Test title: DELETE an individual subscription ... Test objective: The objective is to test that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.19.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: subscription deleted from VNFM @@ -72,10 +72,36 @@ GET Individual Subscription - Not Found ... Test title: GET Individual Subscription - Not Found ... Test objective: The objective is to test the retrieval of individual subscription fails when subscription is not present ... Pre-conditions: none - ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none Get Individual Subscription Check HTTP Response Status Code Is 404 + Check HTTP Response Body Json Schema Is ProblemDetails + +GET Individual Subscription with permitted authorization scope + [Documentation] Test ID: 7.3.1.18.7 + ... Test title: GET Individual Subscription with permitted authorization scope + ... Test objective: The objective is to test the Get individual subscription with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Get Individual subscription with permitted authorization scope + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is Subscription + +GET Individual Subscription with not permitted authorization scope + [Documentation] Test ID: 7.3.1.18.8 + ... Test title: GET Individual Subscription with not permitted authorization scope + ... Test objective: The objective is to test the Get individual subscription with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.19.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Get Individual subscription with not permitted authorization scope + Check HTTP Response Status Code Is 403 Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/IndividualVNFInstance.robot b/SOL003/VNFLifecycleManagement-API/IndividualVNFInstance.robot index f9c88f3d732feb768ee2a79f410c2d52877e4d1f..c63baa783e08c85c7ec11fa9c0d18a08b861221c 100644 --- a/SOL003/VNFLifecycleManagement-API/IndividualVNFInstance.robot +++ b/SOL003/VNFLifecycleManagement-API/IndividualVNFInstance.robot @@ -16,7 +16,7 @@ Post Individual VNFInstance - Method not implemented ... Test title: Post Individual VNFInstance - Method not implemented ... Test objective: The objective is to test that POST method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.3.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -28,7 +28,7 @@ Get Information about an individual VNF Instance ... Test title: Get Information about an individual VNF Instance ... Test objective: The objective is to create a new VNF instance resource ... Pre-conditions: none - ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -37,13 +37,13 @@ Get Information about an individual VNF Instance Check HTTP Response Status Code Is 200 Check HTTP Response Body Json Schema Is vnfInstance Check HTTP Response Body vnfInstance content against VNF Descriptor - + PUT Individual VNFInstance - Method not implemented [Documentation] Test ID: 7.3.1.2.3 ... Test title: PUT Individual VNFInstance - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.3.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -55,7 +55,7 @@ PATCH Individual VNFInstance ... Test title: PATCH Individual VNFInstance ... Test objective: This method modifies an individual VNF instance resource ... Pre-conditions: an existing VNF instance resource - ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNFInstance modified @@ -68,7 +68,7 @@ PATCH Individual VNFInstance Precondition failed ... Test title: PATCH Individual VNFInstance Precondition failed ... Test objective: The objective is to test that modification of a VNF instance resource fails when a precondition given in an HTTP request header is not fulfilled due to an ETag mismatch ... Pre-conditions: an existing VNF instance resource - ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -81,7 +81,7 @@ PATCH Individual VNFInstance Conflict ... Test title: PATCH Individual VNFInstance Conflict ... Test objective: The objective is to test the conflict while modifying a VNF instance resource ... Pre-conditions: another LCM operation is ongoing - ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNFInstance not modified @@ -94,7 +94,7 @@ DELETE Individual VNFInstance ... Test title: DELETE Individual VNFInstance ... Test objective: The objective is to delete a VNF instance ... Pre-conditions: the VNF instance resource is existing - ... Reference: Clause 5.4.3.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNFInstance deleted @@ -106,7 +106,7 @@ DELETE Individual VNFInstance Conflict ... Test title: DELETE Individual VNFInstance Conflict ... Test objective: The objective is to verify that the deletion cannot be executed currently, due to a conflict with the state of the VNF instance resource. ... Pre-conditions: VNF instance resource is in INSTANTIATED state - ... Reference: Clause 5.4.3.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: Resources are not deleted @@ -120,13 +120,41 @@ Get Information about an individual VNF Instance - Not Found ... Test title: Get Information about an individual VNF Instance - Not Found ... Test objective: The objective is to test that the retrieval of an individual VNF Instance fails when instance is not present. ... Pre-conditions: none - ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none GET individual vnfInstance Check HTTP Response Status Code Is 404 Check HTTP Response Body Json Schema Is ProblemDetails + +Get Information about an individual VNF Instance with permitted authorization scope + [Documentation] Test ID: 7.3.1.2.10 + ... Test title: Get Information about an individual VNF Instance with permitted authorization scope + ... Test objective: The objective is to create a new VNF instance resource with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET individual vnfInstance with permitted authorization scope + Check HTTP Response Header Contains ETag and Last-Modified + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is vnfInstance + Check HTTP Response Body vnfInstance content against VNF Descriptor + +Get Information about an individual VNF Instance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.2.11 + ... Test title: Get Information about an individual VNF Instance with not permitted authorization scope + ... Test objective: The objective is to create a new VNF instance resource with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.3.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET individual vnfInstance with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails *** Keywords *** Check resource existence diff --git a/SOL003/VNFLifecycleManagement-API/IndividualVNFSnapshot.robot b/SOL003/VNFLifecycleManagement-API/IndividualVNFSnapshot.robot index 6242a630022eb9da56c7ad277580aedc9cc79408..ed828b560ef1bafce99e75d7c73c555c65d64952 100644 --- a/SOL003/VNFLifecycleManagement-API/IndividualVNFSnapshot.robot +++ b/SOL003/VNFLifecycleManagement-API/IndividualVNFSnapshot.robot @@ -7,7 +7,7 @@ POST Individual VNF Snapshot - Method not implemented ... Test title: POST Individual VNF Snapshot - Method not implemented ... Test objective: The objective is to test that POST method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.24.4.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -19,7 +19,7 @@ GET Information about an individual VNF Snapshot - SUCCESSFUL ... Test title: GET Information about an individual VNF Snapshot - SUCCESSFUL ... Test objective: The objective is to GET information about an individual VNF Snapshot ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -33,7 +33,7 @@ GET Information about an individual VNF Snapshot - NOT FOUND ... Test title: GET Information about an individual VNF Snapshot - NOT FOUND ... Test objective: The objective is to test that the retrieval of individual VNF Snapshot fails when using an invalid resource identifier. ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -46,7 +46,7 @@ PUT Individual VNF Snapshot - Method not implemented ... Test title: PUT Individual VNF Snapshot - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF Snapshot not modified @@ -58,7 +58,7 @@ PATCH Individual VNF Snapshot - Success ... Test title: PATCH Individual VNF Snapshot - Success ... Test objective: The objective is to test that PATCH method successfully modifies an individual VNF Snapshot resource ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF Snapshot modified @@ -72,7 +72,7 @@ PATCH Individual VNF Snapshot - Conflict ... Test title: PATCH Individual VNF Snapshot - Success ... Test objective: The objective is to test that PATCH method cannot modify an individual VNF Snapshot resource due to the fact that another modification is ongoing. ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The Individual VNF Snapshot resource is currently being modified due to an underlying VNF snapshot operation. ... Post-Conditions: none @@ -85,7 +85,7 @@ PATCH Individual VNF Snapshot - Precondition Failed ... Test title: PATCH Individual VNF Snapshot - Precondition Failed ... Test objective: The objective is to that the modification of individual VNF Snapshot fails because precondition given in an HTTP request header is not fulfilled due to an ETag mismatch. ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF snapshot is not modified @@ -98,7 +98,7 @@ DELETE Individual VNF Snapshot ... Test title: DELETE Individual VNF Snapshot ... Test objective: The objective is to delete a VNF Snapshot ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF Snapshot deleted @@ -111,11 +111,38 @@ DELETE Individual VNF Snapshot - Conflict ... Test title: DELETE Individual VNF Snapshot Conflict ... Test objective: The objective is to verify that The operation cannot be executed currently, due to a conflict with the state of the VNF Snapshot resource. ... Pre-conditions: none - ... Reference: Clause 5.4.24.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.24.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNF snapshot is in use by some operation such as reverting a VNF instance to a VNF snapshot or creating a VNF snapshot package. ... Post-Conditions: none DELETE individual VNF Snapshot - CONFLICT Check HTTP Response Status Code Is 409 Check HTTP Response Body Json Schema Is ProblemDetails - Check Postcondition VNF Snapshot Resource Existence \ No newline at end of file + Check Postcondition VNF Snapshot Resource Existence + +GET Information about an individual VNF Snapshot - SUCCESSFUL with permitted authorization scope + [Documentation] Test ID: 7.3.1.41.10 + ... Test title: GET Information about an individual VNF Snapshot - SUCCESSFUL with permitted authorization scope + ... Test objective: The objective is to GET information about an individual VNF Snapshot with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.24.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET individual VNF Snapshot with permitted authorization scope + Check HTTP Response Header Contains ETag and Last-Modified + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is VnfSnapshotInfo + +GET Information about an individual VNF Snapshot with not permitted authorization scope + [Documentation] Test ID: 7.3.1.41.11 + ... Test title: GET Information about an individual VNF Snapshot with not permitted authorization scope + ... Test objective: The objective is to GET information about an individual VNF Snapshot with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.24.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET individual VNF Snapshot with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/IndividualVnfLcmOperationOccurence.robot b/SOL003/VNFLifecycleManagement-API/IndividualVnfLcmOperationOccurence.robot index 73ab723fb2246db3cff3b8970fb72d66a1a7a9c8..04e0d1a8226dfbcebf3892deb0d8622b496b4ad7 100644 --- a/SOL003/VNFLifecycleManagement-API/IndividualVnfLcmOperationOccurence.robot +++ b/SOL003/VNFLifecycleManagement-API/IndividualVnfLcmOperationOccurence.robot @@ -11,7 +11,7 @@ Post Individual VNF LCM Operation occurrences - Method not implemented ... Test title: Post Individual VNF LCM Operation occurrences - Method not implemented ... Test objective: The objective is to test that POST method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.13.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.13.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -23,7 +23,7 @@ Get Individual VNF LCM Operation occurrences ... Test title: Get Individual VNF LCM Operation occurrences ... Test objective: The objective is to test that this method retrieve information about a VNF lifecycle management operation occurrence ... Pre-conditions: none - ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -37,7 +37,7 @@ PUT Individual VNF LCM Operation occurrences - Method not implemented ... Test title: PUT Individual VNF LCM Operation occurrences - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.13.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.13.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -49,7 +49,7 @@ PATCH Individual VNF LCM Operation occurrences - Method not implemented ... Test title: PATCH Individual VNF LCM Operation occurrences - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.13.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.13.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -61,7 +61,7 @@ DELETE Individual VNF LCM Operation occurrences - Method not implemented ... Test title: DELETE Individual VNF LCM Operation occurrences - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.13.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.13.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -73,10 +73,37 @@ Get Individual VNF LCM Operation occurrences - Not Found ... Test title: Get Individual VNF LCM Operation occurrences - Not Found ... Test objective: The objective is to test that the retrieval of VNF lifecycle management operation occurrence fails when instance is not present. ... Pre-conditions: none - ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none Get Individual VNF LCM Operation occurrences Check HTTP Response Status Code Is 404 + Check HTTP Response Body Json Schema Is ProblemDetails + +Get Individual VNF LCM Operation occurrences with permitted authorization scope + [Documentation] Test ID: 7.3.1.12.7 + ... Test title: Get Individual VNF LCM Operation occurrences with permitted authorization scope + ... Test objective: The objective is to test that this method retrieve information about a VNF lifecycle management operation occurrence with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Get Individual VNF LCM Operation occurrences with permitted authorization scope + Check HTTP Response Status Code Is 200 + Check HTTP Response Body Json Schema Is VnfLcmOpOcc + Check HTTP Response Body of Individual VNF LCM Operation occurrences content against VNF Descriptor + +Get Individual VNF LCM Operation occurrences with not permitted authorization scope + [Documentation] Test ID: 7.3.1.12.8 + ... Test title: Get Individual VNF LCM Operation occurrences with not permitted authorization scope + ... Test objective: The objective is to test that this method retrieve information about a VNF lifecycle management operation occurrence with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.13.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Get Individual VNF LCM Operation occurrences with not permitted authorization scope + Check HTTP Response Status Code Is 403 Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/InstantiateVNFTask.robot b/SOL003/VNFLifecycleManagement-API/InstantiateVNFTask.robot index 0d1d1acd9e863a1af4adc449c711129982a9b7f8..e6d9a28a3c4bf194e8cceb91d017b1471dc45169 100644 --- a/SOL003/VNFLifecycleManagement-API/InstantiateVNFTask.robot +++ b/SOL003/VNFLifecycleManagement-API/InstantiateVNFTask.robot @@ -13,7 +13,7 @@ Instantiate a vnfInstance ... Test title: Post Instantiate Individual VNFInstance ... Test objective: The objective is to instantiate a VNF instance ... Pre-conditions: VNF instance resource is in NOT INSTANTIATED state - ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -27,7 +27,7 @@ Instantiate a vnfInstance Conflict ... Test title: Post Instantiate Individual VNFInstance ... Test objective: The objective is to verify that the instantiation of the vnf cannot be executed currently, due to a conflict with the state of the VNF instance resource. ... Pre-conditions: VNF instance resource is in INSTANTIATED state - ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -40,7 +40,7 @@ GET Instantiate VNFInstance - Method not implemented ... Test title: GET Instantiate Individual VNFInstance - Method not implemented ... Test objective: The objective is to test that GET method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.4.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -52,7 +52,7 @@ PUT Instantiate VNFInstance - Method not implemented ... Test title: PUT Instantiate Individual VNFInstance - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.4.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -64,7 +64,7 @@ PATCH Instantiate VNFInstance - Method not implemented ... Test title: PATCH Instantiate Individual VNFInstance - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.4.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -76,9 +76,36 @@ DELETE Instantiate VNFInstance - Method not implemented ... Test title: DELETE Instantiate Individual VNFInstance - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.4.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE instantiate individual vnfInstance - Check HTTP Response Status Code Is 405 \ No newline at end of file + Check HTTP Response Status Code Is 405 + +Instantiate a vnfInstance with permitted authorization scope + [Documentation] Test ID: 7.3.1.3.7 + ... Test title: Post Instantiate Individual VNFInstance with permitted authorization scope + ... Test objective: The objective is to instantiate a VNF instance with permitted authorization scope + ... Pre-conditions: VNF instance resource is in NOT INSTANTIATED state + ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST instantiate individual vnfInstance with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +Instantiate a vnfInstance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.3.8 + ... Test title: Post Instantiate Individual VNFInstance with not permitted authorization scope + ... Test objective: The objective is to instantiate a VNF instance with not permitted authorization scope + ... Pre-conditions: VNF instance resource is in NOT INSTANTIATED state + ... Reference: Clause 5.4.4.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST instantiate individual vnfInstance with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/InstantiateVNFTaskWorkflow.robot b/SOL003/VNFLifecycleManagement-API/InstantiateVNFTaskWorkflow.robot index db6caddb1638cf3c327329b2cc4c5b11eef4ae66..36ff993ac6defff778955a7e21927c53255c8654 100644 --- a/SOL003/VNFLifecycleManagement-API/InstantiateVNFTaskWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/InstantiateVNFTaskWorkflow.robot @@ -20,7 +20,7 @@ VNF Instantiation ... Test title: VNF Instantiation workflow ... Test objective: The objective is to test the workflow for the instantiation of a VNF instance ... Pre-conditions: VNF instance resources is already created. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: VNF instance in INSTANTIATED state @@ -38,7 +38,7 @@ VNF Instantiation with attribute instantiationLevelId ... Test title: VNF Instantiation workflow with attribute instantiationLevelId ... Test objective: The objective is to test the workflow for the instantiation of a VNF instance ... Pre-conditions: VNF instance resources is already created. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: VNF instance in INSTANTIATED state @@ -56,7 +56,7 @@ VNF Instantiation with attribute targetScaleLevelInfo ... Test title: VNF Instantiation workflow with attribute targetScaleLevelInfo ... Test objective: The objective is to test the workflow for the instantiation of a VNF instance ... Pre-conditions: VNF instance resources is already created. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: VNF instance in INSTANTIATED state diff --git a/SOL003/VNFLifecycleManagement-API/ModifyVNFInformationWorkflow.robot b/SOL003/VNFLifecycleManagement-API/ModifyVNFInformationWorkflow.robot index e700d2caff6ba1173c883ba8e5505bae1658941d..0094b3c27f3d208ffd0b9072f62a55b1033ef466 100644 --- a/SOL003/VNFLifecycleManagement-API/ModifyVNFInformationWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/ModifyVNFInformationWorkflow.robot @@ -17,7 +17,7 @@ Modify info of a VNF Instance ... Test title: Update information about a VNF instance ... Test objective: The objective is to update information about a VNF instance. ... Pre-conditions: VNF instance is created - ... Reference: Clause 5.3.6 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.6 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM. Update information of a VNF instance is supported for the VNF (as capability in the VNFD) ... Post-Conditions: VNF instance info is updated diff --git a/SOL003/VNFLifecycleManagement-API/NotificationEndpoint.robot b/SOL003/VNFLifecycleManagement-API/NotificationEndpoint.robot index 81a032c257ebdf9619fa27626f92664e61ca6d9c..f114036d50c8cd5003fa6eab125a34e14b44021d 100644 --- a/SOL003/VNFLifecycleManagement-API/NotificationEndpoint.robot +++ b/SOL003/VNFLifecycleManagement-API/NotificationEndpoint.robot @@ -13,7 +13,7 @@ VNF LCM Operation Occurrence Notification ... Test title: VNF LCM Operation Occurrence Notification ... Test objective: The objective is to test that the POST request triggers VNF LCM Operation Occurrence Notification. ... Pre-conditions: A subscription for VNF LCM Operation Occurrence notifications is available in the VNFM. - ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_Notif_Endpoint ... Applicability: none ... Post-Conditions: none @@ -25,7 +25,7 @@ VNF Identifier Creation Notification ... Test title: VNF Identifier Creation Notification ... Test objective: The objective is to test that the POST request triggers VNF Identifier Creation Notification. ... Pre-conditions: A subscription for VNF identifier creation cotification is available in the VNFM. - ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_Notif_Endpoint ... Applicability: none ... Post-Conditions: none @@ -37,7 +37,7 @@ VNF Identifier Deletion Notification ... Test title: VNF Identifier Deletion Notification ... Test objective: The objective is to test that the POST request triggers VNF Identifier Deletion Notification. ... Pre-conditions: A subscription for VNF identifier deletion notifications is available in the VNFM. - ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_Notif_Endpoint ... Applicability: none ... Post-Conditions: none diff --git a/SOL003/VNFLifecycleManagement-API/Notifications.robot b/SOL003/VNFLifecycleManagement-API/Notifications.robot index 6f1a0c072cc4752053aa2b9991820134adf73f5b..f29f871b69b885a64befaa21ec59e909c3421dfb 100644 --- a/SOL003/VNFLifecycleManagement-API/Notifications.robot +++ b/SOL003/VNFLifecycleManagement-API/Notifications.robot @@ -13,7 +13,7 @@ VNF LCM Operation Occurrence Start Notification ... Test title: VNF LCM Operation Occurrence Start Notification ... Test objective: The objective is to test the dispatch of VNF LCM Operation Occurrence Start Notification when a new VNF LCM operation is started in the VNFM, and perform a JSON schema and content validation of the delivered notification. The action that triggers the notification under test is an explicit test step, but it is not performed by the test system. ... Pre-conditions: A subscription for VNF LCM Operation Occurrence notifications is available in the VNFM. - ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -27,7 +27,7 @@ VNF LCM Operation Occurrence Result Notification ... Test title: VNF LCM Operation Occurrence Result Notification ... Test objective: The objective is to test the dispatch of VNF LCM Operation Occurrence Result Notification when a VNF LCM operation is completed in the VNFM, and perform a JSON schema and content validation of the delivered notification. The action that triggers the notification under test is an explicit test step, but it is not performed by the test system. ... Pre-conditions: An VNF LCM operation is in progress, and a subscription for VNF LCM Operation Occurrence notifications is available in the VNFM. - ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -41,7 +41,7 @@ VNF Identifier Creation Notification ... Test title: VNF Identifier Creation Notification ... Test objective: The objective is to test the dispatch of VNF Identifier Creation Notification when a new VNF instance resource is created in the VNFM, and perform a JSON schema and content validation of the delivered notification. The action that triggers the notification under test is an explicit test step, but it is not performed by the test system. ... Pre-conditions: A subscription for VNF identifier creation notifications is available in the VNFM. - ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.20.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -54,7 +54,7 @@ VNF Identifier Deletion Notification ... Test title: VNF Identifier Deletion Notification ... Test objective: The objective is to test the dispatch of VNF Identifier Deletion Notification when a VNF instance resource is deleted in the VNFM, and perform a JSON schema and content validation of the delivered notification. The action that triggers the notification under test is an explicit test step, but it is not performed by the test system. ... Pre-conditions: A VNF instance resource is created, and a subscription for VNF identifier creation notifications is available in the VNFM. - ... Reference: Clause 6.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 6.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none diff --git a/SOL003/VNFLifecycleManagement-API/OperateVNFTask.robot b/SOL003/VNFLifecycleManagement-API/OperateVNFTask.robot index f3b492c2ea9e3b2eaa29e26856408264db6a7a6d..2daa755bb7ec2d2bea1a24db11688239093ce0c0 100644 --- a/SOL003/VNFLifecycleManagement-API/OperateVNFTask.robot +++ b/SOL003/VNFLifecycleManagement-API/OperateVNFTask.robot @@ -14,7 +14,7 @@ POST Operate a vnfInstance ... Test title: POST Operate a vnfInstance ... Test objective: The objective is to test that POST method operate a VNF instance ... Pre-conditions: none - ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -27,7 +27,7 @@ POST Operate a vnfInstance Conflict (Not-Instantiated) ... Test title: POST Operate a vnfInstance Conflict (Not-Instantiated) ... Test objective: The objective is to test that the operation cannot be executed currently, due to a conflict with the state of the VNF instance resource. ... Pre-conditions: the VNF instance resource is in NOT-INSTANTIATED state - ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -40,7 +40,7 @@ POST Operate a vnfInstance Not Found ... Test title: POST Operate a vnfInstance Not Found ... Test objective: The objective is to test that the operation cannot be executed currently, because the resource is not existing ... Pre-conditions: the VNF instance resource is in not existing - ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -53,7 +53,7 @@ GET Operate VNFInstance - Method not implemented ... Test title: GET Operate a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.10.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.10.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -65,7 +65,7 @@ PUT Operate VNFInstance - Method not implemented ... Test title: PUT Operate a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.10.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.10.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -77,7 +77,7 @@ PATCH Operate VNFInstance - Method not implemented ... Test title: PATCH Operate a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.10.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.10.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -89,12 +89,38 @@ DELETE Operate VNFInstance - Method not implemented ... Test title: DELETE Operate a vnfInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.10.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.10.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Operate VNF Check HTTP Response Status Code Is 405 + +POST Operate a vnfInstance with permitted authorization scope + [Documentation] Test ID: 7.3.1.9.8 + ... Test title: POST Operate a vnfInstance with permitted authorization scope + ... Test objective: The objective is to test that POST method operate a VNF instance with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Operate VNF with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check Operation Occurrence Id existence + +POST Operate a vnfInstance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.9.9 + ... Test title: POST Operate a vnfInstance with not permitted authorization scope + ... Test objective: The objective is to test that POST method operate a VNF instance with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.10.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Operate VNF with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails *** Keywords *** Check resource existence diff --git a/SOL003/VNFLifecycleManagement-API/OperateVNFWorkflow.robot b/SOL003/VNFLifecycleManagement-API/OperateVNFWorkflow.robot index 8927ca37504bb217957b975927d5ba16db2195a3..d6eeed1c68a6688acd3a3f1a85ee3ccf6275295f 100644 --- a/SOL003/VNFLifecycleManagement-API/OperateVNFWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/OperateVNFWorkflow.robot @@ -18,7 +18,7 @@ Operate a VNF Instance ... Test title: Operate a VNF Instance ... Test objective: The objective is to test the workflow of operational change of a VNF instance. ... Pre-conditions: VNF instance in INSTANTIATED state - ... Reference: Clause 5.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: change the operational state of a VNF instance is supported for the VNF (as capability in the VNFD) ... Post-Conditions: VNF instance still in INSTANTIATED state and the operational state is changed diff --git a/SOL003/VNFLifecycleManagement-API/RetryOperationTask.robot b/SOL003/VNFLifecycleManagement-API/RetryOperationTask.robot index 3dea0a1823e6d824f86d92bc7faec83e5eebcc3d..f84c03dca13f17e7500f6842ee7f3faa2b11b9ee 100644 --- a/SOL003/VNFLifecycleManagement-API/RetryOperationTask.robot +++ b/SOL003/VNFLifecycleManagement-API/RetryOperationTask.robot @@ -15,7 +15,7 @@ Post Retry operation task ... Test title: Post Retry operation task ... Test objective: The objective is to test that POST method The POST method initiates retrying a VNF lifecycle operation if the operation is in FAILED_TEMP state ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. - ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -29,7 +29,7 @@ Post Retry operation task Conflict (Not-FAILED_TEMP) ... Test title: Post Retry operation task Conflict (Not-FAILED_TEMP) ... Test objective: The objective is to test that the retry operation cannot be executed currently, due to a conflict with the state of the VNF instance resource. (i.e. the VNF instance resource is not in FAILED_TEMP state) ... Pre-conditions: the "VNF LCM operation occurrence" resource is not in "FAILED_TEMP" state. - ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -42,7 +42,7 @@ Post Retry operation task Not Found ... Test title: Post Retry operation task Not Found ... Test objective: The objective is to test that the retry operation cannot be executed because the operation is not supported ... Pre-conditions: - ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -55,7 +55,7 @@ GET Retry operation task - Method not implemented ... Test title: GET Retry operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.14.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.14.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -67,7 +67,7 @@ PUT Retry operation task - Method not implemented ... Test title: PUT Retry operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.14.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.14.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -79,7 +79,7 @@ PATCH Retry operation task - Method not implemented ... Test title: PATCH Retry operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.14.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.14.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -91,13 +91,40 @@ DELETE Retry operation task - Method not implemented ... Test title: DELETE Retry operation task- Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.14.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.14.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none Delete Retry operation Check HTTP Response Status Code Is 405 +Post Retry operation task with permitted authorization scope + [Documentation] Test ID: 7.3.1.13.8 + ... Test title: Post Retry operation task with permitted authorization scope + ... Test objective: The objective is to test that POST method The POST method initiates retrying a VNF lifecycle operation if the operation is in FAILED_TEMP state with permitted authorization scope + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Post Retry operation with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +Post Retry operation task with not permitted authorization scope + [Documentation] Test ID: 7.3.1.13.9 + ... Test title: Post Retry operation task with not permitted authorization scope + ... Test objective: The objective is to test that POST method The POST method initiates retrying a VNF lifecycle operation if the operation is in FAILED_TEMP state with not permitted authorization scope + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + ... Reference: Clause 5.4.14.4.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Post Retry operation with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails + *** Keywords *** Check resource existence Set Headers {"Accept":"${ACCEPT}"} diff --git a/SOL003/VNFLifecycleManagement-API/RetryOperationWorkflow.robot b/SOL003/VNFLifecycleManagement-API/RetryOperationWorkflow.robot index 8573e1993447f05c0a841d610b78eb3f371adc71..0c40c97018130cc021740228dd932bdb6af34d1c 100644 --- a/SOL003/VNFLifecycleManagement-API/RetryOperationWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/RetryOperationWorkflow.robot @@ -15,7 +15,7 @@ Retry VNF LCM Operation - Successful ... Test title: Retry VNF LCM Operation - Successful ... Test objective: The objective is to test the workflow for a successful Retry VNF LCM Operation and the status notifications ... Pre-conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF lifecycle management operation occurrence is in COMPLETED state @@ -30,7 +30,7 @@ Retry VNF LCM Operation - Unsuccessful ... Test title: Retry VNF LCM Operation - Unsuccessful ... Test objective: The objective is to test the workflow for an unsuccesful Retry VNF LCM Operation and the status notifications ... Pre-conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state diff --git a/SOL003/VNFLifecycleManagement-API/RevertToVNFSnapshotTask.robot b/SOL003/VNFLifecycleManagement-API/RevertToVNFSnapshotTask.robot index d822f3c29cf6d4a3afef95665f8b42f0a1998f8e..8dce54122ad8af9089be4d34d3f2798f5bbccbca 100644 --- a/SOL003/VNFLifecycleManagement-API/RevertToVNFSnapshotTask.robot +++ b/SOL003/VNFLifecycleManagement-API/RevertToVNFSnapshotTask.robot @@ -13,7 +13,7 @@ POST Revert to VNF Snapshot Task ... Test title: POST Revert to VNF Snapshot Task ... Test objective: The objective is to test that POST method requests reverting a VNF/VNFC instance to a VNF/VNFC snapshot. ... Pre-conditions: none - ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: in response header Location shall not be null @@ -26,7 +26,7 @@ POST Revert to VNF Snapshot Task - NOT FOUND ... Test title: POST Revert to VNF Snapshot Task - NOT FOUND ... Test objective: The objective is to test that the POST method cannot request reverting to a snapshot if the task is not supported for the VNF instance represented by the parent resource. ... Pre-conditions: none - ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: Task is not supported for the VNF instance represented by the parent resource. ... Post-Conditions: none @@ -39,7 +39,7 @@ POST Revert to VNF Snapshot Task - CONFLICT ... Test title: POST Revert to VNF Snapshot Task - CONFLICT ... Test objective: The objective is to test that the POST method cannot request reverting to a snapshot when the VNF instance is in NOT_INSTANTIATED state. ... Pre-conditions: none - ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNF instance is in NOT_INSTANTIATED state. ... Post-Conditions: none @@ -52,7 +52,7 @@ GET Revert to VNF Snapshot Task - Method not implemented ... Test title: GET Revert to VNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that GET method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.22.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.22.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -64,7 +64,7 @@ PUT Revert to VNF Snapshot Task - Method not implemented ... Test title: PUT Revert to VNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.22.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.22.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -76,7 +76,7 @@ PATCH Revert to VNF Snapshot Task - Method not implemented ... Test title: PATCH Revert to VNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.22.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.22.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -88,13 +88,39 @@ DELETE Revert to VNF Snapshot Task - Method not implemented ... Test title: DELETE Revert to sVNF Snapshot Task - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.22.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.22.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Revert to VNF Snapshot Task Check HTTP Response Status Code Is 405 +POST Revert to VNF Snapshot Task with permitted authorization scope + [Documentation] Test ID: 7.3.1.39.8 + ... Test title: POST Revert to VNF Snapshot Task with permitted authorization scope + ... Test objective: The objective is to test that POST method requests reverting a VNF/VNFC instance to a VNF/VNFC snapshot with permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Revert to VNF Snapshot Task with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Location Header Contains URI of Created Resource + +POST Revert to VNF Snapshot Task with not permitted authorization scope + [Documentation] Test ID: 7.3.1.39.9 + ... Test title: POST Revert to VNF Snapshot Task with not permitted authorization scope + ... Test objective: The objective is to test that POST method requests reverting a VNF/VNFC instance to a VNF/VNFC snapshot with not permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.22.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + POST Revert to VNF Snapshot Task with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails + *** Keywords *** Check resource existence Set Headers {"Accept":"${ACCEPT}"} diff --git a/SOL003/VNFLifecycleManagement-API/RollBackOperationWorkflow.robot b/SOL003/VNFLifecycleManagement-API/RollBackOperationWorkflow.robot index 7d12061f7850954b880ce676fd46d959f94a4ae7..d7c5083da56909849a5b7c3bd023a3e155f94220 100644 --- a/SOL003/VNFLifecycleManagement-API/RollBackOperationWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/RollBackOperationWorkflow.robot @@ -17,7 +17,7 @@ Rollback a VNF LCM Operation - Successful ... Test title: Rollback VNF LCM Operation - Successful ... Test objective: The objective is to test the workflow for a Rolling Back a VNF LCM Operation and the operation is successful ... Pre-conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.3.11 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.11 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF lifecycle management operation occurrence is in ROLLED_BACK state @@ -32,7 +32,7 @@ Rollback VNF LCM Operation - Unsuccessful ... Test title: Rollback VNF LCM Operation - Unsuccessful ... Test objective: The objective is to test the workflow for a Rollback VNF LCM Operation and the operation is not successful ... Pre-conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state. NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.10 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM ... Post-Conditions: The VNF lifecycle management operation occurrence is in FAILED_TEMP state diff --git a/SOL003/VNFLifecycleManagement-API/RollbackOperationTask.robot b/SOL003/VNFLifecycleManagement-API/RollbackOperationTask.robot index 445bb0a5a96a7859adc8aef47570b2ca1821123d..eeb3a29a0a15a435753c23bf0715a2807be8f009 100644 --- a/SOL003/VNFLifecycleManagement-API/RollbackOperationTask.robot +++ b/SOL003/VNFLifecycleManagement-API/RollbackOperationTask.robot @@ -9,12 +9,12 @@ Documentation This task resource represents the "Rollback operation" operatio Suite Setup Check resource existence *** Test Cases *** -Post Rollback operation task +Post Rollback operation task [Documentation] Test ID: 7.3.1.14.1 ... Test title: Post Rollback operation task ... Test objective: The objective is to test that POST method initiates rollback on a VNF lifecycle operation ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. - ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -22,13 +22,13 @@ Post Rollback operation task Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location Check Individual VNF LCM operation occurrence operationState is STARTING - + POST Rollback operation task Conflict (Not-FAILED_TEMP) [Documentation] Test ID: 7.3.1.14.2 ... Test title: POST Rollback operation task Conflict (Not-FAILED_TEMP) ... Test objective: The objective is to test that POST method initiates a rollback on a VNF lifecycle operation ... Pre-conditions: the "VNF LCM operation occurrence" resource is not in "FAILED_TEMP" state. - ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -41,7 +41,7 @@ POST Rollback operation task Not Found ... Test title: POST Rollback operation task Not Found ... Test objective: The objective is to test that the retry operation cannot be executed because the operation is not supported ... Pre-conditions: - ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -54,7 +54,7 @@ GET Rollback operation task - Method not implemented ... Test title: GET Rollback operation task - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.15.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.15.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -66,7 +66,7 @@ PUT Rollback operation task - Method not implemented ... Test title: PUT Rollback operation task - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.15.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.15.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -78,7 +78,7 @@ PATCH Rollback operation task - Method not implemented ... Test title: PATCH Rollback operation task - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.15.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.15.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -90,13 +90,40 @@ DELETE Rollback operation task - Method not implemented ... Test title: DELETE Rollback operation task - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.15.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.15.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none Delete Rollback operation Check HTTP Response Status Code Is 405 +Post Rollback operation task with permitted authorization scope + [Documentation] Test ID: 7.3.1.14.8 + ... Test title: Post Rollback operation task with permitted authorization scope + ... Test objective: The objective is to test that POST method initiates rollback on a VNF lifecycle operation with permitted authorization scope + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Post Rollback operation with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +Post Rollback operation task with not permitted authorization scope + [Documentation] Test ID: 7.3.1.14.9 + ... Test title: Post Rollback operation task with not permitted authorization scope + ... Test objective: The objective is to test that POST method initiates rollback on a VNF lifecycle operation with not permitted authorization scope + ... Pre-conditions: the "VNF LCM operation occurrence" resource is in "FAILED_TEMP" state. + ... Reference: Clause 5.4.15.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + Post Rollback operation with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails + *** Keywords *** Check resource existence Set Headers {"Accept":"${ACCEPT}"} diff --git a/SOL003/VNFLifecycleManagement-API/ScaleVNFTask.robot b/SOL003/VNFLifecycleManagement-API/ScaleVNFTask.robot index 8d0776e3991013d708b220b9659224b6e77fa2ac..cfb8a1de2de8cce374d7e953a69379786ea1daea 100644 --- a/SOL003/VNFLifecycleManagement-API/ScaleVNFTask.robot +++ b/SOL003/VNFLifecycleManagement-API/ScaleVNFTask.robot @@ -13,11 +13,11 @@ POST Scale a vnfInstance ... Test title: POST Scale a vnfInstance ... Test objective: The objective is to scale a VNF instance ... Pre-conditions: none - ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none - POST Scale vnfInstance + POST Scale vnfInstance Check HTTP Response Status Code Is 202 Check HTTP Response Header Contains Location Check Individual VNF LCM operation occurrence operationState is STARTING @@ -27,7 +27,7 @@ POST Scale a vnfInstance Conflict (Not-Instantiated) ... Test title: POST Scale a vnfInstance Conflict (Not-Instantiated) ... Test objective: The objective is to verify that the scale operation cannot be executed ... Pre-conditions: VNF instance resource is in NOT-INSTANTIATED state - ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -40,7 +40,7 @@ POST Scale a vnfInstance Not Found ... Test title: POST Scale a vnfInstance Not Found ... Test objective: The objective is to verify that the operation cannot be executed currently, because the VNF instance resource is not found. ... Pre-conditions: none - ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -53,7 +53,7 @@ GET Scale VNFInstance - Method not implemented ... Test title: GET Scale VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.5.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -65,7 +65,7 @@ PUT Scale VNFInstance - Method not implemented ... Test title: PUT Scale VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.5.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -77,7 +77,7 @@ PATCH Scale VNFInstance - Method not implemented ... Test title: PATCH Scale VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.5.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -89,13 +89,41 @@ DELETE Scale VNFInstance - Method not implemented ... Test title: DELETE Scale VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.5.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Scale vnfInstance Check HTTP Response Status Code Is 405 +POST Scale a vnfInstance with permitted authorization scope + [Documentation] Test ID: 7.3.1.4.8 + ... Test title: POST Scale a vnfInstance with permitted authorization scope + ... Test objective: The objective is to scale a VNF instance with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Scale vnfInstance with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +POST Scale a vnfInstance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.4.9 + ... Test title: POST Scale a vnfInstance with not permitted authorization scope + ... Test objective: The objective is to scale a VNF instance with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.5.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Scale vnfInstance with not permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + *** Keywords *** Check resource existence Set Headers {"Accept":"${ACCEPT}"} diff --git a/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelTask.robot b/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelTask.robot index 7f2fb029923489514cd0ad7e0d6aa9af148fc725..efced3b58dfefff7ce49ce3ded672d2cbbf3fc55 100644 --- a/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelTask.robot +++ b/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelTask.robot @@ -12,7 +12,7 @@ POST Scale a vnfInstance to level - with InstantiationLevelId attribute ... Test title: POST Scale a vnfInstance to level ... Test objective: The objective is to scale a VNF instance to a target level. ... Pre-conditions: none - ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -26,7 +26,7 @@ POST Scale a vnfInstance to level Conflict (Not-Instantiated) ... Test title: POST Scale a vnfInstance to level Conflict (Not-Instantiated) ... Test objective: The objective is to verify that the scale operation cannot be executed because the resource is not instantiated ... Pre-conditions: VNF instance resource is in NOT-INSTANTIATED state - ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -39,7 +39,7 @@ Scale a vnfInstance Not Found ... Test title: Scale a vnfInstance Not Found ... Test objective: The objective is to verify that the operation cannot be executed , because the VNF instance resource cannot be found. ... Pre-conditions: VNF instance resource is in NOT-INSTANTIATED state - ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -52,7 +52,7 @@ GET Scale to level VNFInstance - Method not implemented ... Test title: GET Scale to level VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.6.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -64,7 +64,7 @@ PUT Scale to level VNFInstance - Method not implemented ... Test title: PUT Scale to level VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.6.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -76,7 +76,7 @@ PATCH Scale to level VNFInstance - Method not implemented ... Test title: PATCH Scale to level VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.6.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -88,7 +88,7 @@ DELETE Scale to level VNFInstance - Method not implemented ... Test title: DELETE Scale to level VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.6.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -100,10 +100,37 @@ POST Scale a vnfInstance to level - with scaleInfo attribute ... Test title: POST Scale a vnfInstance to level with scaleInfo attribute ... Test objective: The objective is to scale a VNF instance to a target level. ... Pre-conditions: none - ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none POST Scale vnfInstance to level with scaleInfo attribute Check HTTP Response Status Code Is 202 - Check Operation Occurrence Id existence \ No newline at end of file + Check Operation Occurrence Id existence + +POST Scale a vnfInstance to level - with InstantiationLevelId attribute with permitted authorization scope + [Documentation] Test ID: 7.3.1.5.9 + ... Test title: POST Scale a vnfInstance to level with permitted authorization scope + ... Test objective: The objective is to scale a VNF instance to a target level with permitted authorization scope . + ... Pre-conditions: none + ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Scale vnfInstance to level with InstantiationLevelId attribute with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +POST Scale a vnfInstance to level - with InstantiationLevelId attribute with not permitted authorization scope + [Documentation] Test ID: 7.3.1.5.10 + ... Test title: POST Scale a vnfInstance to level with not permitted authorization scope + ... Test objective: The objective is to scale a VNF instance to a target level with not permitted authorization scope . + ... Pre-conditions: none + ... Reference: Clause 5.4.6.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Scale vnfInstance to level with InstantiationLevelId attribute with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelWorkflow.robot b/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelWorkflow.robot index c515f53b24b0f0e675bf4c6797798e1f41341279..1635281ac7b69e911c1c3aba201e1fcac00c8bf9 100644 --- a/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/ScaleVNFToLevelWorkflow.robot @@ -15,7 +15,7 @@ VNF Instance Scale To Level ... Test title: VNF Instance Scale To Level workflow ... Test objective: The objective is to test the workflow for the scale to level of a VNF instance ... Pre-conditions: VNF instance in INSTANTIATED state . NFVO is subscribed to VNF LCM Operation Occurrence notifications - ... Reference: Clause 5.4.6 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.6 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM. Scale operation is supported for the VNF (as capability in the VNFD) ... Post-Conditions: VNF instance still in INSTANTIATED state and VNF is scaled to the new level diff --git a/SOL003/VNFLifecycleManagement-API/ScaleVNFWorkflow.robot b/SOL003/VNFLifecycleManagement-API/ScaleVNFWorkflow.robot index 73897ccd91e2f009c90141c174eca97a5f9fd53c..e18f5b869722280876350b6e57ba5cc39e6af525 100644 --- a/SOL003/VNFLifecycleManagement-API/ScaleVNFWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/ScaleVNFWorkflow.robot @@ -15,7 +15,7 @@ VNF Instance Scale Out ... Test title: VNF Instance Scale Out workflow ... Test objective: The objective is to test the workflow for the scaling out a VNF instance ... Pre-conditions: VNF instance in INSTANTIATED state (Test ID 5.4.4.1). NFVO is subscribed to VNF LCM Operation Occurrence notifications (Test ID 5.4.20.1) - ... Reference: Clause 5.4.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM. Scale operation is supported for the VNF (as capability in the VNFD) ... Post-Conditions: VNF instance still in INSTANTIATED state and VNF is scaled out diff --git a/SOL003/VNFLifecycleManagement-API/Subscriptions.robot b/SOL003/VNFLifecycleManagement-API/Subscriptions.robot index 81fabaf040c4042f3449deabd869236b53746050..c8674a4f63b23ae30a5bc3042db2fa82055d2583 100644 --- a/SOL003/VNFLifecycleManagement-API/Subscriptions.robot +++ b/SOL003/VNFLifecycleManagement-API/Subscriptions.robot @@ -15,7 +15,7 @@ POST Create a new subscription ... Test title: POST Create a new subscription ... Test objective: The POST method creates a new subscription ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: in response header Location shall not be null @@ -28,7 +28,7 @@ Create a new Subscription - DUPLICATION ... Test title: POST Create a new subscription - DUPLICATION ... Test objective: The objective is to test request to create a duplicate (same callbackurl and filter) subscription ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: duplication is supported by SUT ... Post-Conditions: in response header Location shall not be null @@ -41,7 +41,7 @@ Create a new Subscription - NO-DUPLICATION ... Test title: POST Create a new subscription - NO-DUPLICATION ... Test objective: The objective is to test the request that does not create a duplicate (same callbackurl and filter) subscription ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: duplication is not supported by SUT ... Post-Conditions: in response header Location shall not be null @@ -54,7 +54,7 @@ GET Subscriptions ... Test title: GET Subscriptions ... Test objective: The objective is Get the list of active subscriptions ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -67,7 +67,7 @@ GET Subscription - Filter ... Test title: GET Subscriptions - Filter ... Test objective: The objective is Get the list of active subscriptions using a filter ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -81,7 +81,7 @@ GET subscriptions - Bad Request Invalid attribute-based filtering parameters ... Test title: GET subscriptions - Bad Request Invalid attribute-based filtering parameters ... Test objective: The objective is Get the list of active subscriptions using an invalid filter ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -138,7 +138,7 @@ PUT subscriptions - Method not implemented ... Test title: PUT subscriptions - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -150,7 +150,7 @@ PATCH subscriptions - Method not implemented ... Test title: PATCH subscriptions - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -162,7 +162,7 @@ DELETE subscriptions - Method not implemented ... Test title: DELETE subscriptions - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -170,11 +170,11 @@ DELETE subscriptions - Method not implemented Check HTTP Response Status Code Is 405 GET Subscriptions as a Paged Response - [Documentation] Test ID: 7.3.1.17.14 + [Documentation] Test ID: 7.3.1.17.14 ... Test title: GET Subscriptions as a Paged Response ... Test objective: The objective is Get the list of active subscriptions as a Paged Response. ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The VNFM supports response paging for the subscriptions resources ... Post-Conditions: none @@ -187,7 +187,7 @@ GET subscriptions - Bad Request Response too Big ... Test title: GET subscriptions - Bad Request Response too Big ... Test objective: The objective is to test that the retrieval of the list of active subscriptions fails because response is too big. The test also checks the JSON schema of the unsuccessful operation HTTP response. ... Pre-conditions: none - ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -213,13 +213,39 @@ GET Subscriptions as a Paged Response with nextpage_opauque_marker parameter ... Test title: GET Subscriptions as a Paged Response with nextpage_opauque_marker parameter ... Test objective: The objective is to Get the list of active subscriptions as a Paged Response and retrieve the next page using the nextpage_opaque_marker parameter ... Pre-conditions: A request for retrieving subscriptions as a paged response has been successfully issued (Test ID 7.3.1.17.14) - ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.18.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The VNFM supports response paging for the subscriptions resources ... Post-Conditions: none Get subscriptions with nextpage_opaque_marker parameter Check HTTP Response Status Code Is 200 +POST Create a new subscription with permitted authorization scope + [Documentation] Test ID: 7.3.1.17.18 + ... Test title: POST Create a new subscription with permitted authorization scope + ... Test objective: The POST method creates a new subscription with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + Post Create subscription with permitted authorization scope + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is Subscription + +POST Create a new subscription with not permitted authorization scope + [Documentation] Test ID: 7.3.1.17.19 + ... Test title: POST Create a new subscription with not permitted authorization scope + ... Test objective: The POST method creates a new subscription with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.18.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: in response header Location shall not be null + Post Create subscription with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails + *** Keywords *** Void Log do nothing diff --git a/SOL003/VNFLifecycleManagement-API/TerminateVNFTask.robot b/SOL003/VNFLifecycleManagement-API/TerminateVNFTask.robot index b21a1301c688372fef386f39bf7667fa9a48b8e6..5e765aa31413860612406ee2c2cc69f4fd2cdf92 100644 --- a/SOL003/VNFLifecycleManagement-API/TerminateVNFTask.robot +++ b/SOL003/VNFLifecycleManagement-API/TerminateVNFTask.robot @@ -13,7 +13,7 @@ POST Terminate a vnfInstance ... Test title: POST Terminate a vnfInstance ... Test objective: The objective is to test that POST method terminate a VNF instance ... Pre-conditions: none - ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -27,7 +27,7 @@ POST Terminate a vnfInstance Conflict (Not-Instantiated) ... Test title: POST Terminate a vnfInstance Conflict (Not-Instantiated) ... Test objective: The objective is to test that the vnf Instance cannot be terminated ... Pre-conditions: VNF instance resource is in NOT-INSTANTIATED state - ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -40,7 +40,7 @@ GET Terminate VNFInstance - Method not implemented ... Test title: GET Terminate VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.8.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.8.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -52,7 +52,7 @@ PUT Terminate VNFInstance - Method not implemented ... Test title: PUT Terminate VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.8.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.8.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -64,7 +64,7 @@ PATCH Terminate VNFInstance - Method not implemented ... Test title: PATCH Terminate VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.8.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.8.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -76,13 +76,40 @@ DELETE Terminate VNFInstance - Method not implemented ... Test title: DELETE Terminate VNFInstance - Method not implemented ... Test objective: The objective is to verify that the method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.8.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.8.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE Terminate VNF Check HTTP Response Status Code Is 405 +POST Terminate a vnfInstance with permitted authorization scope + [Documentation] Test ID: 7.3.1.7.7 + ... Test title: POST Terminate a vnfInstance with permitted authorization scope + ... Test objective: The objective is to test that POST method terminate a VNF instance with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Terminate VNF with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +POST Terminate a vnfInstance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.7.8 + ... Test title: POST Terminate a vnfInstance with not permitted authorization scope + ... Test objective: The objective is to test that POST method terminate a VNF instance with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.8.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Terminate VNF with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails + *** Keywords *** Check resource existence Set Headers {"Accept":"${ACCEPT}"} diff --git a/SOL003/VNFLifecycleManagement-API/TerminateVNFWorkflow.robot b/SOL003/VNFLifecycleManagement-API/TerminateVNFWorkflow.robot index d458119a4e5f862aff96ad850b9cb6771af5a11d..7e71c0736819dea563516751dfbac97f78aabbb8 100644 --- a/SOL003/VNFLifecycleManagement-API/TerminateVNFWorkflow.robot +++ b/SOL003/VNFLifecycleManagement-API/TerminateVNFWorkflow.robot @@ -15,7 +15,7 @@ Terminate a VNF Instance ... Test title: Terminate a VNF Instance ... Test objective: The objective is to terminate a VNF instance. ... Pre-conditions: VNF instance in INSTANTIATED state - ... Reference: Clause 5.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: NFVO is able to receive notifications from VNFM. ... Post-Conditions: VNF instance in NOT_INSTANTIATED state diff --git a/SOL003/VNFLifecycleManagement-API/VNFInstances.robot b/SOL003/VNFLifecycleManagement-API/VNFInstances.robot index 3bb82db575223596a7f7fd87e7ee43a933a3f613..dbe01ed9352e6ac429ab5baf0250ebbffb7dbfe2 100644 --- a/SOL003/VNFLifecycleManagement-API/VNFInstances.robot +++ b/SOL003/VNFLifecycleManagement-API/VNFInstances.robot @@ -13,7 +13,7 @@ POST Create a new vnfInstance ... Test title: POST Create a new vnfInstance ... Test objective: The objective is to create a new VNF instance resource ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF instance created @@ -26,7 +26,7 @@ GET information about multiple VNF instances ... Test title: GET information about multiple VNF instances ... Test objective: The objective is to query information about multiple VNF instances ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -38,8 +38,8 @@ GET information about multiple VNF instances Bad Request Invalid attribute-based [Documentation] Test ID: 7.3.1.1.3 ... Test title: GET information about multiple VNF instances Bad Request Invalid attribute-based filtering parameters ... Test objective: The objective is to query information about multiple VNF instances with Invalid attribute-based filtering parameters - ... Pre-conditions: A VNF is instantiated, a bad filter selector (filter selectors are listed in Table 5.4.2.3.2-1 - ETSI GS NFV-SOL 003 [1] v4.4.1). - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Pre-conditions: A VNF is instantiated, a bad filter selector (filter selectors are listed in Table 5.4.2.3.2-1 - ETSI GS NFV-SOL 003 [1] v4.5.1). + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -52,8 +52,8 @@ GET information about multiple VNF instances Bad Request Invalid attribute selec [Documentation] Test ID: 7.3.1.1.4 ... Test title: GET information about multiple VNF instances Bad Request Invalid attribute selector ... Test objective: The objective is to query information about multiple VNF instances with Invalid attribute selector - ... Pre-conditions: A VNF is instantiated, a bad attribute selector (attribute selectors are listed in Table 5.4.2.3.2-1 - ETSI GS NFV-SOL 003 [1] v4.4.1). - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Pre-conditions: A VNF is instantiated, a bad attribute selector (attribute selectors are listed in Table 5.4.2.3.2-1 - ETSI GS NFV-SOL 003 [1] v4.5.1). + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -66,7 +66,7 @@ GET information about multiple VNF instances with "all_fields" attribute selecto ... Test title: GET information about multiple VNF instances with "all_fields" attribute selector ... Test objective: The objective is to query information about multiple VNF instances ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -79,7 +79,7 @@ GET information about multiple VNF instances with "exclude_default" attribute se ... Test title: GET information about multiple VNF instances with "exclude_default" attribute selector ... Test objective: The objective is to query information about multiple VNF instances ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -92,7 +92,7 @@ GET information about multiple VNF instances with "fields" attribute selector ... Test title: GET information about multiple VNF instances with "fields" attribute selector ... Test objective: The objective is to query information about multiple VNF instances ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -105,7 +105,7 @@ GET information about multiple VNF instances with "exclude_fields" attribute sel ... Test title: GET information about multiple VNF instances with "exclude_fields" attribute selector ... Test objective: The objective is to query information about multiple VNF instances ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -118,7 +118,7 @@ PUT multiples VNFInstances - Method not implemented ... Test title: PUT multiples VNFInstances - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -130,7 +130,7 @@ PATCH multiples VNFInstances - Method not implemented ... Test title: PATCH multiples VNFInstances - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -142,7 +142,7 @@ DELETE VNFInstances - Method not implemented ... Test title: DELETE multiples VNFInstances - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -154,7 +154,7 @@ GET information about multiple VNF instances to get Paged Response ... Test title: GET information about multiple VNF instances to get Paged Response ... Test objective: The objective is to query information about multiple VNF instances to get Paged Response. ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The VNFM supports response paging for the subscriptions resources ... Post-Conditions: none @@ -167,7 +167,7 @@ GET information about multiple VNF instances as a Paged Response with nextpage_o ... Test title: GET information about multiple VNF instances as a Paged Response with nextpage_opauque_marker parameter ... Test objective: The objective is to query information about multiple VNF instances as a Paged Response and retrieve the next page using the nextpage_opaque_marker parameter ... Pre-conditions: A request for retrieving multiple VNF instances as a paged response has been successfully issued (Test ID 7.3.1.1.12) - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The VNFM supports response paging for the VNF instance resources ... Post-Conditions: none @@ -178,8 +178,8 @@ GET information about multiple VNF instances - Bad Request Response too Big [Documentation] Test ID: 7.3.1.1.13 ... Test title: GET information about multiple VNF instances - Bad Request Response too Big ... Test objective: The objective is to query information about multiple VNF instances fails because response is too big. The test also checks the JSON schema of the unsuccessful operation HTTP response. - ... Pre-conditions: A VNF is instantiated, a bad attribute selector (attribute selectors are listed in Table 5.4.2.3.2-1 - ETSI GS NFV-SOL 003 [1] v4.4.1). - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Pre-conditions: A VNF is instantiated, a bad attribute selector (attribute selectors are listed in Table 5.4.2.3.2-1 - ETSI GS NFV-SOL 003 [1] v4.5.1). + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -192,7 +192,7 @@ GET information about multiple VNF instances with "exclude_default" and "fields" ... Test title: GET information about multiple VNF instances with "exclude_default" and "fields" attribute selector ... Test objective: The objective is to query information about multiple VNF instances ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -205,7 +205,7 @@ POST Create a new vnfInstance - Unprocessable Content ... Test title: POST Create a new vnfInstance - Unprocessable Content ... Test objective: The objective is to test that correct error code is returned when VNF package referenced by the "vnfdId" attribute in the "CreateVnfRequest" structure is not in the "ENABLED" state or does not exist. ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The VNF package referenced by the "vnfdId" attribute in the "CreateVnfRequest" structure is not in the "ENABLED" state or does not exist. ... Post-Conditions: none @@ -218,10 +218,36 @@ GET information about multiple VNF instances using Filter ... Test title: GET information about multiple VNF instances using Filter ... Test objective: The objective is to query information about multiple VNF instances using filter ... Pre-conditions: none - ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.2.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none GET multiple vnfInstances using filter Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is vnfInstances \ No newline at end of file + Check HTTP Response Body Json Schema Is vnfInstances + +POST Create a new vnfInstance with permitted authorization scope + [Documentation] Test ID: 7.3.1.1.17 + ... Test title: POST Create a new vnfInstance with permitted authorization scope + ... Test objective: The objective is to create a new VNF instance resource with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF instance created + POST Create a new vnfInstance with permitted authorization scope + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is vnfInstance + +POST Create a new vnfInstance with not permitted authorization scope + [Documentation] Test ID: 7.3.1.1.18 + ... Test title: POST Create a new vnfInstance with not permitted authorization scope + ... Test objective: The objective is to create a new VNF instance resource with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.2.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF instance created + POST Create a new vnfInstance with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/VNFSelectDeployableModules.robot b/SOL003/VNFLifecycleManagement-API/VNFSelectDeployableModules.robot new file mode 100644 index 0000000000000000000000000000000000000000..37c1dce8411562a025926df156cbf8486ab0012f --- /dev/null +++ b/SOL003/VNFLifecycleManagement-API/VNFSelectDeployableModules.robot @@ -0,0 +1,98 @@ +*** Settings *** +Resource environment/variables.txt +Resource VnfLcmMntOperationKeywords.robot +Library REST ${VNFM_SCHEMA}://${VNFM_HOST}:${VNFM_PORT} ssl_verify=false +Library OperatingSystem +Library BuiltIn +Library Collections +Library JSONLibrary +Library Process + +*** Test Cases *** +POST Select VNF Deployable Module + [Documentation] Test ID: 7.3.1.43.1 + ... Test title: POST Select VNF Deployable Module + ... Test objective: The objective is to select VNF Deployable Module + ... Pre-conditions: The VNF instance resource is in INSTANTIATED state + ... Reference: Clause 5.4.26.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Select VNF Deployable Modules + Check HTTP Response Status Code Is 202 + Check HTTP Response Header Contains Location + Check Individual VNF LCM operation occurrence operationState is STARTING + +POST Select VNF Deployable Module Not Found + [Documentation] Test ID: 7.3.1.43.2 + ... Test title: POST Select VNF Deployable Module Not Found + ... Test objective: The objective is to test that the POST Select VNF Deployable Module fails when the resource is not present. + ... Pre-conditions: none + ... Reference: Clause 5.4.26.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Select VNF Deployable Modules Not Existing + Check HTTP Response Status Code Is 404 + Check HTTP Response Body Json Schema Is ProblemDetails + +POST Select VNF Deployable Module with conflict (Not Instantiated) + [Documentation] Test ID: 7.3.1.43.3 + ... Test title: POST Operate a vnfInstance Conflict (Not-Instantiated) + ... Test objective: The objective is to test that the operation fails when there is a conflict with the resource state. + ... Pre-conditions: the VNF instance resource is in NOT-INSTANTIATED state + ... Reference: Clause 5.4.26.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + POST Select VNF Deployable Modules with conflict + Check HTTP Response Status Code Is 409 + Check HTTP Response Body Json Schema Is ProblemDetails + +GET Select VNF Deployable Module - Method not implemented + [Documentation] Test ID: 7.3.1.43.4 + ... Test title: GET Select VNF Deployable Module - Method not implemented + ... Test objective: The objective is to verify that the method is not implemented + ... Pre-conditions: none + ... Reference: Clause 5.4.26.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET Select VNF Deployable Modules + Check HTTP Response Status Code Is 405 + +PUT Select VNF Deployable Module - Method not implemented + [Documentation] Test ID: 7.3.1.43.5 + ... Test title: PUT Select VNF Deployable Module - Method not implemented + ... Test objective: The objective is to test that PUT method is not implemented + ... Pre-conditions: none + ... Reference: Clause 5.4.26.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + PUT Select VNF Deployable Modules + Check HTTP Response Status Code Is 405 + +PATCH Select VNF Deployable Module - Method Not implemented + [Documentation] Test ID: 7.3.1.43.6 + ... Test title: PATCH Select VNF Deployable Module - Method Not implemented + ... Test objective: The objective is to test that PATCH method is not implemented + ... Pre-conditions: none + ... Reference: Clause 5.4.26.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + PATCH Select VNF Deployable Modules + Check HTTP Response Status Code Is 405 + +DELETE Select VNF Deployable Module - Method Not implemented + [Documentation] Test ID: 7.3.1.43.7 + ... Test title: DELETE Select VNF Deployable Module - Method Not implemented + ... Test objective: The objective is to test that DELETE method is not implemented + ... Pre-conditions: none + ... Reference: Clause 5.4.26.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + DELETE Select VNF Deployable Modules + Check HTTP Response Status Code Is 405 \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/VNFSnapshots.robot b/SOL003/VNFLifecycleManagement-API/VNFSnapshots.robot index 031f8b86f2c7e5aa9984185b006b6aad3bac2469..6317e454fb5a9d9535a61fe7f46b7939812aa3c0 100644 --- a/SOL003/VNFLifecycleManagement-API/VNFSnapshots.robot +++ b/SOL003/VNFLifecycleManagement-API/VNFSnapshots.robot @@ -7,7 +7,7 @@ POST Create a new VNF Snapshot ... Test title: POST Create a new VNF Snapshot ... Test objective: The objective is to create a new VNF snapshot ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF snapshot is created @@ -21,7 +21,7 @@ GET information about multiple VNF Snapshots ... Test title: GET information about multiple VNF Snapshots ... Test objective: The objective is to get information about multiples VNF snapshots ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -34,7 +34,7 @@ GET information about multiple VNF Snapshots Bad Request Invalid attribute-based ... Test title: GET information about multiple VNF Snapshots Bad Request Invalid attribute-based filtering parameters ... Test objective: The objective is to get information about multiples VNF Snapshots with Invalid attribute-based filtering parameters ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -47,7 +47,7 @@ GET information about multiple VNF Snapshots Bad Request Invalid attribute selec ... Test title: GET information about multiple VNF Snapshots Bad Request Invalid attribute selector ... Test objective: The objective is to get information about multiples VNF Snapshots with Invalid attribute-based filtering parameters ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -60,7 +60,7 @@ GET information about multiple VNF Snapshots with "all_fields" attribute selecto ... Test title: GET information about multiple VNF Snapshots with "all_fields" attribute selector ... Test objective: The objective is to query information about multiple VNF Snapshots ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -73,7 +73,7 @@ GET information about multiple VNF Snapshots with "exclude_default" attribute se ... Test title: GET information about multiple VNF Snapshots with "exclude_default" attribute selector ... Test objective: The objective is to query information about multiple VNF Snapshots ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -86,7 +86,7 @@ GET information about multiple VNF Snapshots with "fields" attribute selector ... Test title: GET information about multiple VNF Snapshots with "fields" attribute selector ... Test objective: The objective is to query information about multiple VNF Snapshots ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -99,7 +99,7 @@ GET information about multiple VNF Snapshots with "exclude_default" and "fields" ... Test title: GET information about multiple VNF Snapshots with "exclude_default" and "fields" attribute selector ... Test objective: The objective is to query information about multiple VNF Snapshots ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -112,7 +112,7 @@ GET information about multiple VNF Snapshots with "exclude_fields" attribute sel ... Test title: GET information about multiple VNF Snapshots with "exclude_fields" attribute selector ... Test objective: The objective is to query information about multiple VNF Snapshots ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -125,7 +125,7 @@ GET VNF Snapshots - Bad Request Response too Big ... Test title: GET VNF Snapshots - Bad Request Response too Big ... Test objective: The objective is test that the retrieval of existing VNF Snapshots list fails because response is too big, and perform the JSON schema validation of the failed operation HTTP response. ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNFM does not support paged response. ... Post-Conditions: none @@ -138,7 +138,7 @@ GET VNF Snapshots as Paged Response ... Test title: GET VNF Snapshots as Paged Response ... Test objective: The objective is to test that GET method retrieves the list of existing VNF Snapshots as paged response. ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNFM supports paged response. ... Post-Conditions: none @@ -151,7 +151,7 @@ PUT VNF Snapshots - Method not implemented ... Test title: PUT VNF Snapshots - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -163,7 +163,7 @@ PATCH VNF Snapshots - Method not implemented ... Test title: PATCH VNF Snapshots - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -175,7 +175,7 @@ DELETE VNF Snapshots - Method not implemented ... Test title: DELETE VNF Snapshots - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF instance not deleted @@ -187,10 +187,37 @@ GET information about multiple VNF Snapshots using Filter ... Test title: GET information about multiple VNF Snapshots using Filter ... Test objective: The objective is to get information about multiples VNF snapshots using filter ... Pre-conditions: none - ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.23.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none GET multiple VNF Snapshots using filter Check HTTP Response Status Code Is 200 - Check HTTP Response Body Json Schema Is VnfSnapshotsInfo \ No newline at end of file + Check HTTP Response Body Json Schema Is VnfSnapshotsInfo + +POST Create a new VNF Snapshot with permitted authorization scope + [Documentation] Test ID: 7.3.1.40.16 + ... Test title: POST Create a new VNF Snapshot with permitted authorization scope + ... Test objective: The objective is to create a new VNF snapshot with permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.23.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF snapshot is created + POST Create a new VNF Snapshot with permitted authorization scope + Check HTTP Response Status Code Is 201 + Check HTTP Response Body Json Schema Is VnfSnapshotInfo + Check HTTP Location Header Contains URI of Created Resource + +POST Create a new VNF Snapshot with not permitted authorization scope + [Documentation] Test ID: 7.3.1.40.17 + ... Test title: POST Create a new VNF Snapshot with not permitted authorization scope + ... Test objective: The objective is to create a new VNF snapshot with not permitted authorization scope + ... Pre-conditions: none + ... Reference: Clause 5.4.23.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: VNF snapshot is created + POST Create a new VNF Snapshot with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/VNFStateSnapshot.robot b/SOL003/VNFLifecycleManagement-API/VNFStateSnapshot.robot index 670775dae97c9bc9c58208800d46548b9f31db74..a81f3f672702ae49478f4183e36b3e49398c5d2d 100644 --- a/SOL003/VNFLifecycleManagement-API/VNFStateSnapshot.robot +++ b/SOL003/VNFLifecycleManagement-API/VNFStateSnapshot.robot @@ -7,7 +7,7 @@ POST VNF State Snapshot - Method not implemented ... Test title: POST VNF State Snapshot - Method not implemented ... Test objective: The objective is to test that POST method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -19,7 +19,7 @@ GET VNF State Snapshot - Complete File ... Test title: GET Information about an individual VNF State Snapshot - Complete File ... Test objective: The objective is to fetch the whole content of a VNF State Snapshot using GET method. ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -32,7 +32,7 @@ GET VNF State Snapshot - Partial Content ... Test title: GET VNF State Snapshot - Partial Content ... Test objective: The objective is to fetch partial content of a VNF State Snapshot by sending a range request using GET method. ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNFM supports range requests ... Post-Conditions: none @@ -46,7 +46,7 @@ GET VNF State Snapshot - Range Request Not Supported ... Test title: GET VNF State Snapshot - Range Request Not Supported ... Test objective: The objective is to test that the whole content of a VNF State Snapshot is delivered even with a range request when VNFM does not support range requests. ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNFM does not support range requests ... Post-Conditions: none @@ -60,7 +60,7 @@ GET VNF State Snapshot - Range Not Satisfiable ... Test title: GET VNF State Snapshot - Range Not Satisfiable ... Test objective: The objective is to test that an error is returned when the byte range passed in the "Range" header does not match any available byte range in the VNF State Snapshot package file. ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: VNFM supports range requests ... Post-Conditions: none @@ -72,7 +72,7 @@ GET VNF State Snapshot - Conflict ... Test title: GET VNF State Snapshot - Conflict ... Test objective: The objective is to test that an error is returned when there is a conflict with the state of the VNF snapshot resource. ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: Typically, this is due to the fact that the VNF snapshot creation process is not completed. ... Post-Conditions: none @@ -84,7 +84,7 @@ PUT VNF State Snapshot - Method not implemented ... Test title: PUT VNF State Snapshot - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: VNF State Snapshot Package not modified @@ -96,7 +96,7 @@ PATCH VNF State Snapshot - Method Not implemented ... Test title: PATCH VNF State Snapshot ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -108,9 +108,35 @@ DELETE VNF State Snapshot - Method Not implemented ... Test title: DELETE VNF State Snapshot - Method Not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.25.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.25.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none DELETE VNF State Snapshot - Check HTTP Response Status Code Is 405 \ No newline at end of file + Check HTTP Response Status Code Is 405 + +GET VNF State Snapshot - Complete File with permitted authorization scope + [Documentation] Test ID: 7.3.1.42.10 + ... Test title: GET Information about an individual VNF State Snapshot - Complete File with permitted authorization scope + ... Test objective: The objective is to fetch the whole content of a VNF State Snapshot using GET method with permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET VNF State Snapshot - Complete with permitted authorization scope + Check HTTP Response Status Code Is 200 + Check HTTP Content-Type Header Is Set + +GET VNF State Snapshot - Complete File with not permitted authorization scope + [Documentation] Test ID: 7.3.1.42.11 + ... Test title: GET Information about an individual VNF State Snapshot - Complete File with not permitted authorization scope + ... Test objective: The objective is to fetch the whole content of a VNF State Snapshot using GET method with not permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.25.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET VNF State Snapshot - Complete with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/VnfLcmMntOperationKeywords.robot b/SOL003/VNFLifecycleManagement-API/VnfLcmMntOperationKeywords.robot index 180d7fa340bcc2efa08593d9a07f2f4ce8841e63..c5ccf660c3ca162552e554310c008720d43ff4aa 100644 --- a/SOL003/VNFLifecycleManagement-API/VnfLcmMntOperationKeywords.robot +++ b/SOL003/VNFLifecycleManagement-API/VnfLcmMntOperationKeywords.robot @@ -9,6 +9,8 @@ Library JSONLibrary Library Collections Library Process Library JSONSchemaLibrary schemas/ +Library jwt + #Variables descriptors/SOL001/VNFD/vnfd_SOL001.yaml #Variables descriptors/SOL006/VNFD/vnfd_SOL006.yaml @@ -17,7 +19,7 @@ Create Sessions Start Process java -jar ${MOCK_SERVER_JAR} -serverPort ${callback_port} alias=mockInstance Wait For Process handle=mockInstance timeout=5s on_timeout=continue Create Mock Session ${callback_uri}:${callback_port} - + Get Vnf Instance [Arguments] ${vnfInstanceId} Set Headers {"Accept":"${ACCEPT}"} @@ -234,7 +236,7 @@ POST Cancel operation task Log Validate Status code ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - + POST Cancel operation task with conflict Log Cancel an ongoing VNF lifecycle operation Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -252,6 +254,28 @@ POST Cancel operation task not existing Log Validate Status code ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} + +POST Cancel operation task with permitted authorization scope + Log Cancel an ongoing VNF lifecycle operation with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Cancel a VNF lifecycle operation + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/cancel ${CancelMode} + Log Validate Status code + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Cancel operation task with not permitted authorization scope + Log Cancel an ongoing VNF lifecycle operation with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${Authorization_Token}"} + Log Cancel a VNF lifecycle operation + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/cancel ${CancelMode} + Log Validate Status code + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} GET Cancel operation task log Trying to perform a GET. This method should not be implemented @@ -279,7 +303,7 @@ DELETE Cancel operation task Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/cancel ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} POST Change External VNF Connectivity Log Trying to change the external connectivity of a VNF instance. @@ -288,6 +312,30 @@ POST Change External VNF Connectivity Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} ${body}= Get File jsons/changeExtVnfConnectivityRequest.json Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Change External VNF Connectivity with permitted authorization scope + Log Trying to change the external connectivity of a VNF instance with permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${CHANGE_EXT_CONN_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${body}= Get File jsons/changeExtVnfConnectivityRequest.json + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Change External VNF Connectivity with not permitted authorization scope + Log Trying to change the external connectivity of a VNF instance with not permitted authorization scope. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + ${scopeValue}= Create Dictionary scopeValue=${CHANGE_EXT_CONN_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${body}= Get File jsons/changeExtVnfConnectivityRequest.json + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} @@ -317,7 +365,7 @@ DELETE Change External VNF Connectivity Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} POST Change VNF deployment flavour Log Trying to change the deployment flavour of a VNF instance. @@ -353,6 +401,34 @@ POST Change VNF deployment flavour of not existing VNF ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} +POST Change VNF deployment flavour with permitted authorization scope + Log Trying to change the deployment flavour of a VNF instance with permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${CHANGE_FLAVOUR_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Run Keyword If ${check_descriptors} == 1 PARSE the Descriptor File + ${template}= Get File jsons/changeVnfFlavourRequest.json + ${body}= Format String ${template} newFlavourId=${Flavour_ID} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_flavour ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Change VNF deployment flavour with not permitted authorization scope + Log Trying to change the deployment flavour of a VNF instance with not permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${CHANGE_FLAVOUR_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Run Keyword If ${check_descriptors} == 1 PARSE the Descriptor File + ${template}= Get File jsons/changeVnfFlavourRequest.json + ${body}= Format String ${template} newFlavourId=${Flavour_ID} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_flavour ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + GET Change VNF deployment flavour log Trying to perform a GET. This method should not be implemented Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -380,8 +456,8 @@ DELETE Change VNF deployment flavour Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_flavour ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - -POST Create a new vnfInstance + +POST Create a new vnfInstance Log Create VNF instance by POST to /vnf_instances Set Headers {"Accept":"${ACCEPT}"} Set Headers {"Content-Type": "${CONTENT_TYPE}"} @@ -488,7 +564,7 @@ GET multiple vnfInstances with exclude_fields attribute selector GET ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances?exclude_fields=${fields_vnfInstance} ${output}= Output response Set Suite Variable ${response} ${output} - + PUT VNFInstances log Trying to perform a PUT. This method should not be implemented Set Headers {"Accept":"${ACCEPT}"} @@ -514,7 +590,33 @@ DELETE VNFInstances Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Put ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances ${output}= Output response - Set Suite Variable ${response} ${output} + Set Suite Variable ${response} ${output} + +POST Create a new vnfInstance with permitted authorization scope + Log Create VNF instance by POST to /vnf_instances with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_INSTANCE_INFO_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/createVnfRequest.json + ${body}= Format String ${template} vnfdId=${vnfdId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Create a new vnfInstance with not permitted authorization scope + Log Create VNF instance by POST to /vnf_instances with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_INSTANCE_INFO_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/createVnfRequest.json + ${body}= Format String ${template} vnfdId=${vnfdId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} POST individual vnfInstance log Trying to perform a POST. This method should not be implemented @@ -531,9 +633,31 @@ GET individual vnfInstance Set Headers {"Content-Type": "${CONTENT_TYPE}"} Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +GET individual vnfInstance with permitted authorization scope + log Trying to get information about an individual VNF instance with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_INSTANCE_INFO_READONLY_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - + +GET individual vnfInstance with not permitted authorization scope + log Trying to get information about an individual VNF instance with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_INSTANCE_INFO_READONLY_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + PUT individual vnfInstance log Trying to perform a PUT. This method should not be implemented Set Headers {"Accept":"${ACCEPT}"} @@ -576,7 +700,7 @@ PATCH individual vnfInstance with conflict Patch ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${anotherInstantiatedVnfInstanceId} ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - + PATCH individual vnfInstance - Etag mismatch log Trying to modify an individual VNF instance Set Headers {"Accept":"${ACCEPT}"} @@ -590,7 +714,6 @@ PATCH individual vnfInstance - Etag mismatch ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - DELETE individual vnfInstance log Trying to delete an individual VNF instance Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -603,8 +726,9 @@ DELETE individual vnfInstance in INSTANTIATED state Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${instantiatedVnfInstanceId} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} -POST instantiate individual vnfInstance + Set Global Variable ${response} ${outputResponse} + +POST instantiate individual vnfInstance Log Trying to Instantiate a vnf Instance Set Headers {"Accept":"${ACCEPT}"} Set Headers {"Content-Type": "${CONTENT_TYPE}"} @@ -613,7 +737,7 @@ POST instantiate individual vnfInstance Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/instantiate ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - + POST instantiate individual vnfInstance with conflict Log Trying to Instantiate a vnf Instance Set Headers {"Accept":"${ACCEPT}"} @@ -649,9 +773,34 @@ DELETE instantiate individual vnfInstance log Trying to perform a GET. This method should not be implemented Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/instantiate + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST instantiate individual vnfInstance with permitted authorization scope + Log Trying to Instantiate a vnf Instance with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${INSTANTIATE_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${body}= Get File jsons/instantiateVnfRequest.json + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/instantiate ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} -POST Scale vnfInstance + +POST instantiate individual vnfInstance with not permitted authorization scope + Log Trying to Instantiate a vnf Instance with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${INSTANTIATE_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${body}= Get File jsons/instantiateVnfRequest.json + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/instantiate ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Scale vnfInstance Log Trying to Instantiate a vnf Instance Set Headers {"Accept":"${ACCEPT}"} Set Headers {"Content-Type": "${CONTENT_TYPE}"} @@ -660,7 +809,8 @@ POST Scale vnfInstance ${body}= Format String ${template} scaletype=${scaletype} scaleAspectId=${scaleAspectId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/scale ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + POST Scale vnfInstance with VNF NOT-INSTANTIATED Log Trying to Instantiate a vnf Instance Set Headers {"Accept":"${ACCEPT}"} @@ -680,7 +830,31 @@ POST Scale vnfInstance with not existing VNF ${body}= Format String ${template} scaletype=${scaletype} scaleAspectId=${scaleAspectId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${notExistingVnfInstanceId}/scale ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} +POST Scale vnfInstance with permitted authorization scope + Log Trying to Instantiate a vnf Instance with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SCALE_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/scaleVnfRequest.json + ${body}= Format String ${template} scaletype=${scaletype} scaleAspectId=${scaleAspectId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/scale ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} +POST Scale vnfInstance with not permitted authorization scope + Log Trying to Instantiate a vnf Instance with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SCALE_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/scaleVnfRequest.json + ${body}= Format String ${template} scaletype=${scaletype} scaleAspectId=${scaleAspectId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/scale ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} GET Scale vnfInstance Log Trying to get a scale a vnf Instance Set Headers {"Accept":"${ACCEPT}"} @@ -716,8 +890,9 @@ DELETE Scale vnfInstance ${body}= Get File jsons/scaleVnfRequest.json Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/scale ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} -POST Scale vnfInstance to level with InstantiationLevelId attribute + Set Global Variable ${response} ${outputResponse} + +POST Scale vnfInstance to level with InstantiationLevelId attribute Log Trying to scale a vnf Instance to level Set Headers {"Accept":"${ACCEPT}"} Set Headers {"Content-Type": "${CONTENT_TYPE}"} @@ -727,6 +902,7 @@ POST Scale vnfInstance to level with InstantiationLevelId attribute Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/scale_to_level ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} + POST Scale vnfInstance to level with scaleInfo attribute Log Trying to scale a vnf Instance to level Set Headers {"Accept":"${ACCEPT}"} @@ -755,8 +931,33 @@ POST Scale vnfInstance to level with not existing VNF ${template}= Get File jsons/scaleVnfToLevelRequest.json ${body}= Format String ${template} instantiationLevelId=${instantiationLevelId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${notExistingVnfInstanceId}/scale_to_level ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} +POST Scale vnfInstance to level with InstantiationLevelId attribute with permitted authorization scope + Log Trying to scale a vnf Instance to level with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SCALE_TO_LEVEL_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/scaleVnfToLevelRequestInstantiationLevelId.json + ${body}= Format String ${template} instantiationLevelId=${instantiationLevelId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/scale_to_level ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} + +POST Scale vnfInstance to level with InstantiationLevelId attribute with not permitted authorization scope + Log Trying to scale a vnf Instance to level with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SCALE_TO_LEVEL_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/scaleVnfToLevelRequestInstantiationLevelId.json + ${body}= Format String ${template} instantiationLevelId=${instantiationLevelId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/scale_to_level ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} GET Scale vnfInstance to level log Trying to perform a GET. This method should not be implemented Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -805,8 +1006,34 @@ POST Terminate VNF in NOT-INSTANTIATED state ${body}= Format String ${template} terminationType=${terminationType} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${notInstantiatedVnfInstanceId}/terminate ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} +POST Terminate VNF with permitted authorization scope + Log Trying to terminate a VNF instance with permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${TERMINATE_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/terminateVnfRequest.json + ${body}= Format String ${template} terminationType=${terminationType} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/terminate ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Terminate VNF with not permitted authorization scope + Log Trying to terminate a VNF instance with not permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${TERMINATE_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/terminateVnfRequest.json + ${body}= Format String ${template} terminationType=${terminationType} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/terminate ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + GET Terminate VNF log Trying to perform a GET. This method should not be implemented Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -833,7 +1060,7 @@ DELETE Terminate VNF Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/terminate ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} POST Heal VNF Log Trying to heal a VNF instance. @@ -844,8 +1071,8 @@ POST Heal VNF ${body}= Format String ${template} healingCause=${healingCause} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/heal ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} - + Set Global Variable ${response} ${outputResponse} + POST Heal VNF Not Instantiated Log Trying to heal a VNF instance. Set Headers {"Accept":"${ACCEPT}"} @@ -866,7 +1093,33 @@ POST Heal VNF Not Existing ${body}= Format String ${template} healingCause=${healingCause} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${notExistingVnfInstanceId}/heal ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + +POST Heal VNF with permitted authorization scope + Log Trying to heal a VNF instance with permitted authorization scope. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + ${scopeValue}= Create Dictionary scopeValue=${HEAL_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/healVnfRequest.json + ${body}= Format String ${template} healingCause=${healingCause} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/heal ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Heal VNF with not permitted authorization scope + Log Trying to heal a VNF instance with not permitted authorization scope. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + ${scopeValue}= Create Dictionary scopeValue=${HEAL_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/healVnfRequest.json + ${body}= Format String ${template} healingCause=${healingCause} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/heal ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} GET Heal VNF log Trying to perform a GET. This method should not be implemented @@ -894,7 +1147,7 @@ DELETE Heal VNF Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/heal ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} POST Operate VNF Log Trying to operate a VNF instance. @@ -906,7 +1159,7 @@ POST Operate VNF Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/operate ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - + POST Operate VNF with conflict Log Trying to operate a VNF instance. Set Headers {"Accept":"${ACCEPT}"} @@ -955,7 +1208,33 @@ DELETE Operate VNF Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/operate ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + +POST Operate VNF with permitted authorization scope + Log Trying to operate a VNF instance with permitted authorization scope. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + ${scopeValue}= Create Dictionary scopeValue=${OPERATE_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/operateVnfRequest.json + ${body}= Format String ${template} changeStateTo=${changeStateTo} stopType=${stopType} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/operate ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Operate VNF with not permitted authorization scope + Log Trying to operate a VNF instance with not permitted authorization scope. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + ${scopeValue}= Create Dictionary scopeValue=${OPERATE_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/operateVnfRequest.json + ${body}= Format String ${template} changeStateTo=${changeStateTo} stopType=${stopType} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/operate ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} Post VNF LCM Operation occurrences log Trying to perform a POST. This method should not be implemented @@ -971,7 +1250,7 @@ GET VNF LCM Operation occurrences Log Execute Query and validate response Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} Get VNF LCM Operation occurrences with nextpage_opaque_marker parameter Log Get next page of subscriptions Set Headers {"Accept":"${ACCEPT}"} @@ -1036,7 +1315,27 @@ Get VNF LCM Operation occurrences with exclude_fields attribute selector Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} GET ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs?exclude_fields=${fields_vnfLcmOpOcc} ${output}= Output response - Set Suite Variable ${response} ${output} + Set Suite Variable ${response} ${output} +GET VNF LCM Operation occurrences with permitted authorization scope + Log Query status information about multiple VNF lifecycle management operation occurrences with permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} +GET VNF LCM Operation occurrences with not permitted authorization scope + Log Query status information about multiple VNF lifecycle management operation occurrences with not permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} PUT VNF LCM Operation occurrences log Trying to perform a PUT. This method should not be implemented Set Headers {"Accept":"${ACCEPT}"} @@ -1072,7 +1371,27 @@ Get Individual VNF LCM Operation occurrences Log Execute Query and validate response Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} +Get Individual VNF LCM Operation occurrences with permitted authorization scope + Log Query status information about multiple VNF lifecycle management operation occurrences with permitted authorization scope. + Set Headers {"Accept":"${ACCEPT}"} + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Log Execute Query and validate response + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} +Get Individual VNF LCM Operation occurrences with not permitted authorization scope + Log Query status information about multiple VNF lifecycle management operation occurrences with not permitted authorization scope. + Set Headers {"Accept":"${ACCEPT}"} + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Log Execute Query and validate response + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} Put multiple VNF instances log Trying to perform a PUT. This method should not be implemented Set Headers {"Accept":"${ACCEPT}"} @@ -1093,14 +1412,16 @@ Delete multiple VNF instances Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + Post Retry operation Log Retry a VNF lifecycle operation if that operation has experienced a temporary failure Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Log Execute Query and validate response Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/retry ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + Post Retry operation with conflict Log Retry a VNF lifecycle operation if that operation has experienced a temporary failure Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -1143,14 +1464,32 @@ Delete Retry operation Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/retry ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} +Post Retry operation with permitted authorization scope + Log Retry a VNF lifecycle operation if that operation has experienced a temporary failure with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/retry + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} +Post Retry operation with not permitted authorization scope + Log Retry a VNF lifecycle operation if that operation has experienced a temporary failure with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/retry + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} Post Rollback operation Log Rollback a VNF lifecycle operation if that operation has experienced a temporary failure Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Log Execute Query and validate response Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/rollback ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} Post Rollback operation with conflict Log Rollback a VNF lifecycle operation if that operation has experienced a temporary failure Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -1193,15 +1532,32 @@ Delete Rollback operation Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/rollback ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} +Post Rollback operation with permitted authorization scope + Log Rollback a VNF lifecycle operation if that operation has experienced a temporary failure with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/rollback + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} +Post Rollback operation with not permitted authorization scope + Log Rollback a VNF lifecycle operation if that operation has experienced a temporary failure with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/rollback + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} Post Fail operation - Log mark as Failed a VNF lifecycle operation if that operation has experienced a temporary failure + Log mark as Failed a VNF lifecycle operation if that operation has experienced a temporary failure Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Log Execute Query and validate response Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/fail ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} - Post Fail operation with conflict Log mark as Failed a VNF lifecycle operation if that operation has experienced a temporary failure Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -1215,8 +1571,27 @@ Post Fail operation not existing Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Log Execute Query and validate response Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${notExistingvnfLcmOpOccId}/fail + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +Post Fail operation with permitted authorization scope + Log mark as Failed a VNF lifecycle operation if that operation has experienced a temporary failure with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/fail ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} +Post Fail operation with not permitted authorization scope + Log mark as Failed a VNF lifecycle operation if that operation has experienced a temporary failure with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${OP_OCCS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Log Execute Query and validate response + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/fail + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} Get Fail operation Log Trying to perform a GET. This method should not be implemented. @@ -1246,7 +1621,8 @@ Delete Fail operation Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_lcm_op_occs/${vnfLcmOpOccId}/fail ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + Post Create subscription Log Create subscription instance by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions Set Headers {"Accept":"${ACCEPT}"} @@ -1265,7 +1641,6 @@ Post Create subscription Log Verify notification endpoint is tested Verify Mock Expectation ${notification_request} Clear Requests ${callback_endpoint} - Post Create subscription - DUPLICATION Log Trying to create a subscription with an already created content Pass Execution If ${VNFM_DUPLICATION} == 0 VNFM is not permitting duplication. Skipping the test @@ -1285,7 +1660,7 @@ Post Create subscription - DUPLICATION Log Verify notification endpoint is tested Verify Mock Expectation ${notification_request} Clear Requests ${callback_endpoint} - + Post Create subscription - NO-DUPLICATION Log Trying to create a subscription with an already created content Pass Execution If ${VNFM_DUPLICATION} == 1 VNFM permits duplication. Skipping the test @@ -1369,6 +1744,46 @@ Get subscriptions - invalid filter # GET ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions?exclude_fields=${fields_subscription} # ${output}= Output response # Set Suite Variable ${response} ${output} +Post Create subscription with permitted authorization scope + Log Create subscription instance by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SUBSCRIPTIONS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/lccnSubscriptionRequest.json + ${body}= Format String ${template} callback_uri=${callback_uri}:${callback_port} callback_endpoint=${callback_endpoint} + Log Creating mock request and response to handle GET operation on notification endpoint + &{notification_request}= Create Mock Request Matcher GET ${callback_endpoint} + &{notification_response}= Create Mock Response status_code=204 + Log Issue the subscription request + Create Mock Expectation ${notification_request} ${notification_response} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions ${body} allow_redirects=false + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + Log Verify notification endpoint is tested + Verify Mock Expectation ${notification_request} + Clear Requests ${callback_endpoint} +Post Create subscription with not permitted authorization scope + Log Create subscription instance by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SUBSCRIPTIONS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/lccnSubscriptionRequest.json + ${body}= Format String ${template} callback_uri=${callback_uri}:${callback_port} callback_endpoint=${callback_endpoint} + Log Creating mock request and response to handle GET operation on notification endpoint + &{notification_request}= Create Mock Request Matcher GET ${callback_endpoint} + &{notification_response}= Create Mock Response status_code=204 + Log Issue the subscription request + Create Mock Expectation ${notification_request} ${notification_response} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions ${body} allow_redirects=false + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + Log Verify notification endpoint is tested + Verify Mock Expectation ${notification_request} + Clear Requests ${callback_endpoint} PUT subscriptions log Trying to perform a PUT. This method should not be implemented Set Headers {"Accept":"${ACCEPT}"} @@ -1392,7 +1807,7 @@ DELETE subscriptions Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} Post Create Individual subscription log Trying to perform a POST. This method should not be implemented Set Headers {"Accept":"${ACCEPT}"} @@ -1408,6 +1823,25 @@ Get Individual subscription Get ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} + +Get Individual subscription with permitted authorization scope + log Trying to get information about an individual subscription with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SUBSCRIPTIONS_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} +Get Individual subscription with not permitted authorization scope + log Trying to get information about an individual subscription with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${SUBSCRIPTIONS_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} Put Individual subscription log Trying to perform a PUT. This method should not be implemented Set Headers {"Accept":"${ACCEPT}"} @@ -1427,10 +1861,11 @@ Patch Individual subscription Delete Individual subscription log Try to delete an individual subscription Set Headers {"Accept":"${ACCEPT}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${Authorization_Token}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/subscriptions/${subscriptionId} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} + Put Notification subscription log Trying to perform a PUT. This method should not be implemented Put ${callback_endpoint} @@ -1684,9 +2119,35 @@ POST Change Current VNF Package Task ${template}= Get File jsons/changeCurrentVnfPkgRequest.json ${body}= Format String ${template} vnfdId=${vnfdId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_vnfpkg ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Change Current VNF Package Task with permitted authorization scope + Log Trying to change current VNF package task with permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${CHANGE_VNFPKG_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/changeCurrentVnfPkgRequest.json + ${body}= Format String ${template} vnfdId=${vnfdId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_vnfpkg ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} +POST Change Current VNF Package Task with not permitted authorization scope + Log Trying to change current VNF package task with not permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${CHANGE_VNFPKG_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/changeCurrentVnfPkgRequest.json + ${body}= Format String ${template} vnfdId=${vnfdId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_vnfpkg ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + GET Change Current VNF Package Task log Trying to perform a GET. This method should not be implemented Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} @@ -1713,7 +2174,7 @@ DELETE Change Current VNF Package Task Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/change_vnfpkg ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} Check HTTP Location Header Contains URI of Created Resource ${URI}= Get Value From Json ${response['headers']} $..Location @@ -1728,8 +2189,8 @@ POST Create VNF Snapshot Task ${body}= Format String ${template} vnfSnapshotInfoId=${vnfSnapshotInfoId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/create_snapshot ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} - + Set Global Variable ${response} ${outputResponse} + POST Create VNF Snapshot Task NOT SUPPORTED Log Trying to request a snapshot of a VNF instance for which task resource does not exist Set Headers {"Accept":"${ACCEPT}"} @@ -1760,6 +2221,32 @@ POST Create VNF Snapshot Task INVALID IDENTIFIER ${template}= Get File jsons/CreateVnfSnapshotRequest.json ${body}= Format String ${template} vnfSnapshotInfoId=${invalidVnfSnapshotInfoId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/create_snapshot ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Create VNF Snapshot Task with permitted authorization scope + Log Trying to request a snapshot of a VNF instance with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${CREATE_SNAPSHOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/CreateVnfSnapshotRequest.json + ${body}= Format String ${template} vnfSnapshotInfoId=${vnfSnapshotInfoId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/create_snapshot ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Create VNF Snapshot Task with not permitted authorization scope + Log Trying to request a snapshot of a VNF instance with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${CREATE_SNAPSHOT_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/CreateVnfSnapshotRequest.json + ${body}= Format String ${template} vnfSnapshotInfoId=${vnfSnapshotInfoId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/create_snapshot ${body} ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} @@ -1800,7 +2287,7 @@ POST Revert to VNF Snapshot Task ${body}= Format String ${template} vnfSnapshotInfoId=${vnfSnapshotInfoId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/revert_to_snapshot ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} POST Revert to VNF Snapshot Task NOT SUPPORTED Log Trying to revert to a snapshot of a VNF instance for which task resource does not exist @@ -1851,17 +2338,43 @@ DELETE Revert to VNF Snapshot Task Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/revert_to_snapshot ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} + +POST Revert to VNF Snapshot Task with permitted authorization scope + Log Trying to initiate revert to VNF snapshot task with permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${REVERT_TO_SNAPSHOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/RevertToVnfSnapshotRequest.json + ${body}= Format String ${template} vnfSnapshotInfoId=${vnfSnapshotInfoId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/revert_to_snapshot ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Revert to VNF Snapshot Task with not permitted authorization scope + Log Trying to initiate revert to VNF snapshot task with not permitted authorization scope. + ${scopeValue}= Create Dictionary scopeValue=${REVERT_TO_SNAPSHOT_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template}= Get File jsons/RevertToVnfSnapshotRequest.json + ${body}= Format String ${template} vnfSnapshotInfoId=${vnfSnapshotInfoId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/revert_to_snapshot ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} -POST Create a new VNF Snapshot +POST Create a new VNF Snapshot Log Create VNF snapshot by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots Set Headers {"Accept":"${ACCEPT}"} Set Headers {"Content-Type": "${CONTENT_TYPE}"} - Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} ${template} = Get File jsons/CreateVnfSnapshotInfoRequest.json ${body}= Format String ${template} vnfSnapshotPkgId=${vnfSnapshotPkgId} Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots ${body} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} GET multiple VNF Snapshots Log Query VNF The GET method queries information about multiple VNF snapshots. @@ -1970,7 +2483,33 @@ DELETE VNF Snapshots Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + +POST Create a new VNF Snapshot with permitted authorization scope + Log Create VNF snapshot by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_SNAPSHOT_INFO_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template} = Get File jsons/CreateVnfSnapshotInfoRequest.json + ${body}= Format String ${template} vnfSnapshotPkgId=${vnfSnapshotPkgId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Create a new VNF Snapshot with not permitted authorization scope + Log Create VNF snapshot by POST to ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_SNAPSHOT_INFO_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + ${template} = Get File jsons/CreateVnfSnapshotInfoRequest.json + ${body}= Format String ${template} vnfSnapshotPkgId=${vnfSnapshotPkgId} + Post ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} POST individual VNF Snapshot log Trying to perform a POST. This method should not be implemented @@ -1985,10 +2524,10 @@ GET individual VNF Snapshot log Trying to get information about an individual VNF snapshot Set Headers {"Accept":"${ACCEPT}"} Set Headers {"Content-Type": "${CONTENT_TYPE}"} - Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} GET individual VNF Snapshot with invalid URI log Trying to get information about an individual VNF snapshot @@ -2048,15 +2587,37 @@ DELETE individual VNF Snapshot - CONFLICT Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Delete ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId_InUse} ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + +GET individual VNF Snapshot with permitted authorization scope + log Trying to get information about an individual VNF snapshot with permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_SNAPSHOT_INFO_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +GET individual VNF Snapshot with not permitted authorization scope + log Trying to get information about an individual VNF snapshot with not permitted authorization scope + ${scopeValue}= Create Dictionary scopeValue=${VNF_SNAPSHOT_INFO_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${authorizationToken}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} Check Postcondition VNF Snapshot Resource Is Deleted - Get individual VNF Snapshot + GET individual VNF Snapshot Integer response status 404 Log VNF Snapshot Resource deleted Check Postcondition VNF Snapshot Resource Existence - Get individual VNF Snapshot + GET individual VNF Snapshot Integer response status 200 Log VNF Snapshot Resource is not deleted @@ -2075,7 +2636,7 @@ GET VNF State Snapshot - Complete Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId}/vnf_state_snapshot ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} GET VNF State Snapshot - Range Request Pass Execution If ${VNFM_RANGE_OK} == 0 Skipping this test as NFVO is not able to handle partial Requests. @@ -2104,6 +2665,26 @@ GET VNF State Snapshot - Conflict in State Set Headers {"Accept":"${ACCEPT_OCTET}"} Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId_creationIncomplete}/vnf_state_snapshot + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +GET VNF State Snapshot - Complete with permitted authorization scope + log Trying to fetch the complete contents of an VNF State Snapshot with permitted authorization scope + Set Headers {"Accept":"${ACCEPT_OCTET}"} + ${scopeValue}= Create Dictionary scopeValue=${VNF_STATE_SNAPSHOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId}/vnf_state_snapshot + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +GET VNF State Snapshot - Complete with not permitted authorization scope + log Trying to fetch the complete contents of an VNF State Snapshot with not permitted authorization scope + Set Headers {"Accept":"${ACCEPT_OCTET}"} + ${scopeValue}= Create Dictionary scopeValue=${VNF_STATE_SNAPSHOT_NOT_PERMITTED_SCOPE} + ${authorizationToken}= JWT Encode payload=${scopeValue} key=${OAUTH_KEY} algorithm=${OAUTH_ENCRYPTION_ALGORITHM} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Get ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId}/vnf_state_snapshot ${outputResponse}= Output response Set Global Variable ${response} ${outputResponse} @@ -2131,7 +2712,75 @@ DELETE VNF State Snapshot Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} Patch ${apiRoot}/${apiName}/${apiMajorVersion}/vnf_snapshots/${vnfSnapshotInfoId}/vnf_state_snapshot ${outputResponse}= Output response - Set Global Variable ${response} ${outputResponse} + Set Global Variable ${response} ${outputResponse} + +POST Select VNF Deployable Modules + log Trying to select deployable modules of VNF instance + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + ${template}= Get File jsons/SelectVnfDeployableModulesRequest.json + ${body}= Format String ${template} + Post ${apiRoot}/vnflcm/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/select_depl_mods ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Select VNF Deployable Modules Not Existing + log Trying to select deployable modules of VNF instance + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + ${template}= Get File jsons/SelectVnfDeployableModulesRequest.json + ${body}= Format String ${template} + Post ${apiRoot}/vnflcm/${apiMajorVersion}/vnf_instances/${notExistingVnfInstanceId}/select_depl_mods ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +POST Select VNF Deployable Modules with conflict + log Trying to select deployable modules of VNF instance. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + ${template}= Get File jsons/SelectVnfDeployableModulesRequest.json + ${body}= Format String ${template} + Post ${apiRoot}/vnflcm/${apiMajorVersion}/vnf_instances/${notInstantiatedVnfInstanceId}/select_depl_mods ${body} + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + + +GET Select VNF Deployable Modules + log Trying to perform a GET. This method should not be implemented + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Get ${apiRoot}/vnflcm/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/select_depl_mods + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +PUT Select VNF Deployable Modules + log Trying to perform a PUT. This method should not be implemented + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Put ${apiRoot}/vnflcm/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/select_depl_mods + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +PATCH Select VNF Deployable Modules + log Trying to perform a PATCH. This method should not be implemented + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Patch ${apiRoot}/vnflcm/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/select_depl_mods + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + +DELETE Select VNF Deployable Modules + log Trying to perform a DELETE. This method should not be implemented + Set Headers {"Accept":"${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"${AUTHORIZATION_HEADER}":"${AUTHORIZATION_TOKEN}"} + Delete ${apiRoot}/vnflcm/${apiMajorVersion}/vnf_instances/${vnfInstanceId}/select_depl_mods + ${outputResponse}= Output response + Set Global Variable ${response} ${outputResponse} + Check HTTP Content-Type Header Is Set Log Check Content-Type HTTP Header @@ -2150,3 +2799,8 @@ Check HTTP Content-Length Header Is Set Should Contain ${response['headers']} Content-Length Should Be Equal As Strings ${response['headers']['Content-Length']} ${full_length} Log Header Content-Length is present + +JWT Encode + [Arguments] ${payload} ${key} ${algorithm} + ${encoded}= Evaluate jwt.encode(${payload}, ${key}, ${algorithm}) + [Return] ${encoded} \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/VnfLcmOperationOccurences.robot b/SOL003/VNFLifecycleManagement-API/VnfLcmOperationOccurences.robot index df021760f506fef4b97d79eb43d69a0e85b48824..4c543a023427199be69c9d9051f7427d3c9367a9 100644 --- a/SOL003/VNFLifecycleManagement-API/VnfLcmOperationOccurences.robot +++ b/SOL003/VNFLifecycleManagement-API/VnfLcmOperationOccurences.robot @@ -11,7 +11,7 @@ POST VNF LCM Operation occurrences - Method not implemented ... Test title: POST VNF LCM Operation occurrences - Method not implemented ... Test objective: The objective is to test that POST method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.1 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.1 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -23,7 +23,7 @@ GET status information about multiple VNF LCM Operation OCC ... Test title: GET status information about multiple VNF LCM Operation OCC ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -36,7 +36,7 @@ GET status information about multiple VNF LCM Operation OCC Bad Request Invalid ... Test title: GET status information about multiple VNF LCM Operation OCC Bad Request Invalid attribute-based filtering parameters ... Test objective: The objective is to test that GET method fail retrieving status information about multiple VNF lifecycle management operation occurrences because attribute is invalid. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -49,7 +49,7 @@ GET status information about multiple VNF LCM Operation OCC Bad Request Invalid ... Test title: GET status information about multiple VNF LCM Operation OCC Bad Request Invalid attribute selector ... Test objective: The objective is to test that GET method fail retrieving status information about multiple VNF lifecycle management operation occurrences because attribute is invalid. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -62,7 +62,7 @@ GET status information about multiple VNF LCM Operation OCC with "all_fields" ... Test title: GET status information about multiple VNF LCM Operation OCC with "all_fields" ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -75,7 +75,7 @@ GET status information about multiple VNF LCM Operation OCC with "exlude_default ... Test title: GET status information about multiple VNF LCM Operation OCC with "exclude_default" ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -88,7 +88,7 @@ GET status information about multiple VNF LCM Operation OCC with "fields" ... Test title: GET status information about multiple VNF LCM Operation OCC with "fields" ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -101,7 +101,7 @@ GET status information about multiple VNF LCM Operation OCC with "exclude_fields ... Test title: GET status information about multiple VNF LCM Operation OCC with "exclude_fields" ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -114,7 +114,7 @@ PUT status information about multiple VNF LCM Operation OCC - Method not impleme ... Test title: PUT status information about multiple VNF LCM Operation OCC - Method not implemented ... Test objective: The objective is to test that PUT method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.3 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.3 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -126,7 +126,7 @@ PATCH status information about multiple VNF LCM Operation OCC - Method not imple ... Test title: PATCH status information about multiple VNF LCM Operation OCC - Method not implemented ... Test objective: The objective is to test that PATCH method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.4 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.4 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -138,7 +138,7 @@ DELETE status information about multiple VNF LCM Operation OCC - Method not impl ... Test title: DELETE status information about multiple VNF LCM Operation OCC - Method not implemented ... Test objective: The objective is to test that DELETE method is not implemented ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.5 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.5 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -150,7 +150,7 @@ GET status information about multiple VNF LCM Operation OCC to get Paged Respons ... Test title: GET status information about multiple VNF LCM Operation OCC to get Paged Response ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences to get a Paged Response. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The VNFM supports response paging for the VNF lifecycle management operation occurrences resources ... Post-Conditions: none @@ -159,11 +159,11 @@ GET status information about multiple VNF LCM Operation OCC to get Paged Respons Check HTTP Response Header Contain Link GET information about multiple VNF LCM Operation OCC as a Paged Response with nextpage_opauque_marker parameter - [Documentation] Test ID: 7.3.1.11.12a + [Documentation] Test ID: 7.3.1.11.12a ... Test title: GET information about multiple VNF LCM Operation OCC as a Paged Response with nextpage_opauque_marker parameter ... Test objective: The objective is to query information about multiple VNF lifecycle management operation occurrences as a Paged Response and retrieve the next page using the nextpage_opaque_marker parameter ... Pre-conditions: A request for retrieving multiple VNF lifecycle management operation occurrences as a paged response has been successfully issued (Test ID 7.3.1.11.12) - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: The VNFM supports response paging for the VNF lifecycle management operation occurrences resources ... Post-Conditions: none @@ -175,7 +175,7 @@ GET status information about multiple VNF LCM Operation OCC - Bad Request Respon ... Test title: GET status information about multiple VNF LCM Operation OCC - Bad Request Response too Big ... Test objective: The objective is to test that GET method fail retrieving status information about multiple VNF lifecycle management operation occurrences because response is too big. The test also checks the JSON schema of the unsuccessful operation HTTP response. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none @@ -188,10 +188,36 @@ GET status information about multiple VNF LCM Operation OCC with "exclude_defaul ... Test title: GET status information about multiple VNF LCM Operation OCC with "exclude_default" and "fields" ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences. ... Pre-conditions: none - ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.4.1 + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 ... Config ID: Config_prod_VNFM ... Applicability: none ... Post-Conditions: none Get VNF LCM Operation occurrences with exclude_default and fields attribute selector Check HTTP Response Status Code Is 202 - Check HTTP Response Body Json Schema Is VnfLcmOpOccs \ No newline at end of file + Check HTTP Response Body Json Schema Is VnfLcmOpOccs + +GET status information about multiple VNF LCM Operation OCC with permitted authorization scope + [Documentation] Test ID: 7.3.1.11.15 + ... Test title: GET status information about multiple VNF LCM Operation OCC with permitted authorization scope + ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences with permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET VNF LCM Operation occurrences with permitted authorization scope + Check HTTP Response Status Code Is 202 + Check HTTP Response Body Json Schema Is VnfLcmOpOccs + +GET status information about multiple VNF LCM Operation OCC with not permitted authorization scope + [Documentation] Test ID: 7.3.1.11.16 + ... Test title: GET status information about multiple VNF LCM Operation OCC with not permitted authorization scope + ... Test objective: The objective is to test that GET method retrieve Query status information about multiple VNF lifecycle management operation occurrences with not permitted authorization scope. + ... Pre-conditions: none + ... Reference: Clause 5.4.12.3.2 - ETSI GS NFV-SOL 003 [1] v4.5.1 + ... Config ID: Config_prod_VNFM + ... Applicability: none + ... Post-Conditions: none + GET VNF LCM Operation occurrences with not permitted authorization scope + Check HTTP Response Status Code Is 403 + Check HTTP Response Body Json Schema Is ProblemDetails \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/descriptors/SOL001/VNFD/vnfd_SOL001.yaml b/SOL003/VNFLifecycleManagement-API/descriptors/SOL001/VNFD/vnfd_SOL001.yaml index 603b1887d8a21e38d2c072e1184b780fc2f143dd..250f1c705d7ff857e9b3873effa2f3855661e50d 100644 --- a/SOL003/VNFLifecycleManagement-API/descriptors/SOL001/VNFD/vnfd_SOL001.yaml +++ b/SOL003/VNFLifecycleManagement-API/descriptors/SOL001/VNFD/vnfd_SOL001.yaml @@ -1,8 +1,8 @@ -tosca_definitions_version: tosca_simple_yaml_1_2 +tosca_definitions_version: tosca_simple_yaml_1_3 description: "TST010 reference VNF-B" imports: - - https://forge.etsi.org/rep/nfv/SOL001/raw/v3.3.1/etsi_nfv_sol001_vnfd_types.yaml + - https://forge.etsi.org/rep/nfv/SOL001/raw/v4.4.1/etsi_nfv_sol001_vnfd_types.yaml metadata: descriptor_id: "VNF-B" @@ -44,7 +44,7 @@ node_types: type: list entry_schema: type: string - default: [ 'etsivnfm:v2.3.1' ] + default: [ 'etsivnfm:v4.5.1' ] interfaces: Vnflcm: type: "tosca.interfaces.nfv.Vnflcm" @@ -162,4 +162,4 @@ topology_template: terminate: implementation: terminate-example.yaml operate: - implementation: operate-example.yaml \ No newline at end of file + implementation: operate-example.yaml diff --git a/SOL003/VNFLifecycleManagement-API/environment/variables.txt b/SOL003/VNFLifecycleManagement-API/environment/variables.txt index 81a2d522085a227207eade2c84e8651beb565ce9..f0f6ae9dc333c5c596db475c2a5389d4967dd7ec 100644 --- a/SOL003/VNFLifecycleManagement-API/environment/variables.txt +++ b/SOL003/VNFLifecycleManagement-API/environment/variables.txt @@ -5,11 +5,49 @@ ${VNFM_SCHEMA} https ${ACCEPT} application/json ${ACCEPT_JSON} application/json ${CONTENT_TYPE} application/json +${OAUTH_KEY} +${OAUTH_ENCRYPTION_ALGORITHM} HS256 ${AUTHORIZATION_HEADER} Authorization ${AUTHORIZATION_TOKEN} Bearer 0b79bab50daca910b000d4f1a2b675d604257e42 ${AUTH_USAGE} 1 ${CONTENT_TYPE_PATCH} application/merge-patch+json +${INSTANTIATE_PERMITTED_SCOPE} vnflcm:v2:instantiate +${SCALE_PERMITTED_SCOPE} vnflcm:v2:scale +${SCALE_TO_LEVEL_PERMITTED_SCOPE} vnflcm:v2:scale_to_level +${CHANGE_FLAVOUR_PERMITTED_SCOPE} vnflcm:v2:change_flavour +${TERMINATE_PERMITTED_SCOPE} vnflcm:v2:terminate +${HEAL_PERMITTED_SCOPE} vnflcm:v2:heal +${CHANGE_EXT_CONN_PERMITTED_SCOPE} vnflcm:v2:change_ext_conn +${OPERATE_PERMITTED_SCOPE} vnflcm:v2:operate +${CREATE_SNAPSHOT_PERMITTED_SCOPE} vnflcm:v2:create_snapshot +${REVERT_TO_SNAPSHOT_PERMITTED_SCOPE} vnflcm:v2:revert_to_snapshot +${CHANGE_VNFPKG_PERMITTED_SCOPE} vnflcm:v2:change_vnfpkg +${VNF_INSTANCE_INFO_PERMITTED_SCOPE} vnflcm:v2:vnf_instance_info +${VNF_INSTANCE_INFO_READONLY_PERMITTED_SCOPE} vnflcm:v2:vnf_instance_info:readonly +${OP_OCCS_PERMITTED_SCOPE} vnflcm:v2:op_occs +${SUBSCRIPTIONS_PERMITTED_SCOPE} vnflcm:v2:subscriptions +${VNF_SNAPSHOT_INFO_PERMITTED_SCOPE} vnflcm:v2:vnf_snapshot_info +${VNF_STATE_SNAPSHOT_PERMITTED_SCOPE} vnflcm:v2:vnf_state_snapshot + +${INSTANTIATE_NOT_PERMITTED_SCOPE} vnflcm:v2:instantiate:invalid +${SCALE_NOT_PERMITTED_SCOPE} vnflcm:v2:scale:invalid +${SCALE_TO_LEVEL_NOT_PERMITTED_SCOPE} vnflcm:v2:scale_to_level:invalid +${CHANGE_FLAVOUR_NOT_PERMITTED_SCOPE} vnflcm:v2:change_flavour:invalid +${TERMINATE_NOT_PERMITTED_SCOPE} vnflcm:v2:terminate:invalid +${HEAL_NOT_PERMITTED_SCOPE} nflcm:v2:heal:invalid +${CHANGE_EXT_CONN_NOT_PERMITTED_SCOPE} vnflcm:v2:change_ext_conn:invalid +${OPERATE_NOT_PERMITTED_SCOPE} vnflcm:v2:operate:invalid +${CREATE_SNAPSHOT_NOT_PERMITTED_SCOPE} vnflcm:v2:create_snapshot:invalid +${REVERT_TO_SNAPSHOT_NOT_PERMITTED_SCOPE} vnflcm:v2:revert_to_snapshot:invalid +${CHANGE_VNFPKG_NOT_PERMITTED_SCOPE} vnflcm:v2:change_vnfpkg:invalid +${VNF_INSTANCE_INFO_NOT_PERMITTED_SCOPE} vnflcm:v2:vnf_instance_info:invalid +${VNF_INSTANCE_INFO_READONLY_NOT_PERMITTED_SCOPE} vnflcm:v2:vnf_instance_info:readonly:invalid +${OP_OCCS_NOT_PERMITTED_SCOPE} vnflcm:v2:op_occs:invalid +${SUBSCRIPTIONS_NOT_PERMITTED_SCOPE} vnflcm:v2:subscriptions:invalid +${VNF_SNAPSHOT_INFO_NOT_PERMITTED_SCOPE} vnflcm:v2:vnf_snapshot_info:invalid +${VNF_STATE_SNAPSHOT_NOT_PERMITTED_SCOPE} vnflcm:v2:vnf_state_snapshot:invalid + ${apiRoot} / ${apiName} vnflcm ${apiMajorVersion} v2 diff --git a/SOL003/VNFLifecycleManagement-API/jsons/SelectVnfDeployableModulesRequest.json b/SOL003/VNFLifecycleManagement-API/jsons/SelectVnfDeployableModulesRequest.json new file mode 100644 index 0000000000000000000000000000000000000000..fa5070c38443fc7ddb8ae94b9e29666dcfaf5a93 --- /dev/null +++ b/SOL003/VNFLifecycleManagement-API/jsons/SelectVnfDeployableModulesRequest.json @@ -0,0 +1,10 @@ +{{ + "selectedDeployableModule": ["string"], + "targetScaleLevelInfo": [ + { + "aspectId": "{string}", + "scaleLevel": 1 + } + ], + "additionalParams": {} +}} diff --git a/SOL003/VNFLifecycleManagement-API/jsons/instantiateVnfRequestTargetScaleLevelInfo.json b/SOL003/VNFLifecycleManagement-API/jsons/instantiateVnfRequestTargetScaleLevelInfo.json index e72a745dcfd034bc619b138883591fd81235cb20..7a117abab12d94282255d5c78f4e1696aae98de6 100644 --- a/SOL003/VNFLifecycleManagement-API/jsons/instantiateVnfRequestTargetScaleLevelInfo.json +++ b/SOL003/VNFLifecycleManagement-API/jsons/instantiateVnfRequestTargetScaleLevelInfo.json @@ -4,7 +4,7 @@ { "aspectId": "{aspectId}", "vnfdId": "string", - "scaleToLevel": "1" + "scaleLevel": 1 } ], "extVirtualLinks": [ diff --git a/SOL003/VNFLifecycleManagement-API/jsons/scaleVnfToLevelRequestScaleInfo.json b/SOL003/VNFLifecycleManagement-API/jsons/scaleVnfToLevelRequestScaleInfo.json index 11c31f508a924f98736ef68d74078d1ccf734913..9ad9adb8f132e05071034e92820c5a45344bc0cb 100644 --- a/SOL003/VNFLifecycleManagement-API/jsons/scaleVnfToLevelRequestScaleInfo.json +++ b/SOL003/VNFLifecycleManagement-API/jsons/scaleVnfToLevelRequestScaleInfo.json @@ -3,7 +3,7 @@ { "aspectId": "{aspectId}", "vnfdId": "string", - "scaleToLevel": "1" + "scaleLevel": 1 } ] }} \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOcc.schema.json b/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOcc.schema.json index 60ac77dbb52541ec7287536097e9566b0e0446fa..70f4b7691529df64fd00e9cc36ecfaaa8acf4135 100644 --- a/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOcc.schema.json +++ b/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOcc.schema.json @@ -17,7 +17,8 @@ "vnfInstanceId", "operation", "isAutomaticInvocation", - "isCancelPending" + "isCancelPending", + "_links" ], "properties": { "id": { @@ -70,7 +71,8 @@ "MODIFY_INFO", "CREATE_SNAPSHOT", "REVERT_TO_SNAPSHOT", - "CHANGE_VNFPKG" + "CHANGE_VNFPKG", + "SELECT_DEPL_MODS" ] }, "isAutomaticInvocation": { diff --git a/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOccs.schema.json b/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOccs.schema.json index 17727c4705e082163d3e32a8b18150e52ba7ff1e..29ccb9304cc87c84281d429ca5f53c4d9907bef6 100644 --- a/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOccs.schema.json +++ b/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOpOccs.schema.json @@ -19,7 +19,8 @@ "vnfInstanceId", "operation", "isAutomaticInvocation", - "isCancelPending" + "isCancelPending", + "_links" ], "properties": { "id": { @@ -72,7 +73,8 @@ "MODIFY_INFO", "CREATE_SNAPSHOT", "REVERT_TO_SNAPSHOT", - "CHANGE_VNFPKG" + "CHANGE_VNFPKG", + "SELECT_DEPL_MODS" ] }, "isAutomaticInvocation": { diff --git a/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOperationOccurrenceNotification.schema.json b/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOperationOccurrenceNotification.schema.json index 81e024130b069ba8fffaa8ee32fd5b8c93bc6406..4d4b6cf7e56d6672d143e6adc4c483e8cad3bf16 100644 --- a/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOperationOccurrenceNotification.schema.json +++ b/SOL003/VNFLifecycleManagement-API/schemas/VnfLcmOperationOccurrenceNotification.schema.json @@ -596,6 +596,42 @@ } } }, + "affectedCertificates": { + "description": "Information about certificate content that were affected during the execution of the lifecycle management operation, if this notification represents the result of a lifecycle management operation occurrence. Shall be present when using delegation mode, otherwise shall be absent. This attribute shall be supported when delegation mode in certificate management is applicable\n", + "type": "array", + "items": { + "description": "This type provides input information about added, deleted, and modified certificate contents.\n", + "type": "object", + "required": ["certificateInfoId", "changeType"], + "properties": { + "certificateInfoId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateBaseProfileId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "securityPolicyId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "cmfInfoId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "changeType": { + "description": "Signals the type of change.", + "type": "string", + "enum": ["ADD", "REMOVE", "MODIFY"] + } + } + } + }, "changedExtConnectivity": { "description": "Information about changed external connectivity, if this notification represents the result of a lifecycle operation occurrence. Shall be present if the \"notificationStatus\" is set to \"RESULT\", the \"verbosity\" attribute is set to \"FULL\" and the operation has made any changes to the external connectivity of the VNF instance. Shall be absent otherwise. Only information about external VL instances that have been added or modified shall be provided.\n", "type": "array", diff --git a/SOL003/VNFLifecycleManagement-API/schemas/vnfInstance.schema.json b/SOL003/VNFLifecycleManagement-API/schemas/vnfInstance.schema.json index 23b24a0327aea12712aa9b95d5ff952c8f3ea1a1..1e547f428ef1295e584f519a0355b8880d332765 100644 --- a/SOL003/VNFLifecycleManagement-API/schemas/vnfInstance.schema.json +++ b/SOL003/VNFLifecycleManagement-API/schemas/vnfInstance.schema.json @@ -54,7 +54,9 @@ "additionalProperties": { "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n \n* NOTE 3:\t ETSI GS NFV-SOL 009 [i.18] specifies the means to configure into the VNFM applicable VIM connection information via the \"NFV-MANO Configuration and Information Management\" interface. \n* NOTE 4:\t Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of the present document, as well as in-band, by means specified in the present document, care should be taken to avoid unintended conflicts in the VNFM when managing such information.\n", "type": "object", - "required": ["vimType"], + "required": [ + "vimType" + ], "properties": { "vimId": { "description": "An identifier with the intention of being globally unique.\n", @@ -85,7 +87,9 @@ "additionalProperties": { "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n \n* NOTE 3:\t ETSI GS NFV-SOL 009 [i.18] specifies the means to configure into the VNFM applicable VIM connection information via the \"NFV-MANO Configuration and Information Management\" interface. \n* NOTE 4:\t Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of the present document, as well as in-band, by means specified in the present document, care should be taken to avoid unintended conflicts in the VNFM when managing such information.\n", "type": "object", - "required": ["vimType"], + "required": [ + "vimType" + ], "properties": { "vimId": { "description": "An identifier with the intention of being globally unique.\n", @@ -116,7 +120,9 @@ "additionalProperties": { "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n \n* NOTE 3:\t ETSI GS NFV-SOL 009 [i.18] specifies the means to configure into the VNFM applicable VIM connection information via the \"NFV-MANO Configuration and Information Management\" interface. \n* NOTE 4:\t Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of the present document, as well as in-band, by means specified in the present document, care should be taken to avoid unintended conflicts in the VNFM when managing such information.\n", "type": "object", - "required": ["vimType"], + "required": [ + "vimType" + ], "properties": { "vimId": { "description": "An identifier with the intention of being globally unique.\n", @@ -141,15 +147,299 @@ } } }, + "certificateInfo": { + "description": "This type provides input information related to certificate and certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateConfigurationInfo": { + "description": "This type provides input information related to certificate management.\n", + "type": "object", + "required": [ + "securityPolicy" + ], + "properties": { + "certificateBaseProfile": { + "description": "Information for certificate profile.", + "type": "array", + "items": { + "description": "NOTE: At least one overriding attributes shall be present, otherwise shall be absent.\nThis type provides input information to override certificate base profile for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "issuer": { + "description": "Issuer of certificates. See note.", + "type": "string" + }, + "issuerUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "subject": { + "description": "This type provides input information related to the subject of the certificate.\nNOTE: At least one overriding attributes shall be present, otherwise shall be absent.\n", + "type": "object", + "properties": { + "commonName": { + "description": "Information of the certification target subject FQDN. Can be set empty when this certificate is used for encrypted communication using IP address. See note.\n", + "type": "string" + }, + "organization": { + "description": "Information of the certification target subject Organization. See note.", + "type": "string" + }, + "country": { + "description": "Information of the certification target subject Country. See note.", + "type": "string" + }, + "state": { + "description": "Information of the certification target subject State. See note.", + "type": "string" + }, + "locality": { + "description": "Information of the certification target subject Locality. See note.", + "type": "string" + }, + "emailAddress": { + "description": "Information of the certification contact email address. See note.", + "type": "string" + } + } + }, + "subjectUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "basicConstraints": { + "description": "Basic constraints of certificates. See note.", + "type": "string" + }, + "issuerAltName": { + "description": "Alternative name of issuer of certificates in this NS. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "subjectAltName": { + "description": "Alternative name of subject of certificates. Shall be present when this certificate is used for encrypted communication using IP address and subjectAltName attribute of CertificateBaseProfile in CertificateDesc of VNFD is empty (see ETSI GS NFV-IFA 011 [14], clause 7.1.19.4). See note.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "nameConstraints": { + "description": "Name constraints of certificates. See note.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "securityPolicy": { + "description": "Information for security policy to be satisfied for certificate.", + "type": "array", + "items": { + "description": "This type provides input information related to security policy for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "maxValidityPeriod": { + "description": "Allowed max validity period for certificates.", + "type": "number" + }, + "allowedAlgorithm": { + "description": "Allowed signature algorithm.", + "type": "string" + }, + "minimumKeyLength": { + "description": "Minimum key length for certificates.", + "type": "number" + } + } + } + }, + "delegationSupportedCertificateManagements": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "cmfInfo": { + "description": "This type provides input information related to CMF for certificate management.\n", + "type": "object", + "required": [ + "id", + "endPoint", + "supportedProtocol" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "endPoint": { + "description": "End point of CMF instance.", + "type": "object", + "properties": { + "ipAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "link": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + } + } + }, + "supportedProtocol": { + "description": "Supported protocols by CMF instance.", + "type": "array", + "items": { + "description": "Supported protocol by CMF instance.", + "type": "string", + "enum": [ + "CMP", + "CMPv2", + "EST", + "SCEP" + ] + } + }, + "certificateChain": { + "description": "Certificate chain that this CMF provides.", + "type": "array", + "items": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, + "certificateContents": { + "description": "Information for contents of issued certificates. The information contained in this attribute may be updated over time during the VNF LCM, e.g., certificate(s) renewal.\n", + "type": "array", + "items": { + "description": "This type provides input information related to certificate content.\nNOTE: The CertificateDesc data type is defined in clause 7.1.19.2 of ETSI GS NFV IFA 011 [10].\n", + "type": "object", + "required": [ + "id", + "certificateDescId", + "certificateType" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "certificateType": { + "description": "Type of this certificate.", + "type": "string", + "enum": [ + "VNFCI_CERT", + "VNFOAM_CERT" + ] + }, + "supportedCertificateManagements": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "version": { + "description": "A version.\n", + "type": "string" + }, + "serialNumber": { + "description": "Serial number of this certificate.", + "type": "integer" + }, + "signatureAlgorithm": { + "description": "Algorithm of this certificate's signature.", + "type": "string" + }, + "issuer": { + "description": "Issuer of this certificate.", + "type": "string" + }, + "notBefore": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "notAfter": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "subject": { + "description": "Subject of this certificate.", + "type": "string" + }, + "publicKeyAlgorithm": { + "description": "Algorithm of this certificate's public key.", + "type": "string" + }, + "publicKey": { + "description": "Public key of this certificate.", + "type": "string" + }, + "certificateExtensions": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, "instantiationState": { "description": "The instantiation state of the VNF. Permitted values: - NOT_INSTANTIATED: The VNF instance is terminated or not instantiated. - INSTANTIATED: The VNF instance is instantiated.\n", "type": "string", - "enum": ["NOT_INSTANTIATED", "INSTANTIATED"] + "enum": [ + "NOT_INSTANTIATED", + "INSTANTIATED" + ] }, "instantiatedVnfInfo": { "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n", "type": "object", - "required": ["flavourId", "vnfState", "extCpInfo"], + "required": [ + "flavourId", + "vnfState", + "extCpInfo" + ], "properties": { "flavourId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -158,7 +448,10 @@ "vnfState": { "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n", "type": "string", - "enum": ["STARTED", "STOPPED"] + "enum": [ + "STARTED", + "STOPPED" + ] }, "scaleStatus": { "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n", @@ -166,7 +459,10 @@ "items": { "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", "type": "object", - "required": ["aspectId", "scaleLevel"], + "required": [ + "aspectId", + "scaleLevel" + ], "properties": { "aspectId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -189,7 +485,10 @@ "items": { "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", "type": "object", - "required": ["aspectId", "scaleLevel"], + "required": [ + "aspectId", + "scaleLevel" + ], "properties": { "aspectId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -206,6 +505,14 @@ } } }, + "selectedDeployableModule": { + "description": "References a currently selected deployable module, as defined in the VNFD, that has already completed the instantiation of its VNFCs.\n", + "type": "array", + "items": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + } + }, "extCpInfo": { "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n", "type": "array", @@ -213,16 +520,27 @@ "items": { "description": "This type represents information about an external CP of a VNF.\nNOTE 1:\tThe attributes \"associatedVnfcCpId\", \"associatedVipCpId\", \"associatedVirtualCpId\" and \n \"associatedVnfVirtualLinkId\" are mutually exclusive. Exactly one shall be present.\nNOTE 2:\tAn external CP instance is not associated to a link port in the cases indicated for the \n “extLinkPorts” attribute in clause 4.4.1.11.\nNOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network \n attachment definition resource is needed to fulfil the connectivity requirements of the external \n CP, e.g. to build a link redundant mated pair in SR-IOV cases.\nNOTE 4: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace.\n", "type": "object", - "required": ["id", "cpdId", "cpConfigId", "cpProtocolInfo"], + "required": [ + "id", + "cpdId", + "cpConfigId", + "cpProtocolInfo" + ], "oneOf": [ { - "required": ["associatedVnfcCpId"] + "required": [ + "associatedVnfcCpId" + ] }, { - "required": ["associatedVipCpId"] + "required": [ + "associatedVipCpId" + ] }, { - "required": ["associatedVnfVirtualLinkId"] + "required": [ + "associatedVnfVirtualLinkId" + ] } ], "properties": { @@ -248,30 +566,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -289,12 +620,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -312,7 +648,10 @@ "addressRange": { "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", - "required": ["minAddress", "maxAddress"], + "required": [ + "minAddress", + "maxAddress" + ], "properties": { "minAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -338,12 +677,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -390,6 +734,10 @@ "description": "An identifier with the intention of being globally unique.\n", "type": "string" } + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -401,7 +749,10 @@ "items": { "description": "This type provides information related to virtual IP (VIP) CP.\nNOTE 1:\tIt is possible that there is no associated VnfcCp because the VIP CP is available but not associated yet. NOTE 2: If only the value or the presence of this attribute is changed in the \"VipCpInfo\" structure by an LCM operation occurrence, this does not represent a change that requires including a related \"AffectedVipCp\" structure in the VNF LCM operation occurrence notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", - "required": ["cpInstanceId", "cpdId"], + "required": [ + "cpInstanceId", + "cpdId" + ], "properties": { "cpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -425,30 +776,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -466,12 +830,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -489,7 +858,10 @@ "addressRange": { "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", - "required": ["minAddress", "maxAddress"], + "required": [ + "minAddress", + "maxAddress" + ], "properties": { "minAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -515,12 +887,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -561,7 +938,12 @@ "items": { "description": "This type provides information related to a virtual CP instance of a VNF.\nNOTE: A consumer of the VNF LCM interface can learn the actual VNFC instances implementing the service \n accessible via the virtual CP instance by querying the \"vnfcResourceInfo\" from the \"InstantiatedVnfInfo\" \n and filtering by corresponding \"vduIds\" values.\n", "type": "object", - "required": ["cpInstanceId", "cpdId", "resourceHandle", "vduIds"], + "required": [ + "cpInstanceId", + "cpdId", + "resourceHandle", + "vduIds" + ], "properties": { "cpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -572,7 +954,9 @@ "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -626,30 +1010,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -667,12 +1064,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -690,7 +1092,10 @@ "addressRange": { "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", - "required": ["minAddress", "maxAddress"], + "required": [ + "minAddress", + "maxAddress" + ], "properties": { "minAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -716,12 +1121,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -752,7 +1162,9 @@ "items": { "description": "This type provides additional service information of the virtual CP instance used to expose properties of the virtual CP to NFV-MANO.\nNOTE: This attribute shall only be present if additional information is needed to identify the service \n termination within the VNF, such as for example a URL path information in an HTTP request required \n to allow a single virtual CP IP address to be used for several HTTP based services that use the \n same port number.\n", "type": "object", - "required": ["portInfo"], + "required": [ + "portInfo" + ], "properties": { "portInfo": { "description": "Service port numbers exposed by the virtual CP instance.\n", @@ -761,7 +1173,11 @@ "items": { "description": "This type describes the service identifying port properties exposed by the virtual CP instance.\n", "type": "object", - "required": ["name", "port", "portConfigurable"], + "required": [ + "name", + "port", + "portConfigurable" + ], "properties": { "name": { "description": "The name of the port exposed by the virtual CP instance.\n", @@ -770,7 +1186,11 @@ "protocol": { "description": "The L4 protocol for this port exposed by the virtual CP instance.\nPermitted values: - TCP - UDP - SCTP\n", "type": "string", - "enum": ["TCP", "UDP", "SCTP"] + "enum": [ + "TCP", + "UDP", + "SCTP" + ] }, "port": { "description": "The L4 port number exposed by the virtual CP instance.\n", @@ -803,14 +1223,20 @@ "items": { "description": "This type represents information about an external VL.\nNOTE:\tThis attribute reflects the current configuration information that has resulted from merging into this attribute \n the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the \n most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" \n or \"ChangeCurrentVnfPkgRequest\", or in the Grant response. If applying such change results in an empty list of \n \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its \n parent data structure.\n", "type": "object", - "required": ["id", "resourceHandle", "currentVnfExtCpData"], + "required": [ + "id", + "resourceHandle", + "currentVnfExtCpData" + ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -860,14 +1286,19 @@ "items": { "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\nNOTE 1:\tThe use cases UC#4 and UC#5 in clause A.4 of ETSI GS NFV-IFA 007 provide examples for such a configuration. NOTE 2:\tThe value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\" attribute.\n", "type": "object", - "required": ["id", "resourceHandle"], + "required": [ + "id", + "resourceHandle" + ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -932,7 +1363,9 @@ "items": { "description": "This type represents configuration information for external CPs created. * NOTE 1: \tIn case this identifier refers to a CPD with trunking enabled, the external CP instances created\n from this CPD will represent ports in a trunk.\n* NOTE 2: \tWithin one VNF instance, all VNFC instances created from a particular VDU have the same external\n connectivity. Thus, given a particular value of the \"cpdId\" attribute, there shall be one\n \"cpConfig\" entry for each VNFC instance that has been or can be created from a VDU which includes\n a CPD identified by the \"cpdId\" attribute. If the cpConfig represents a subport in a trunk,\n all \"cpConfig\" entries in this list shall have the same segmentationId, which means they are\n connected to the same set of external VLs via the trunk.\n* NOTE 3: \tThe map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified\n by a particular key value from the map, i.e. for the disconnection of an existing external\n CP instance addressed by cpInstanceId in the deleted map entry from a particular external\n virtual link, and deletion of that instance in case it represents a subport. Deleting the\n last key from the map removes the affected instance of the \"VnfExtCpData\" structure from\n its parent data structure.\n* NOTE 4: If, as defined by the input parameters of a \"ChangeVnfFlavour\", \"ChangeExtVnfConnectivity\" or\n \"ChangeCurrentVnfPkg\" operation or as part of the Grant response for any of these operations, a cpConfig\n map entry identified by a particular map key value is moved into another \"ExtVirtualLinkData\" or\n \"VnfExtCpData\" structure, this particular cpConfig map entry may be used by an external CP instance\n different than the one that has used it before the operation, or by no external CP instance at all.\n Renaming a CPD identifier during the \"changeCurrentVnfPkg\" operation does not count as moving the related\n \"cpConfig\" map entries to a new \"extCpData\" structure.\n", "type": "object", - "required": ["cpdId"], + "required": [ + "cpdId" + ], "properties": { "cpdId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -945,13 +1378,19 @@ "description": "This type represents an externally provided link port, or a network attachment definition resource of secondary container cluster network, or network address information per instance of an external connection point. In the case of VM-based deployment of the VNFC exposing the external CP:\n 1. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the\n external VL.\n 2. In case a link port is not provided, the VNFM shall create a link port on the external VL and use that link port\n to connect the external CP to the external VL.\nIn the case of container-based deployment of the VNFC exposing the external CP, the VNFM shall use the network attachment definition resource of secondary container cluster network when connecting the CP to the external VL.\n* NOTE 1: The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a virtual network not categorized as secondary container cluster network:\n 1) Void.\n 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes shall be present for an external CP instance\n representing a subport that is to be created, or an external CP instance that is to be created by creating the\n corresponding VNFC or VNF instance during the current or a subsequent LCM operation, or for an existing\n external CP instance that is to be re-configured or added to a particular external virtual link.\n 3) If the \"linkPortId\" attribute is absent, the VNFM shall create a link port.\n 4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\" attribute shall be provided referencing a\n precreated link port, and the VNFM can use means outside the scope of the present document to obtain the\n pre-configured address information for the connection point from the resource representing the link port.\n 5) If both \"cpProtocolData\" and \"linkportId\" are provided, the NFVO shall ensure that the\n cpProtocolData can be used with the pre-created link port referenced by \"linkPortId\".\n\n* NOTE 2: The following conditions apply to the attributes “netAttDefResourceId” and “cpProtocolData” for an external CP\n instance connected or to be connected to a secondary container cluster network:\n 1) The \"netAttDefResourceId\" and \"cpProtocolData\" attributes shall both be absent for the deletion of an\n existing external CP instance addressed by cpInstanceId.\n 2) The \"netAttDefResourceId\" attribute shall be present and the \"cpProtocolData\" attribute may be present for\n a to-be-created external CP instance or an existing external CP instance.\n* NOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the external CP, e.g. to build a link\n redundant mated pair in SR-IOV cases. When more than one netAttDefResourceId is indicated, all shall belong\n to the same namespace as defined by the corresponding \"netAttDefResourceNamespace\" attribute in the\n \"NetAttDefResourceData\".\n* NOTE 4: Either linkPortId or netAttDefResourceId may be included, but not both.\n", "anyOf": [ { - "required": ["linkPortId"] + "required": [ + "linkPortId" + ] }, { - "required": ["cpProtocolData"] + "required": [ + "cpProtocolData" + ] }, { - "required": ["netAttDefResourceId"] + "required": [ + "netAttDefResourceId" + ] } ], "type": "object", @@ -982,7 +1421,9 @@ "items": { "description": "This type represents network protocol data. * NOTE:\tThis attribute allows to signal the addition of further types of layer and protocol\n in future versions of the present document in a backwards-compatible way. In the current\n version of the present document, only IP over Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "Identifier of layer(s) and protocol(s). Permitted values:\n - IP_OVER_ETHERNET.\n - IP_FOR_VIRTUAL_CP\nSee note\n", @@ -997,21 +1438,31 @@ "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["fixedAddresses"] + "required": [ + "fixedAddresses" + ] }, { - "required": ["numDynamicAddresses"] + "required": [ + "numDynamicAddresses" + ] }, { - "required": ["ipAddressRange"] + "required": [ + "ipAddressRange" + ] } ], "properties": { @@ -1023,7 +1474,10 @@ "segmentationType": { "description": "Specifies the encapsulation type for the traffics coming in and out of the trunk subport. Permitted values: -\tVLAN: the subport uses VLAN as encapsulation type. -\tINHERIT: the subport gets its segmentation type from the network it’s connected to. This attribute may be present for CP instances that represent subports in a trunk and shall be absent otherwise. If this attribute is not present for a subport CP instance, default value VLAN shall be used.\n", "type": "string", - "enum": ["VLAN", "INHERIT"] + "enum": [ + "VLAN", + "INHERIT" + ] }, "segmentationId": { "description": "Identification of the network segment to which the CP instance connects to. See note 3 and note 4.\n", @@ -1034,12 +1488,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "fixedAddresses": { "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -1086,12 +1545,17 @@ "virtualCpAddress": { "description": "This type represents network address data for a virtual CP.\n* NOTE 1: If the container cluster is set up to be able to configure an external load balancer this address will be used,\n otherwise it will be ignored by the CISM.\n\n* NOTE 2: In case the cluster can configure an external load balancer but no loadBalancerIp is provided the container\n cluster will assign an IP address.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -1119,14 +1583,19 @@ "items": { "description": "This type contains information related to a network attachment definition resource that provides the specification of the interface used to connect one or multiple connection points to a secondary container cluster network.\n", "type": "object", - "required": ["netAttDefResourceInfoId", "netAttDefResource"], + "required": [ + "netAttDefResourceInfoId", + "netAttDefResource" + ], "properties": { "netAttDefResourceInfoId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "netAttDefResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1197,7 +1666,11 @@ "type": "array", "items": { "type": "object", - "required": ["id", "vnfVirtualLinkDescId", "networkResource"], + "required": [ + "id", + "vnfVirtualLinkDescId", + "networkResource" + ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", @@ -1212,7 +1685,9 @@ "type": "string" }, "networkResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1262,14 +1737,19 @@ "items": { "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", "type": "object", - "required": ["id", "resourceHandle"], + "required": [ + "id", + "resourceHandle" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1320,7 +1800,10 @@ "cpInstanceType": { "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", "type": "string", - "enum": ["VNFC_CP", "EXT_CP"] + "enum": [ + "VNFC_CP", + "EXT_CP" + ] }, "vipCpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1339,14 +1822,19 @@ "items": { "description": "This type contains information related to a network attachment definition resource that provides the specification of the interface used to connect one or multiple connection points to a secondary container cluster network.\n", "type": "object", - "required": ["netAttDefResourceInfoId", "netAttDefResource"], + "required": [ + "netAttDefResourceInfoId", + "netAttDefResource" + ], "properties": { "netAttDefResourceInfoId": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "netAttDefResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1421,7 +1909,10 @@ "type": "array", "items": { "type": "object", - "required": ["id", "performanceMetric"], + "required": [ + "id", + "performanceMetric" + ], "properties": { "id": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -1452,7 +1943,11 @@ "items": { "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance. Depending on the form of virtualisation container of the VNFC:\n - For a VNFC based on VM, a reference to the corresponding VirtualCompute shall be provided, and\n - For a VNFC based on OS container(s), a reference to the Compute MCIO shall be provided. Hence, exposure of\n information by the VNFM to the NFVO is at the MCIO level.\nIn addition, the references to the storage resources depend on the form of the VNFC:\n a) For a VNFC based on VM, storage resource identifiers shall refer to VirtualStorage resources, and\n b) For a VNFC based on OS container(s), storage resource identifiers shall refer to Storage MCIOs.\n\nNOTE 1:\tETSI GS NFV-SOL 001 specifies the structure and format of the VNFD based on \n TOSCA specifications.\nNOTE 2:\tA VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an \n internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external \n CP if it is connected directly to an external VL.\nNOTE 3:\tThe information can be omitted because it is already available as part of the \n external CP information.\nNOTE 4: If only the value or the presence of this attribute is changed in the \"VnfcResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVnfc\" structure in the VNF LCM operation occurrence notifications\n or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\nNOTE 5: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the internal CP, e.g. to build a link\n redundant mated pair in SR-IOV cases.\nNOTE 6: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace.\n", "type": "object", - "required": ["id", "vduId", "computeResource"], + "required": [ + "id", + "vduId", + "computeResource" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1467,7 +1962,9 @@ "type": "string" }, "computeResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1532,7 +2029,10 @@ "type": "array", "items": { "type": "object", - "required": ["id", "cpdId"], + "required": [ + "id", + "cpdId" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1552,30 +2052,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -1593,12 +2106,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -1616,7 +2134,10 @@ "addressRange": { "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", - "required": ["minAddress", "maxAddress"], + "required": [ + "minAddress", + "maxAddress" + ], "properties": { "minAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -1642,12 +2163,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -1682,6 +2208,10 @@ "metadata": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -1689,6 +2219,10 @@ "metadata": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -1699,7 +2233,11 @@ "items": { "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VnfVirtualLinkResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires including\n a related \"AffectedVirtualLink\" structure in the VNF LCM operation occurrence notifications or the\n \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", - "required": ["id", "vnfVirtualLinkDescId", "networkResource"], + "required": [ + "id", + "vnfVirtualLinkDescId", + "networkResource" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1714,7 +2252,9 @@ "type": "string" }, "networkResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1772,14 +2312,19 @@ "items": { "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", "type": "object", - "required": ["id", "resourceHandle"], + "required": [ + "id", + "resourceHandle" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1830,7 +2375,10 @@ "cpInstanceType": { "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", "type": "string", - "enum": ["VNFC_CP", "EXT_CP"] + "enum": [ + "VNFC_CP", + "EXT_CP" + ] }, "vipCpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1856,7 +2404,11 @@ "items": { "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VirtualStorageResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVirtualStorage\" structure in the VNF LCM operation occurrence\n notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", - "required": ["id", "virtualStorageDescId", "storageResource"], + "required": [ + "id", + "virtualStorageDescId", + "storageResource" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1871,7 +2423,9 @@ "type": "string" }, "storageResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1970,7 +2524,11 @@ "mcioType": { "description": "The type of MCIO. Specific values, their semantics and associated MCIO types are defined in clause 5.5.4.9. Additional values are also permitted. See note 1.\n", "type": "string", - "enum": ["Deployment", "StatefulSet"] + "enum": [ + "Deployment", + "StatefulSet", + "DaemonSet" + ] }, "desiredInstances": { "description": "Number of desired MCIO instances.\n", @@ -1980,6 +2538,76 @@ "description": "Number of available MCIO instances.\n", "type": "integer" }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "vnfPaasServiceInfo": { + "description": "Information on the PaaS Services assigned and used by the VNF instance.\n", + "type": "array", + "items": { + "description": "This type provides input information about a PaaS Service that is used by a VNF instance. The PaasServiceInfo is comprised of various sets of information. Some information comes from the VNFD, other information comes from the PaaS Service assets provided by the NFVO to the VNFM, and other information is provided at runtime information about the usage of the PaaS Service.\n", + "type": "object", + "required": [ + "id", + "paasServiceId", + "paasServiceType", + "paasServiceRequestId", + "paasServiceHandle" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceType": { + "description": "The type of PaaS Service. The value of this attribute is expected to be matched against values of the registered PaaS Services in the PSR.", + "type": "string" + }, + "paasServiceVersion": { + "description": "A version.\n", + "type": "string" + }, + "paasServiceRequestId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "paasServiceHandle": { + "description": "This type provides information enabling the access and use of the PaaS Service by the VNF instance. The type and format of the handle depends on the form that the PaaS Service is formed.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, "additionalInfo": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" @@ -2000,12 +2628,16 @@ "_links": { "description": "Links to resources related to this resource.\n", "type": "object", - "required": ["self"], + "required": [ + "self" + ], "properties": { "self": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2016,7 +2648,9 @@ "indicators": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2027,7 +2661,9 @@ "instantiate": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2038,7 +2674,9 @@ "terminate": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2049,7 +2687,9 @@ "scale": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2060,7 +2700,9 @@ "scaleToLevel": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2071,7 +2713,9 @@ "changeFlavour": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2082,7 +2726,9 @@ "heal": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2093,7 +2739,9 @@ "operate": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2104,7 +2752,9 @@ "changeExtConn": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2115,7 +2765,9 @@ "createSnapshot": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2126,7 +2778,9 @@ "revertToSnapshot": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2137,7 +2791,9 @@ "changeCurrentVnfPkg": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", diff --git a/SOL003/VNFLifecycleManagement-API/schemas/vnfInstances.schema.json b/SOL003/VNFLifecycleManagement-API/schemas/vnfInstances.schema.json index 6abfe683c4dd438024a0e399b70b208e693a8054..4a77983cb489cd236a0519079245c2db86fbc75b 100644 --- a/SOL003/VNFLifecycleManagement-API/schemas/vnfInstances.schema.json +++ b/SOL003/VNFLifecycleManagement-API/schemas/vnfInstances.schema.json @@ -56,7 +56,9 @@ "additionalProperties": { "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n \n* NOTE 3:\t ETSI GS NFV-SOL 009 [i.18] specifies the means to configure into the VNFM applicable VIM connection information via the \"NFV-MANO Configuration and Information Management\" interface. \n* NOTE 4:\t Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of the present document, as well as in-band, by means specified in the present document, care should be taken to avoid unintended conflicts in the VNFM when managing such information.\n", "type": "object", - "required": ["vimType"], + "required": [ + "vimType" + ], "properties": { "vimId": { "description": "An identifier with the intention of being globally unique.\n", @@ -87,7 +89,9 @@ "additionalProperties": { "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n \n* NOTE 3:\t ETSI GS NFV-SOL 009 [i.18] specifies the means to configure into the VNFM applicable VIM connection information via the \"NFV-MANO Configuration and Information Management\" interface. \n* NOTE 4:\t Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of the present document, as well as in-band, by means specified in the present document, care should be taken to avoid unintended conflicts in the VNFM when managing such information.\n", "type": "object", - "required": ["vimType"], + "required": [ + "vimType" + ], "properties": { "vimId": { "description": "An identifier with the intention of being globally unique.\n", @@ -118,7 +122,9 @@ "additionalProperties": { "description": "This type represents parameters to connect to a VIM, a CISM, a CIR or a MCIOP repository for managing the resources of a VNF instance.\nThis structure is used to convey VIM-related, CISM-related, CIR-related, or MCIOP-repository-related parameters over the Or-Vnfm interface. Additional parameters for a VIM, a CISM, a CIR or a MCIOP repository may be configured into the VNFM by means outside the scope of the present document and bound to the identifier of that VIM.\n* NOTE 1:\tIf applicable, this attribute also provides information about the resourceGroupIds\n that are accessible using a particular set of credentials. See definition of\n \"resourceGroupId\" in clause 9.5.3.3.\n* NOTE 2:\tOnce the connectivity between VNFM and VIM, CISM, CIR or MCIOP repository is provided\n through a secure connection over HTTP Secure (HTTP over SSL/TLS), and the connection might also be\n established through a VPN (for example TLS-based VPN tunnelling) for site-to-site connection, the\n \"accessInfo\" JSON data structure, and the sensitive data related information (\"username\"/\"password\" as\n required properties for authentication purpose), will be transmitted as plain text through a TLS tunnel\n without additional encoding/encryption before transmitting it, making the sensitive data visible to the\n endpoint. The base64 encoded certificates are only used by the VNFM to verify the authenticity of the\n interface endpoint of the VIM, CISM, CIR or MCIOP repository.\n \n* NOTE 3:\t ETSI GS NFV-SOL 009 [i.18] specifies the means to configure into the VNFM applicable VIM connection information via the \"NFV-MANO Configuration and Information Management\" interface. \n* NOTE 4:\t Due to the possibility of configuring such information into the VNFM out-of-band, by means outside the scope of the present document, as well as in-band, by means specified in the present document, care should be taken to avoid unintended conflicts in the VNFM when managing such information.\n", "type": "object", - "required": ["vimType"], + "required": [ + "vimType" + ], "properties": { "vimId": { "description": "An identifier with the intention of being globally unique.\n", @@ -143,15 +149,299 @@ } } }, + "certificateInfo": { + "description": "This type provides input information related to certificate and certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateConfigurationInfo": { + "description": "This type provides input information related to certificate management.\n", + "type": "object", + "required": [ + "securityPolicy" + ], + "properties": { + "certificateBaseProfile": { + "description": "Information for certificate profile.", + "type": "array", + "items": { + "description": "NOTE: At least one overriding attributes shall be present, otherwise shall be absent.\nThis type provides input information to override certificate base profile for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "issuer": { + "description": "Issuer of certificates. See note.", + "type": "string" + }, + "issuerUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "subject": { + "description": "This type provides input information related to the subject of the certificate.\nNOTE: At least one overriding attributes shall be present, otherwise shall be absent.\n", + "type": "object", + "properties": { + "commonName": { + "description": "Information of the certification target subject FQDN. Can be set empty when this certificate is used for encrypted communication using IP address. See note.\n", + "type": "string" + }, + "organization": { + "description": "Information of the certification target subject Organization. See note.", + "type": "string" + }, + "country": { + "description": "Information of the certification target subject Country. See note.", + "type": "string" + }, + "state": { + "description": "Information of the certification target subject State. See note.", + "type": "string" + }, + "locality": { + "description": "Information of the certification target subject Locality. See note.", + "type": "string" + }, + "emailAddress": { + "description": "Information of the certification contact email address. See note.", + "type": "string" + } + } + }, + "subjectUniqueIdentifier": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "basicConstraints": { + "description": "Basic constraints of certificates. See note.", + "type": "string" + }, + "issuerAltName": { + "description": "Alternative name of issuer of certificates in this NS. See note.", + "type": "array", + "items": { + "type": "string" + } + }, + "subjectAltName": { + "description": "Alternative name of subject of certificates. Shall be present when this certificate is used for encrypted communication using IP address and subjectAltName attribute of CertificateBaseProfile in CertificateDesc of VNFD is empty (see ETSI GS NFV-IFA 011 [14], clause 7.1.19.4). See note.\n", + "type": "array", + "items": { + "type": "string" + } + }, + "nameConstraints": { + "description": "Name constraints of certificates. See note.", + "type": "array", + "items": { + "type": "string" + } + } + } + } + }, + "securityPolicy": { + "description": "Information for security policy to be satisfied for certificate.", + "type": "array", + "items": { + "description": "This type provides input information related to security policy for certificate management.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "maxValidityPeriod": { + "description": "Allowed max validity period for certificates.", + "type": "number" + }, + "allowedAlgorithm": { + "description": "Allowed signature algorithm.", + "type": "string" + }, + "minimumKeyLength": { + "description": "Minimum key length for certificates.", + "type": "number" + } + } + } + }, + "delegationSupportedCertificateManagements": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "cmfInfo": { + "description": "This type provides input information related to CMF for certificate management.\n", + "type": "object", + "required": [ + "id", + "endPoint", + "supportedProtocol" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "endPoint": { + "description": "End point of CMF instance.", + "type": "object", + "properties": { + "ipAddress": { + "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", + "type": "string", + "format": "IP" + }, + "link": { + "description": "This type represents a link to a resource using an absolute URI.\n", + "type": "object", + "required": [ + "href" + ], + "properties": { + "href": { + "description": "String formatted according to IETF RFC 3986.\n", + "type": "string" + } + } + } + } + }, + "supportedProtocol": { + "description": "Supported protocols by CMF instance.", + "type": "array", + "items": { + "description": "Supported protocol by CMF instance.", + "type": "string", + "enum": [ + "CMP", + "CMPv2", + "EST", + "SCEP" + ] + } + }, + "certificateChain": { + "description": "Certificate chain that this CMF provides.", + "type": "array", + "items": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, + "certificateContents": { + "description": "Information for contents of issued certificates. The information contained in this attribute may be updated over time during the VNF LCM, e.g., certificate(s) renewal.\n", + "type": "array", + "items": { + "description": "This type provides input information related to certificate content.\nNOTE: The CertificateDesc data type is defined in clause 7.1.19.2 of ETSI GS NFV IFA 011 [10].\n", + "type": "object", + "required": [ + "id", + "certificateDescId", + "certificateType" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "certificateDescId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "certificateType": { + "description": "Type of this certificate.", + "type": "string", + "enum": [ + "VNFCI_CERT", + "VNFOAM_CERT" + ] + }, + "supportedCertificateManagements": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "version": { + "description": "A version.\n", + "type": "string" + }, + "serialNumber": { + "description": "Serial number of this certificate.", + "type": "integer" + }, + "signatureAlgorithm": { + "description": "Algorithm of this certificate's signature.", + "type": "string" + }, + "issuer": { + "description": "Issuer of this certificate.", + "type": "string" + }, + "notBefore": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "notAfter": { + "description": "Date-time stamp. Representation: String formatted according to IETF RFC 3339.\n", + "type": "string", + "format": "date-time" + }, + "subject": { + "description": "Subject of this certificate.", + "type": "string" + }, + "publicKeyAlgorithm": { + "description": "Algorithm of this certificate's public key.", + "type": "string" + }, + "publicKey": { + "description": "Public key of this certificate.", + "type": "string" + }, + "certificateExtensions": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + } + } + } + }, "instantiationState": { "description": "The instantiation state of the VNF. Permitted values: - NOT_INSTANTIATED: The VNF instance is terminated or not instantiated. - INSTANTIATED: The VNF instance is instantiated.\n", "type": "string", - "enum": ["NOT_INSTANTIATED", "INSTANTIATED"] + "enum": [ + "NOT_INSTANTIATED", + "INSTANTIATED" + ] }, "instantiatedVnfInfo": { "description": "Information specific to an instantiated VNF instance. This attribute shall be present if the instantiateState attribute value is INSTANTIATED.\n", "type": "object", - "required": ["flavourId", "vnfState", "extCpInfo"], + "required": [ + "flavourId", + "vnfState", + "extCpInfo" + ], "properties": { "flavourId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -160,7 +450,10 @@ "vnfState": { "description": "STARTED: The VNF instance is up and running. STOPPED: The VNF instance has been shut down.\n", "type": "string", - "enum": ["STARTED", "STOPPED"] + "enum": [ + "STARTED", + "STOPPED" + ] }, "scaleStatus": { "description": "Scale status of the VNF, one entry per aspect. Represents for every scaling aspect how \"big\" the VNF has been scaled w.r.t. that aspect. This attribute shall be present if the VNF supports scaling. See clause B.2 for an explanation of VNF scaling.\n", @@ -168,7 +461,10 @@ "items": { "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", "type": "object", - "required": ["aspectId", "scaleLevel"], + "required": [ + "aspectId", + "scaleLevel" + ], "properties": { "aspectId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -191,7 +487,10 @@ "items": { "description": "This type represents the scale level of a VNF instance related to a scaling aspect.\n", "type": "object", - "required": ["aspectId", "scaleLevel"], + "required": [ + "aspectId", + "scaleLevel" + ], "properties": { "aspectId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -208,6 +507,14 @@ } } }, + "selectedDeployableModule": { + "description": "References a currently selected deployable module, as defined in the VNFD, that has already completed the instantiation of its VNFCs.\n", + "type": "array", + "items": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + } + }, "extCpInfo": { "description": "Information about the external CPs exposed by the VNF instance. When trunking is enabled, the list of entries includes both, external CPs corresponding to parent ports of a trunk, and external CPs associated to sub-ports of a trunk.\n", "type": "array", @@ -215,16 +522,27 @@ "items": { "description": "This type represents information about an external CP of a VNF.\nNOTE 1:\tThe attributes \"associatedVnfcCpId\", \"associatedVipCpId\", \"associatedVirtualCpId\" and \n \"associatedVnfVirtualLinkId\" are mutually exclusive. Exactly one shall be present.\nNOTE 2:\tAn external CP instance is not associated to a link port in the cases indicated for the \n “extLinkPorts” attribute in clause 4.4.1.11.\nNOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network \n attachment definition resource is needed to fulfil the connectivity requirements of the external \n CP, e.g. to build a link redundant mated pair in SR-IOV cases.\nNOTE 4: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace.\n", "type": "object", - "required": ["id", "cpdId", "cpConfigId", "cpProtocolInfo"], + "required": [ + "id", + "cpdId", + "cpConfigId", + "cpProtocolInfo" + ], "oneOf": [ { - "required": ["associatedVnfcCpId"] + "required": [ + "associatedVnfcCpId" + ] }, { - "required": ["associatedVipCpId"] + "required": [ + "associatedVipCpId" + ] }, { - "required": ["associatedVnfVirtualLinkId"] + "required": [ + "associatedVnfVirtualLinkId" + ] } ], "properties": { @@ -250,30 +568,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -291,12 +622,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -314,7 +650,10 @@ "addressRange": { "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", - "required": ["minAddress", "maxAddress"], + "required": [ + "minAddress", + "maxAddress" + ], "properties": { "minAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -340,12 +679,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -392,6 +736,10 @@ "description": "An identifier with the intention of being globally unique.\n", "type": "string" } + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -403,7 +751,10 @@ "items": { "description": "This type provides information related to virtual IP (VIP) CP.\nNOTE 1:\tIt is possible that there is no associated VnfcCp because the VIP CP is available but not associated yet. NOTE 2: If only the value or the presence of this attribute is changed in the \"VipCpInfo\" structure by an LCM operation occurrence, this does not represent a change that requires including a related \"AffectedVipCp\" structure in the VNF LCM operation occurrence notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", - "required": ["cpInstanceId", "cpdId"], + "required": [ + "cpInstanceId", + "cpdId" + ], "properties": { "cpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -427,30 +778,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -468,12 +832,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -491,7 +860,10 @@ "addressRange": { "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", - "required": ["minAddress", "maxAddress"], + "required": [ + "minAddress", + "maxAddress" + ], "properties": { "minAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -517,12 +889,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -563,7 +940,12 @@ "items": { "description": "This type provides information related to a virtual CP instance of a VNF.\nNOTE: A consumer of the VNF LCM interface can learn the actual VNFC instances implementing the service \n accessible via the virtual CP instance by querying the \"vnfcResourceInfo\" from the \"InstantiatedVnfInfo\" \n and filtering by corresponding \"vduIds\" values.\n", "type": "object", - "required": ["cpInstanceId", "cpdId", "resourceHandle", "vduIds"], + "required": [ + "cpInstanceId", + "cpdId", + "resourceHandle", + "vduIds" + ], "properties": { "cpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -574,7 +956,9 @@ "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -628,30 +1012,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -669,12 +1066,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -692,7 +1094,10 @@ "addressRange": { "description": "An IP address range used, e.g. in case of egress connections. See note 2.\n", "type": "object", - "required": ["minAddress", "maxAddress"], + "required": [ + "minAddress", + "maxAddress" + ], "properties": { "minAddress": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -718,12 +1123,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -754,7 +1164,9 @@ "items": { "description": "This type provides additional service information of the virtual CP instance used to expose properties of the virtual CP to NFV-MANO.\nNOTE: This attribute shall only be present if additional information is needed to identify the service \n termination within the VNF, such as for example a URL path information in an HTTP request required \n to allow a single virtual CP IP address to be used for several HTTP based services that use the \n same port number.\n", "type": "object", - "required": ["portInfo"], + "required": [ + "portInfo" + ], "properties": { "portInfo": { "description": "Service port numbers exposed by the virtual CP instance.\n", @@ -763,7 +1175,11 @@ "items": { "description": "This type describes the service identifying port properties exposed by the virtual CP instance.\n", "type": "object", - "required": ["name", "port", "portConfigurable"], + "required": [ + "name", + "port", + "portConfigurable" + ], "properties": { "name": { "description": "The name of the port exposed by the virtual CP instance.\n", @@ -772,7 +1188,11 @@ "protocol": { "description": "The L4 protocol for this port exposed by the virtual CP instance.\nPermitted values: - TCP - UDP - SCTP\n", "type": "string", - "enum": ["TCP", "UDP", "SCTP"] + "enum": [ + "TCP", + "UDP", + "SCTP" + ] }, "port": { "description": "The L4 port number exposed by the virtual CP instance.\n", @@ -805,14 +1225,20 @@ "items": { "description": "This type represents information about an external VL.\nNOTE:\tThis attribute reflects the current configuration information that has resulted from merging into this attribute \n the \"VnfExtCpData\" information which was passed as part of the \"ExtVirtualLinkData\" structure in the input of the \n most recent VNF LCM operation such as \"InstantiateVnfRequest\", \"ChangeExtVnfConnectivityRequest\", \"ChangeVnfFlavourRequest\" \n or \"ChangeCurrentVnfPkgRequest\", or in the Grant response. If applying such change results in an empty list of \n \"currentVnfExtCpData\" structure instances, the affected instance of \"ExtVirtualLinkInfo\" shall be removed from its \n parent data structure.\n", "type": "object", - "required": ["id", "resourceHandle", "currentVnfExtCpData"], + "required": [ + "id", + "resourceHandle", + "currentVnfExtCpData" + ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -862,14 +1288,19 @@ "items": { "description": "This type represents information about a link port of an external VL, i.e. a port providing connectivity for the VNF to an NS VL.\nNOTE 1:\tThe use cases UC#4 and UC#5 in clause A.4 of ETSI GS NFV-IFA 007 provide examples for such a configuration. NOTE 2:\tThe value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\" attribute.\n", "type": "object", - "required": ["id", "resourceHandle"], + "required": [ + "id", + "resourceHandle" + ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -934,7 +1365,9 @@ "items": { "description": "This type represents configuration information for external CPs created. * NOTE 1: \tIn case this identifier refers to a CPD with trunking enabled, the external CP instances created\n from this CPD will represent ports in a trunk.\n* NOTE 2: \tWithin one VNF instance, all VNFC instances created from a particular VDU have the same external\n connectivity. Thus, given a particular value of the \"cpdId\" attribute, there shall be one\n \"cpConfig\" entry for each VNFC instance that has been or can be created from a VDU which includes\n a CPD identified by the \"cpdId\" attribute. If the cpConfig represents a subport in a trunk,\n all \"cpConfig\" entries in this list shall have the same segmentationId, which means they are\n connected to the same set of external VLs via the trunk.\n* NOTE 3: \tThe map entry value shall be set to \"null\" in order to delete a \"VnfExtCpConfig\" entry identified\n by a particular key value from the map, i.e. for the disconnection of an existing external\n CP instance addressed by cpInstanceId in the deleted map entry from a particular external\n virtual link, and deletion of that instance in case it represents a subport. Deleting the\n last key from the map removes the affected instance of the \"VnfExtCpData\" structure from\n its parent data structure.\n* NOTE 4: If, as defined by the input parameters of a \"ChangeVnfFlavour\", \"ChangeExtVnfConnectivity\" or\n \"ChangeCurrentVnfPkg\" operation or as part of the Grant response for any of these operations, a cpConfig\n map entry identified by a particular map key value is moved into another \"ExtVirtualLinkData\" or\n \"VnfExtCpData\" structure, this particular cpConfig map entry may be used by an external CP instance\n different than the one that has used it before the operation, or by no external CP instance at all.\n Renaming a CPD identifier during the \"changeCurrentVnfPkg\" operation does not count as moving the related\n \"cpConfig\" map entries to a new \"extCpData\" structure.\n", "type": "object", - "required": ["cpdId"], + "required": [ + "cpdId" + ], "properties": { "cpdId": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -947,13 +1380,19 @@ "description": "This type represents an externally provided link port, or a network attachment definition resource of secondary container cluster network, or network address information per instance of an external connection point. In the case of VM-based deployment of the VNFC exposing the external CP:\n 1. In case a link port is provided, the VNFM shall use that link port when connecting the external CP to the\n external VL.\n 2. In case a link port is not provided, the VNFM shall create a link port on the external VL and use that link port\n to connect the external CP to the external VL.\nIn the case of container-based deployment of the VNFC exposing the external CP, the VNFM shall use the network attachment definition resource of secondary container cluster network when connecting the CP to the external VL.\n* NOTE 1: The following conditions apply to the attributes \"linkPortId\" and \"cpProtocolData\" for an external CP\n instance connected or to be connected to a virtual network not categorized as secondary container cluster network:\n 1) Void.\n 2) At least one of the \"linkPortId\" and \"cpProtocolData\" attributes shall be present for an external CP instance\n representing a subport that is to be created, or an external CP instance that is to be created by creating the\n corresponding VNFC or VNF instance during the current or a subsequent LCM operation, or for an existing\n external CP instance that is to be re-configured or added to a particular external virtual link.\n 3) If the \"linkPortId\" attribute is absent, the VNFM shall create a link port.\n 4) If the \"cpProtocolData\" attribute is absent, the \"linkPortId\" attribute shall be provided referencing a\n precreated link port, and the VNFM can use means outside the scope of the present document to obtain the\n pre-configured address information for the connection point from the resource representing the link port.\n 5) If both \"cpProtocolData\" and \"linkportId\" are provided, the NFVO shall ensure that the\n cpProtocolData can be used with the pre-created link port referenced by \"linkPortId\".\n\n* NOTE 2: The following conditions apply to the attributes “netAttDefResourceId” and “cpProtocolData” for an external CP\n instance connected or to be connected to a secondary container cluster network:\n 1) The \"netAttDefResourceId\" and \"cpProtocolData\" attributes shall both be absent for the deletion of an\n existing external CP instance addressed by cpInstanceId.\n 2) The \"netAttDefResourceId\" attribute shall be present and the \"cpProtocolData\" attribute may be present for\n a to-be-created external CP instance or an existing external CP instance.\n* NOTE 3: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the external CP, e.g. to build a link\n redundant mated pair in SR-IOV cases. When more than one netAttDefResourceId is indicated, all shall belong\n to the same namespace as defined by the corresponding \"netAttDefResourceNamespace\" attribute in the\n \"NetAttDefResourceData\".\n* NOTE 4: Either linkPortId or netAttDefResourceId may be included, but not both.\n", "anyOf": [ { - "required": ["linkPortId"] + "required": [ + "linkPortId" + ] }, { - "required": ["cpProtocolData"] + "required": [ + "cpProtocolData" + ] }, { - "required": ["netAttDefResourceId"] + "required": [ + "netAttDefResourceId" + ] } ], "type": "object", @@ -984,7 +1423,9 @@ "items": { "description": "This type represents network protocol data. * NOTE:\tThis attribute allows to signal the addition of further types of layer and protocol\n in future versions of the present document in a backwards-compatible way. In the current\n version of the present document, only IP over Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "Identifier of layer(s) and protocol(s). Permitted values:\n - IP_OVER_ETHERNET.\n - IP_FOR_VIRTUAL_CP\nSee note\n", @@ -999,21 +1440,31 @@ "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["fixedAddresses"] + "required": [ + "fixedAddresses" + ] }, { - "required": ["numDynamicAddresses"] + "required": [ + "numDynamicAddresses" + ] }, { - "required": ["ipAddressRange"] + "required": [ + "ipAddressRange" + ] } ], "properties": { @@ -1025,7 +1476,10 @@ "segmentationType": { "description": "Specifies the encapsulation type for the traffics coming in and out of the trunk subport. Permitted values: -\tVLAN: the subport uses VLAN as encapsulation type. -\tINHERIT: the subport gets its segmentation type from the network it’s connected to. This attribute may be present for CP instances that represent subports in a trunk and shall be absent otherwise. If this attribute is not present for a subport CP instance, default value VLAN shall be used.\n", "type": "string", - "enum": ["VLAN", "INHERIT"] + "enum": [ + "VLAN", + "INHERIT" + ] }, "segmentationId": { "description": "Identification of the network segment to which the CP instance connects to. See note 3 and note 4.\n", @@ -1036,12 +1490,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "fixedAddresses": { "description": "Fixed addresses to assign (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -1088,12 +1547,17 @@ "virtualCpAddress": { "description": "This type represents network address data for a virtual CP.\n* NOTE 1: If the container cluster is set up to be able to configure an external load balancer this address will be used,\n otherwise it will be ignored by the CISM.\n\n* NOTE 2: In case the cluster can configure an external load balancer but no loadBalancerIp is provided the container\n cluster will assign an IP address.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -1131,7 +1595,9 @@ "type": "string" }, "netAttDefResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1202,7 +1668,11 @@ "type": "array", "items": { "type": "object", - "required": ["id", "vnfVirtualLinkDescId", "networkResource"], + "required": [ + "id", + "vnfVirtualLinkDescId", + "networkResource" + ], "properties": { "id": { "description": "An identifier with the intention of being globally unique.\n", @@ -1217,7 +1687,9 @@ "type": "string" }, "networkResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1267,14 +1739,19 @@ "items": { "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", "type": "object", - "required": ["id", "resourceHandle"], + "required": [ + "id", + "resourceHandle" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1325,7 +1802,10 @@ "cpInstanceType": { "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", "type": "string", - "enum": ["VNFC_CP", "EXT_CP"] + "enum": [ + "VNFC_CP", + "EXT_CP" + ] }, "vipCpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1354,7 +1834,9 @@ "type": "string" }, "netAttDefResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1429,7 +1911,10 @@ "type": "array", "items": { "type": "object", - "required": ["id", "performanceMetric"], + "required": [ + "id", + "performanceMetric" + ], "properties": { "id": { "description": "An identifier that is unique within a VNF descriptor.\n", @@ -1460,7 +1945,11 @@ "items": { "description": "This type represents the information on virtualised compute and storage resources used by a VNFC in a VNF instance. Depending on the form of virtualisation container of the VNFC:\n - For a VNFC based on VM, a reference to the corresponding VirtualCompute shall be provided, and\n - For a VNFC based on OS container(s), a reference to the Compute MCIO shall be provided. Hence, exposure of\n information by the VNFM to the NFVO is at the MCIO level.\nIn addition, the references to the storage resources depend on the form of the VNFC:\n a) For a VNFC based on VM, storage resource identifiers shall refer to VirtualStorage resources, and\n b) For a VNFC based on OS container(s), storage resource identifiers shall refer to Storage MCIOs.\n\nNOTE 1:\tETSI GS NFV-SOL 001 specifies the structure and format of the VNFD based on \n TOSCA specifications.\nNOTE 2:\tA VNFC CP is \"connected to\" an external CP if the VNFC CP is connected to an \n internal VL that exposes an external CP. A VNFC CP is \"exposed as\" an external \n CP if it is connected directly to an external VL.\nNOTE 3:\tThe information can be omitted because it is already available as part of the \n external CP information.\nNOTE 4: If only the value or the presence of this attribute is changed in the \"VnfcResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVnfc\" structure in the VNF LCM operation occurrence notifications\n or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\nNOTE 5: Cardinality greater than 1 is only applicable for specific cases where more than one network attachment\n definition resource is needed to fulfil the connectivity requirements of the internal CP, e.g. to build a link\n redundant mated pair in SR-IOV cases.\nNOTE 6: When more than one netAttDefResourceId is indicated, all shall belong to the same namespace.\n", "type": "object", - "required": ["id", "vduId", "computeResource"], + "required": [ + "id", + "vduId", + "computeResource" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1475,7 +1964,9 @@ "type": "string" }, "computeResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1540,7 +2031,10 @@ "type": "array", "items": { "type": "object", - "required": ["id", "cpdId"], + "required": [ + "id", + "cpdId" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1560,30 +2054,43 @@ "items": { "description": "This type describes the protocol layer(s) that a CP uses together with protocol-related information, like addresses.\nNOTE:\tThis attribute allows to signal the addition of further types of layer and protocol in future versions of the \n present document in a backwards-compatible way. In the current version of the present document, only IP over \n Ethernet is supported.\n", "type": "object", - "required": ["layerProtocol"], + "required": [ + "layerProtocol" + ], "properties": { "layerProtocol": { "description": "The identifier of layer(s) and protocol(s) associated to the network address information.\nPermitted values:\n - IP_OVER_ETHERNET\n - IP_FOR_VIRTUAL_CP\nSee note.\n", "type": "string", - "enum": ["IP_OVER_ETHERNET", "IP_FOR_VIRTUAL_CP"] + "enum": [ + "IP_OVER_ETHERNET", + "IP_FOR_VIRTUAL_CP" + ] }, "ipOverEthernet": { "description": "This type represents information about a network address that has been assigned.\nNOTE 1:\tAt least one of \"macAddress\" or \"ipAddresses\" shall be present. NOTE 2:\tExactly one of \"addresses\" or \"addressRange\" shall be present. NOTE 3:\tIf the Cp instance represents a subport in a trunk, segmentationId shall be present. \n Otherwise it shall not be present.\nNOTE 4:\tDepending on the NFVI networking infrastructure, the segmentationId may indicate the \n actual network segment value (e.g. vlan Id, Vxlan segmentation id, etc.) used in the \n transport header of the packets or it may be an identifier used between the application \n and the NFVI networking infrastructure to identify the network sub-interface of the trunk \n port in question. In the latter case the NFVI infrastructure will map this local segmentationId \n to whatever segmentationId is actually used by the NFVI’s transport technology.\n", "type": "object", "anyOf": [ { - "required": ["macAddress"] + "required": [ + "macAddress" + ] }, { - "required": ["ipAddresses"] + "required": [ + "ipAddresses" + ] } ], "oneOf": [ { - "required": ["addresses"] + "required": [ + "addresses" + ] }, { - "required": ["addressRange"] + "required": [ + "addressRange" + ] } ], "properties": { @@ -1601,12 +2108,17 @@ "type": "array", "items": { "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: IPV4, IPV6.\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "addresses": { "description": "Fixed addresses assigned (from the subnet defined by \"subnetId\" if provided). See note 2.\n", @@ -1653,12 +2165,17 @@ "virtualCpAddress": { "description": "This type represents information about a network address that has been assigned to a virtual CP.\n", "type": "object", - "required": ["type"], + "required": [ + "type" + ], "properties": { "type": { "description": "The type of the IP addresses. Permitted values: - IPV4 - IPV6\n", "type": "string", - "enum": ["IPV4", "IPV6"] + "enum": [ + "IPV4", + "IPV6" + ] }, "loadBalancerIp": { "description": "An IPV4 or IPV6 address. Representation: In case of an IPV4 address, string that consists of four decimal integers separated by dots, each integer ranging from 0 to 255. In case of an IPV6 address, string that consists of groups of zero to four hexadecimal digits, separated by colons.\n", @@ -1693,6 +2210,10 @@ "metadata": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -1700,6 +2221,10 @@ "metadata": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" } } } @@ -1710,7 +2235,11 @@ "items": { "description": "This type represents the information that allows addressing a virtualised resource that is used by an internal VL instance in a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VnfVirtualLinkResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires including\n a related \"AffectedVirtualLink\" structure in the VNF LCM operation occurrence notifications or the\n \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", - "required": ["id", "vnfVirtualLinkDescId", "networkResource"], + "required": [ + "id", + "vnfVirtualLinkDescId", + "networkResource" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1725,7 +2254,9 @@ "type": "string" }, "networkResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1783,14 +2314,19 @@ "items": { "description": "This type represents a link port of an internal VL of a VNF.\nNOTE 1: Either cpInstanceId with cpInstanceType set to \"EXT_CP\" or any combination of cpInstanceId\n with cpInstanceType set to \"VNFC_CP\" and vipCpInstanceId (i.e. one or both of them) shall be \n present for a VnfLinkPortInfo. In case both cpInstanceId with cpInstanceType set to \"VNFC_CP\" \n and vipCpInstanceId are present, the two different CP instances share the linkport.\nNOTE 2: Annex A.4 of ETSI GS NFV-IFA 007 provides examples for configurations where both vipCpInstanceId\n and vnfcCpInstanceId are present (UC#5 and UC#5-b), only vnfcCpInstanceId is present (UC#2), or \n only vipCpInstanceId is present (UC6 and UC#6-b).\nNOTE 3: The value of \"trunkResourceId\" is scoped by the value of \"vimConnectionId\" in the \"resourceHandle\"\n attribute.\n", "type": "object", - "required": ["id", "resourceHandle"], + "required": [ + "id", + "resourceHandle" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", "type": "string" }, "resourceHandle": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1841,7 +2377,10 @@ "cpInstanceType": { "description": "Type of the CP instance that is identified by cpInstanceId. Shall be present if \"cpInstanceId\" is present and shall be absent otherwise.\nPermitted values: - VNFC_CP: The link port is connected to a VNFC CP. -\tEXT_CP: The link port is associated to an external CP. See note 1.\n", "type": "string", - "enum": ["VNFC_CP", "EXT_CP"] + "enum": [ + "VNFC_CP", + "EXT_CP" + ] }, "vipCpInstanceId": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1867,7 +2406,11 @@ "items": { "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance.\nNote: If only the value or the presence of this attribute is changed in the \"VirtualStorageResourceInfo\"\n structure by an LCM operation occurrence, this does not represent a change that requires\n including a related \"AffectedVirtualStorage\" structure in the VNF LCM operation occurrence\n notifications or the \"VnfLcmOpOcc\" structure related to this LCM operation occurrence.\n", "type": "object", - "required": ["id", "virtualStorageDescId", "storageResource"], + "required": [ + "id", + "virtualStorageDescId", + "storageResource" + ], "properties": { "id": { "description": "An identifier that is unique for the respective type within a VNF instance, but may not be globally unique.\n", @@ -1882,7 +2425,9 @@ "type": "string" }, "storageResource": { - "required": ["resourceId"], + "required": [ + "resourceId" + ], "type": "object", "description": "This type represents the information that allows addressing a virtualised resource that is used by a VNF instance. Information about the resource is available from the VIM.\n* NOTE 1: The value set of the \"vimLevelResourceType\" attribute is within the scope of the VIM or CISM or the resource \n provider and can be used as information that complements the ResourceHandle. This value set is different from \n the value set of the \"type\" attribute in the ResourceDefinition (refer to clause 9.5.3.2). When the container \n infrastructure service management is a Kubernetes® instance the vimLevelResourceType is the type of \n resource, as would correspond to the 'kind' field if the resource is declared in its own Kubernetes® manifest, \n e.g.: Pod, PersistentVolumeClaim, NetworkAttachmentDefinition.\n\n* NOTE 2: When the container infrastructure service management is a Kubernetes® instance the resourceId shall be \n populated in the following way:\n - For a compute MCIO, it is the instance identifier that Kubernetes® assigns, which is unique cluster wide \n per resource type.\n - For a storage MCIO modelled as a persistent volume claim, it is the name of the persistent volume claim, \n i.e. the value of the 'claimName' field in the Kubernetes® manifest, or a compound name built by \n Kubernetes® if the persistent volume claim is defined inline in another template instead of in its own \n manifest.\n - For a network MCIO representing a NetworkAttachmentDefinition, a Service or an Ingress, it is the value of \n the 'metadata.name' field in Kubernetes® manifest.\n", "properties": { @@ -1981,7 +2526,11 @@ "mcioType": { "description": "The type of MCIO. Specific values, their semantics and associated MCIO types are defined in clause 5.5.4.9. Additional values are also permitted. See note 1.\n", "type": "string", - "enum": ["Deployment", "StatefulSet"] + "enum": [ + "Deployment", + "StatefulSet", + "DaemonSet" + ] }, "desiredInstances": { "description": "Number of desired MCIO instances.\n", @@ -1991,6 +2540,76 @@ "description": "Number of available MCIO instances.\n", "type": "integer" }, + "additionalInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "certificateContentId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + } + } + } + }, + "vnfPaasServiceInfo": { + "description": "Information on the PaaS Services assigned and used by the VNF instance.\n", + "type": "array", + "items": { + "description": "This type provides input information about a PaaS Service that is used by a VNF instance. The PaasServiceInfo is comprised of various sets of information. Some information comes from the VNFD, other information comes from the PaaS Service assets provided by the NFVO to the VNFM, and other information is provided at runtime information about the usage of the PaaS Service.\n", + "type": "object", + "required": [ + "id", + "paasServiceId", + "paasServiceType", + "paasServiceRequestId", + "paasServiceHandle" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceId": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "paasServiceType": { + "description": "The type of PaaS Service. The value of this attribute is expected to be matched against values of the registered PaaS Services in the PSR.", + "type": "string" + }, + "paasServiceVersion": { + "description": "A version.\n", + "type": "string" + }, + "paasServiceRequestId": { + "description": "An identifier that is unique within a VNF descriptor.\n", + "type": "string" + }, + "paasServiceHandle": { + "description": "This type provides information enabling the access and use of the PaaS Service by the VNF instance. The type and format of the handle depends on the form that the PaaS Service is formed.\n", + "type": "object", + "required": [ + "id" + ], + "properties": { + "id": { + "description": "An identifier with the intention of being globally unique.\n", + "type": "string" + }, + "interfaceInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "accessInfo": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + }, + "extra": { + "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", + "type": "object" + } + } + }, "additionalInfo": { "description": "This type represents a list of key-value pairs. The order of the pairs in the list is not significant. In JSON, a set of keyvalue pairs is represented as an object. It shall comply with the provisions defined in clause 4 of IETF RFC 8259. In the following example, a list of key-value pairs with four keys (\"aString\", \"aNumber\", \"anArray\" and \"anObject\") is provided to illustrate that the values associated with different keys can be of different type.\n", "type": "object" @@ -2011,12 +2630,16 @@ "_links": { "description": "Links to resources related to this resource.\n", "type": "object", - "required": ["self"], + "required": [ + "self" + ], "properties": { "self": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2027,7 +2650,9 @@ "indicators": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2038,7 +2663,9 @@ "instantiate": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2049,7 +2676,9 @@ "terminate": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2060,7 +2689,9 @@ "scale": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2071,7 +2702,9 @@ "scaleToLevel": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2082,7 +2715,9 @@ "changeFlavour": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2093,7 +2728,9 @@ "heal": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2104,7 +2741,9 @@ "operate": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2115,7 +2754,9 @@ "changeExtConn": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2126,7 +2767,9 @@ "createSnapshot": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2137,7 +2780,9 @@ "revertToSnapshot": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2148,7 +2793,9 @@ "changeCurrentVnfPkg": { "description": "This type represents a link to a resource using an absolute URI.\n", "type": "object", - "required": ["href"], + "required": [ + "href" + ], "properties": { "href": { "description": "String formatted according to IETF RFC 3986.\n", @@ -2160,4 +2807,4 @@ } } } -} +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index e703bb66e1228b631df7249fa668ffbe1fb020e0..7df57b4fb4c908c9134096955e5c3921183d3b01 100644 --- a/requirements.txt +++ b/requirements.txt @@ -9,4 +9,4 @@ robotframework-jsonlibrary==0.3 robotframework-jsonschemalibrary==1.0 robotframework-mockserver==0.0.7 robotframework-requests==0.7.1 -PyJWT==2.9.0 \ No newline at end of file +PyJWT==2.9.0