Commit 19cf3b09 authored by Giacomo Bernini's avatar Giacomo Bernini
Browse files

Merge branch '2.7.1-dev-virtualised-resource-quota-notification' into '2.7.1-dev'

SOL003 Virtualised Resource Quota - Implementation of missing notification test in v2.7.1

See merge request !170
parents 3a2f3cf9 3c9a10ec
Loading
Loading
Loading
Loading
+48 −68
Original line number Diff line number Diff line
*** Settings ***
Resource    environment/variables.txt 
Resource    VRQANOperationKeywords.robot 
Suite Setup    Create Sessions
Suite Teardown    Terminate All Processes    kill=true
Library    MockServerLibrary
Library    Process
Library    OperatingSystem

*** Variables ***

Library    Collections

*** Test Cases ***
Deliver a notification - Vr Quota Availibility
    [Documentation]    Test ID: 11.4.4.1
    ...    Test title: Deliver a notification - Vr Quota Availibility
    ...    Test objective: The objective is to notify related to the availability of the virtualised resources quota.
    ...    Pre-conditions: The VNF has subscribed to the Vr Quota Availibility resource
    ...    Reference: Clause 11.4.4 - ETSI GS NFV-SOL 003 [1] v2.7.1
Virtualised Resource Quota Available Notification
    [Documentation]    Test ID: 7.3.7.5.1
    ...    Test title: Virtualised Resource Quota Available Notification
    ...    Test objective: The objective is to test the dispatch of Virtualised Resource Quota Available Notification, 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 Virtualised Resource Quota Available Notification is available in the VNFM.
    ...    Reference: Clause 11.4.4.3.1 - ETSI GS NFV-SOL 003 [1] v2.7.1
    ...    Config ID: Config_prod_VNFM
    ...    Applicability: 
    ...    Post-Conditions:  
    log    The POST method delivers a notification from the server to the client.
    ${json}=	Get File	schemas/VrQuotaAvailNotification.schema.json
    ${BODY}=	evaluate	json.loads('''${json}''')	json
    Log  Creating mock request and response to handle Vr Quota AvailibilityNotification
    &{req}=  Create Mock Request Matcher	POST  ${callback_endpoint}  body_type="JSON_SCHEMA"    body=${BODY}
    &{rsp}=  Create Mock Response	headers="Content-Type: application/json"  status_code=204
    Create Mock Expectation  ${req}  ${rsp}
    Sleep  ${sleep_interval}
    Log  Verifying results
    Verify Mock Expectation  ${req}
    Log  Cleaning the endpoint
    Clear Requests  ${callback_endpoint}
    ...    Applicability: none
    ...    Post-Conditions: none 
    Trigger a dispatch of virtualised resource quota available notification (external action) 
    Check Virtualised Resource Quota Available Notification Http POST Request Body Json Schema Is    VrQuotaAvailNotification
    Check Virtualised Resource Quota Available Notification Http POST Request Body notificationType attribute Is    VrQuotaAvailNotification
   
Test a notification end point
    log    The GET method allows the server to test the notification endpoint
    &{req}=  Create Mock Request Matcher	GET  ${callback_endpoint}    
    &{rsp}=  Create Mock Response	headers="Content-Type: application/json"  status_code=204
    Create Mock Expectation  ${req}  ${rsp}
    Sleep  ${sleep_interval}
    Verify Mock Expectation  ${req}
    Clear Requests  ${callback_endpoint}
*** Keywords ***

PUT notification - Method not implemented
    Log  PUT Method not implemented
    &{req}=  Create Mock Request Matcher	PUT  ${callback_endpoint}
    &{rsp}=  Create Mock Response  status_code=405
    Create Mock Expectation  ${req}  ${rsp}
    Sleep  ${sleep_interval}
    Log  Verifying results
    Verify Mock Expectation  ${req}
    Log  Cleaning the endpoint
    Clear Requests  ${callback_endpoint}
Trigger a dispatch of virtualised resource quota available notification (external action) 
    #do nothing
    Log    do nothing  
    
