diff --git a/SOL003/VNFLifecycleManagement-API_egm/ChangeExternalVNFConnectivityTask.robot b/SOL003/VNFLifecycleManagement-API_egm/ChangeExternalVNFConnectivityTask.robot new file mode 100644 index 0000000000000000000000000000000000000000..18461a3a2ec20d9a8e6342896215796054bf4b27 --- /dev/null +++ b/SOL003/VNFLifecycleManagement-API_egm/ChangeExternalVNFConnectivityTask.robot @@ -0,0 +1,82 @@ +*** Settings *** +Resource variables.txt +Library REST http://${VNFM_HOST}:${VNFM_PORT} +... spec=SOL003-VNFLifecycleManagement-API.yaml +Library DependencyLibrary +Suite setup Check resource existance + +*** Test Cases *** +Change external VNF connectivity + [Documentation] The POST method changes the external connectivity of a VNF instance + Log Trying to change the external connectivity of a VNF instance. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Post ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn ${Change_Ext_Vnf_Connectivity_REQUEST} + Integer response status 202 + Log Status code validated + +Change external VNF connectivity Conflict (parallel LCM operation) + # TODO: Need to set the pre-condition of the test + [Documentation] Conflict + ... The operation cannot be executed currently, due to a conflict with the state of the VNF instance resource. + ... Typically, this is due to the fact that another LCM operation is ongoing. + ... The response body shall contain a ProblemDetails structure, in which the “detail” attribute should convey more information about the error. + [Setup] Launch another LCM operation + log Trying to change the deployment flavour of a VNF instance. + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Post ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn ${Change_Ext_Vnf_Connectivity_REQUEST} + Log Validate Status code + Output response + Integer response status 409 + [Teardown] #We cannot know if the "scale" operation is finished easily because the 202 indicates only whether the operation has been accepted, not whether the operation has been finished + + +GET Change external VNF connectivity - Method not implemented + log Trying to perform a GET. This method should not be implemented + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Get ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn + Log Validate Status code + Output response + Integer response status 405 + +PUT Change external VNF connectivity - Method not implemented + log Trying to perform a PUT. This method should not be implemented + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Put ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn + Log Validate Status code + Output response + Integer response status 405 + +PATCH Change external VNF connectivity - Method not implemented + log Trying to perform a PATCH. This method should not be implemented + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Patch ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn + Log Validate Status code + Output response + Integer response status 405 + +DELETE Change external VNF connectivity - Method not implemented + log Trying to perform a DELETE. This method should not be implemented + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/change_ext_conn + Log Validate Status code + Output response + Integer response status 405 + +*** Key words *** +Check resource existance + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Get ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId} + Integer response status 200 + +Launch another LCM operation + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Post ${apiRoot}/${apiName}/${apiVersion}/vnf_instances/${vnfInstanceId}/scale ${Scale_Vnf_REQUEST} + Integer response status 202 \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API_egm/IndividualSubscription.robot b/SOL003/VNFLifecycleManagement-API_egm/IndividualSubscription.robot new file mode 100644 index 0000000000000000000000000000000000000000..94a774c309f94c412ecb329bb9102667c46c8558 --- /dev/null +++ b/SOL003/VNFLifecycleManagement-API_egm/IndividualSubscription.robot @@ -0,0 +1,65 @@ +*** Settings *** +Resource variables.txt +Library REST http://${VNFM_HOST}:${VNFM_PORT} +... spec=SOL003-VNFLifecycleManagement-API.yaml +Documentation This resource represents an individual subscription. The client can use this resource to read and to terminate a +... subscription to notifications related to VNF lifecycle management +Suite setup Check resource existance + +*** Test Cases *** +Post Individual Subscription - Method not implemented + log Trying to perform a POST. 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":"${AUTHORIZATION}"} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + Log Validate Status code + Output response + Integer response status 405 + +Get Information about an individual subscription + log Trying to get information about an individual subscription + Set Headers {"Accept":"${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + Log Validate Status code + Output response + Integer response status 200 + +PUT an individual subscription - Method not implemented + 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":"${AUTHORIZATION}"} + Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + Log Validate Status code + Output response + Integer response status 405 + +PATCH an individual subscription - Method not implemented + 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":"${AUTHORIZATION}"} + Patch ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + Log Validate Status code + Output response + Integer response status 405 + +DELETE an individual subscription + log Try to delete an individual subscription + Set Headers {"Accept":"${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Patch ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + Log Validate Status code + Output response + Integer response status 204 + +*** Key words *** + +Check resource existance + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions/${subscriptionId} + Integer response status 200 \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API_egm/NotificationEndpoint.robot b/SOL003/VNFLifecycleManagement-API_egm/NotificationEndpoint.robot new file mode 100644 index 0000000000000000000000000000000000000000..2e523e718d63d673573b752751735bb0d192dddf --- /dev/null +++ b/SOL003/VNFLifecycleManagement-API_egm/NotificationEndpoint.robot @@ -0,0 +1,57 @@ +*** Settings *** +Resource variables.txt +Library REST http://${NFVO_HOST}:${NFVO_PORT} +... spec=SOL003-VNFLifecycleManagement-API.yaml + +*** Test Cases *** +Deliver a notification - Operation Occurence + log The POST method delivers a notification from the server to the client. + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Post ${notification_ep} ${VnfLcmOperationOccurrenceNotification} + Log Validate Status code + Output response + Integer response status 204 + +Deliver a notification - Id Creation + log The POST method delivers a notification from the server to the client. + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Post ${notification_ep} ${VnfIdentifierCreationNotification} + Log Validate Status code + Output response + Integer response status 204 + +Deliver a notification - Id deletion + log The POST method delivers a notification from the server to the client. + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Post ${notification_ep} ${VnfIdentifierDeletionNotification} + Log Validate Status code + Output response + Integer response status 204 + +Test a notification end point + log The GET method allows the server to test the notification endpoint + Get ${notification_ep} + Log Validate Status code + Output response + Integer response status 204 + +PUT notification - Method not implemented + log Trying to perform a PUT. This method should not be implemented + Put ${notification_ep} + Log Validate Status code + Output response + Integer response status 405 + +PATCH subscriptions - Method not implemented + log Trying to perform a PATCH. This method should not be implemented + Patch ${notification_ep} + Log Validate Status code + Output response + Integer response status 405 + +DELETE subscriptions - Method not implemented + log Trying to perform a DELETE. This method should not be implemented + Delete ${notification_ep} + Log Validate Status code + Output response + Integer response status 405 \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API_egm/Subscriptions.robot b/SOL003/VNFLifecycleManagement-API_egm/Subscriptions.robot new file mode 100644 index 0000000000000000000000000000000000000000..99f81604c6adb5257cfc125ff8ba2e457b7679af --- /dev/null +++ b/SOL003/VNFLifecycleManagement-API_egm/Subscriptions.robot @@ -0,0 +1,95 @@ +*** Settings *** +Resource variables.txt +Library REST http://${VNFM_HOST}:${VNFM_PORT} +... spec=SOL003-VNFLifecycleManagement-API.yaml + +*** Test Cases *** +Create a new subscription + Log Create VNF instance by POST to ${apiRoot}/${apiName}/${apiVersion}/subscriptions + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Post ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${LccnSubscriptionRequest} + Output response + Integer response status 201 + Log Status code validated + +Create a new Subscription - DUPLICATION + Log Trying to create a subscription with an already created content + Pass Execution If ${NVFM_DUPLICATION} == 0 VNFM is not permitting duplication. Skipping the test + Set Headers {"Accept": "${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${LccnSubscriptionRequest} + Output response + Integer response status 201 + Log Status code validated + +Create a new Subscription - NO-DUPLICATION + Log Trying to create a subscription with an already created content + Pass Execution If ${NVFM_DUPLICATION} == 1 VNFM permits duplication. Skipping the test + Set Headers {"Accept": "${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + POST ${apiRoot}/${apiName}/${apiVersion}/subscriptions ${LccnSubscriptionRequest} + Output response + Integer response status 303 + Log Status code validated + +GET Subscriptions + Log Get the list of active subscriptions + Set Headers {"Accept":"${ACCEPT}"} + Set Headers {"Content-Type": "${CONTENT_TYPE}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization":"${AUTHORIZATION}"} + Log Execute Query and validate response + Get ${apiRoot}/${apiName}/${apiVersion}/subscriptions + Output response + Log Validate Status code + Integer response status 200 + +GET Subscription - Filter + Log Get the list of active subscriptions using a filter + Set Headers {"Accept": "${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${sub_filter} + Integer response status 200 + Log Received a 200 OK as expected + +GET subscriptions - Bad Request Invalid attribute-based filtering parameters + Log Get the list of active subscriptions using an invalid filter + Set Headers {"Accept": "${ACCEPT}"} + Run Keyword If ${AUTH_USAGE} == 1 Set Headers {"Authorization": "${AUTHORIZATION}"} + GET ${apiRoot}/${apiName}/${apiVersion}/subscriptions?${sub_filter_invalid} + Integer response status 400 + Log Received a 400 Bad Request as expected + +PUT subscriptions - Method not implemented + 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":"${AUTHORIZATION}"} + Put ${apiRoot}/${apiName}/${apiVersion}/subscriptions + Log Validate Status code + Output response + Integer response status 405 + +PATCH subscriptions - Method not implemented + 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":"${AUTHORIZATION}"} + Patch ${apiRoot}/${apiName}/${apiVersion}/subscriptions + Log Validate Status code + Output response + Integer response status 405 + +DELETE subscriptions - Method not implemented + log Trying to perform a DELETE. 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":"${AUTHORIZATION}"} + Delete ${apiRoot}/${apiName}/${apiVersion}/subscriptions + Log Validate Status code + Output response + Integer response status 405 + \ No newline at end of file diff --git a/SOL003/VNFLifecycleManagement-API_egm/variables.txt b/SOL003/VNFLifecycleManagement-API_egm/variables.txt index 36aacaed0c14aa6c5f3da072cc21893a1c13fbe5..2c109dad82c8904f007c8cbe3b25d6aef755bb87 100644 --- a/SOL003/VNFLifecycleManagement-API_egm/variables.txt +++ b/SOL003/VNFLifecycleManagement-API_egm/variables.txt @@ -33,4 +33,16 @@ ${Scale_Vnf_to_Level_REQUEST} {} ${Change_Vnf_Flavour_REQUEST} {} ${Terminate_Vnf_REQUEST} {} ${Heal_Vnf_REQUEST} {} -${Operate_Vnf_REQUEST} {} \ No newline at end of file +${Operate_Vnf_REQUEST} {} +${Change_Ext_Vnf_Connectivity_REQUEST} {} +${vnfLcmOpOccId} 6fc3539c-e602-4afa-8e13-962fb5a7d81d +${CancelMode} GRACEFUL +${LccnSubscriptionRequest} {} +${NVFM_DUPLICATION} 0 +${sub_filter} filter +${sub_filter_invalid} filter_invalid +${subscriptionId} 6fc3539c-e602-4afa-8e13-962fb5a7d81f +${notification_ep} notification +${VnfLcmOperationOccurrenceNotification} {} +${VnfIdentifierCreationNotification} {} +${VnfIdentifierDeletionNotification} {} \ No newline at end of file diff --git a/TrackingStatus.txt b/TrackingStatus.txt index 2e6fbeba7697c1fced978c6b7fb7279d89b828ec..5a94c82f7239afe8a71c68771f8ef6db6da65845 100644 --- a/TrackingStatus.txt +++ b/TrackingStatus.txt @@ -26,7 +26,7 @@ SOL003 * TerminateVNFTask ----------------------------> [DONE] * HealVNFTask ----------------------------> [DONE] * OperateVNFTask ----------------------------> [DONE] - * ChangeExternalVNFConnectivityTask ----------------------------> [ONGOING] + * ChangeExternalVNFConnectivityTask ----------------------------> [DONE] * VnfLcmOperationOccurences ----------------------------> [ONGOING] * IndividualVnfLcmOperationOccurence ----------------------------> [ONGOING] * RetryOperationTask ----------------------------> [ONGOING]