PATCH subscriptions - Method not implemented
    Log  PATCH Method not implemented
    &{req}=  Create Mock Request Matcher	PATCH  ${callback_endpoint}
    &{rsp}=  Create Mock Response  status_code=405
    Create Mock Expectation  ${req}  ${rsp}
    Sleep  ${sleep_interval}
    Log  Verifying results
    Verify Mock Expectation  ${req}
    Log  Cleaning the endpoint
    Clear Requests  ${callback_endpoint}
Check Virtualised Resource Quota Available Notification Http POST Request Body Json Schema Is  
    [Arguments]    ${element}
    ${schema}=	Get File	schemas/${element}.schema.json
    Configure Notification Forward    ${schema}    ${callback_endpoint}    ${callback_endpoint_fwd}

DELETE subscriptions - Method not implemented
    Log  DELETE Method not implemented
    &{req}=  Create Mock Request Matcher	DELETE  ${callback_endpoint}
    &{rsp}=  Create Mock Response  status_code=405
    Create Mock Expectation  ${req}  ${rsp}
    Sleep  ${sleep_interval}
    Log  Verifying results
    Verify Mock Expectation  ${req}
    Log  Cleaning the endpoint
Check Virtualised Resource Quota Available Notification Http POST Request Body notificationType attribute Is
    [Arguments]    ${type}
    Configure Virtual Quota Available Notification Handler    ${callback_endpoint_fwd}    ${type}
    Wait Until Keyword Succeeds    2 min   10 sec   Verify Mock Expectation    ${notification_request}
    Clear Requests    ${callback_endpoint}
    Clear Requests    ${callback_endpoint_fwd}
    
Configure Virtual Quota Available Notification Handler
    [Arguments]    ${endpoint}    ${type}
    ${json}=    evaluate    {}
    set to dictionary   ${json}    notificationType    ${type}
    ${BODY}=    evaluate    json.dumps(${json})    json
    Log  Creating mock request and response to handle status notification
    &{req}=  Create Mock Request Matcher	POST  ${endpoint}  body_type="JSON"    body=${BODY}
    Set Global Variable    ${req}    ${notification_request}
    &{notification_response}=  Create Mock Response    status_code=204
    Create Mock Expectation  ${notification_request}  ${notification_response}
    
Configure Notification Forward
    [Arguments]    ${schema}    ${endpoint}    ${endpoint_fwd}    
    Log  Creating mock Http POST forward to handle ${schema}
    &{notification_tmp}=  Create Mock Request Matcher	POST  ${endpoint}  body_type="JSON_SCHEMA"    body=${schema}
    &{notification_fwd}=  Create Mock Http Forward	${endpoint_fwd}
    Create Mock Expectation With Http Forward  ${notification_tmp}  ${notification_fwd}

*** Keywords ***
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}
+3 −0
Original line number Diff line number Diff line
@@ -15,11 +15,14 @@ ${sub_filter} filter
${sub_filter_invalid}    filter_invalid

${callback_endpoint}    /notification
${callback_endpoint_fwd}    /endpoint/check
${callback_subscribe}    /subscribe
${callback_port}    9091
${callback_uri}     http://localhost
${sleep_interval}    20s

${notification_request}    []
${notification_response}    []

${apiRoot}        /
${apiName}        vrqan
+0 −1
Original line number Diff line number Diff line
 
{{
	"id":"",
	"notificationType":"VrQuotaAvailNotification",
+8 −0
Original line number Diff line number Diff line
{
	"id":"",
	"notificationType":"VrQuotaAvailNotification",
	"subscriptionId": "",
	"timeStamp":"",
	"resourceGroupId":"",
	"_links": ""
}
 No newline at end of file
+83 −1
Original line number Diff line number Diff line
{  "description": "This type represents a subscription related to notifications related to the availability of the virtualised resources quotas.\n",  "type": "object",  "required": [    "id",    "callbackUri",    "_links"  ],  "properties": {    "id": {      "description": "An identifier with the intention of being globally unique.\n",      "type": "string"    },    "filter": {      "description": "This type represents a subscription filter related to notifications about the availability of the virtualised resources quotas. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",      "type": "object",      "properties": {        "vimIds": {          "description": "Match VIMs that were created the quota for a consumer of the virtualised resources. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable.\n",          "type": "array",          "items": {            "description": "An identifier with the intention of being globally unique.\n",            "type": "string"          }        },        "resourceProviderIds": {          "description": "Match the entities responsible for the management of the virtualised resources that were allocated by the NFVO. This attribute shall only be supported when VNF-related Resource Management in indirect mode is applicable. The identification scheme is outside the scope of the present document.\n",          "type": "array",          "items": {            "description": "An identifier with the intention of being globally unique.\n",            "type": "string"          }        },        "resourceTypes": {          "description": "Match particular resource types.\n",          "type": "array",          "items": {            "type": "string",            "enum": [              "COMPUTE",              "STORAGE",              "NETWORK"            ]          }        },        "resourceGroupIds": {          "description": "Match the \"infrastructure resource groups\" that are logical groupings of the virtualised resources assigned to a tenant within an infrastructure Domain.\n",          "type": "array",          "items": {            "description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",            "type": "string"          }        }      }    },    "callbackUri": {      "description": "String formatted according to IETF RFC 3986.\n",      "type": "string"    },    "_links": {      "description": "Links for this resource\n",      "type": "object",      "required": [        "self"      ],      "properties": {        "self": {          "description": "This type represents a link to a resource.\n",          "type": "object",          "required": [            "href"          ],          "properties": {            "href": {              "description": "URI of the referenced resource.\n",              "type": "string",              "format": "url"            }          }        }      }    }  }}
 No newline at end of file
{
	"description": "This type represents a subscription related to notifications related to the availability of the virtualised resources quotas.\n",
	"type": "object",
	"required": [
		"id",
		"callbackUri",
		"_links"
	],
	"properties": {
		"id": {
			"description": "An identifier with the intention of being globally unique.\n",
			"type": "string"
		},
		"filter": {
			"description": "This type represents a subscription filter related to notifications about the availability of the virtualised resources quotas. At a particular nesting level in the filter structure, the following applies: All attributes shall match in order for the filter to match (logical \"and\" between different filter attributes). If an attribute is an array, the attribute shall match if at least one of the values in the array matches (logical \"or\" between the values of one filter attribute).\n",
			"type": "object",
			"properties": {
				"vimIds": {
					"description": "Match VIMs that were created the quota for a consumer of the virtualised resources. This attribute shall only be supported when VNF-related Resource Management in direct mode is applicable.\n",
					"type": "array",
					"items": {
						"description": "An identifier with the intention of being globally unique.\n",
						"type": "string"
					}
				},
				"resourceProviderIds": {
					"description": "Match the entities responsible for the management of the virtualised resources that were allocated by the NFVO. This attribute shall only be supported when VNF-related Resource Management in indirect mode is applicable. The identification scheme is outside the scope of the present document.\n",
					"type": "array",
					"items": {
						"description": "An identifier with the intention of being globally unique.\n",
						"type": "string"
					}
				},
				"resourceTypes": {
					"description": "Match particular resource types.\n",
					"type": "array",
					"items": {
						"type": "string",
						"enum": [
							"COMPUTE",
							"STORAGE",
							"NETWORK"
						]
					}
				},
				"resourceGroupIds": {
					"description": "Match the \"infrastructure resource groups\" that are logical groupings of the virtualised resources assigned to a tenant within an infrastructure Domain.\n",
					"type": "array",
					"items": {
						"description": "An identifier maintained by the VIM or other resource provider. It is expected to be unique within the VIM instance.\n",
						"type": "string"
					}
				}
			}
		},
		"callbackUri": {
			"description": "String formatted according to IETF RFC 3986.\n",
			"type": "string"
		},
		"_links": {
			"description": "Links for this resource\n",
			"type": "object",
			"required": [
				"self"
			],
			"properties": {
				"self": {
					"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"
						}
					}
				}
			}
		}
	}
}
 No newline at end of file
Loading