diff options
Diffstat (limited to 'cmso-robot/robot/resources/test_templates/change_management.robot')
-rw-r--r-- | cmso-robot/robot/resources/test_templates/change_management.robot | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/cmso-robot/robot/resources/test_templates/change_management.robot b/cmso-robot/robot/resources/test_templates/change_management.robot new file mode 100644 index 0000000..0584cce --- /dev/null +++ b/cmso-robot/robot/resources/test_templates/change_management.robot @@ -0,0 +1,166 @@ +*** Settings *** +Documentation Creates VID VNF Instance +Library StringTemplater +Library String +Library OperatingSystem +Library UUID +Library Collections +Library HttpLibrary.HTTP +Library DateTime +Resource ../scheduler_common.robot +Resource ../json_templater.robot +Resource ../files.robot +Resource ../scheduler_requests/create_schedule.robot +Resource ../scheduler_requests/approval_requests.robot +*** Variables **** +#Variable can only be assigned String variables initially +${status_list}= +${expected_status_list_immediate}= "Scheduled","Notifications Initiated" +${expected_status_list}= "Pending Schedule","Pending Approval","Scheduled","Notifications Initiated","Optimization in Progress" +*** Keywords *** +#GENERAL NOTES about Robot Framework +# Keywords are effectively equivalent to functions/methods +# ${} denotes a scalar variable @{} denotes a list variable and &{} denotes a Dictionary +# Only scalar variables should be passed to a function. Even if your function calls for a list it is easier to pass the list in as a scalar ${} +# To do this simply declare your non-scalar normally (@{}&{}), then when passing the non-scalar into a function pass it as a ${} +# +Change Management Template + [Arguments] ${request_file} ${expected_status_code} ${template_folder} + ${uuid}= Generate UUID + ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} #Sends the POST request to create schedule. Result stored in ${resp} resp is an object that comes from the RequestLibrary + Wait Until Keyword Succeeds 120s 5s Wait For Pending Approval ${uuid} #Runs Wait For Pending Approval every 5s for 120s or until it passes + Should Be Equal as Strings ${resp.status_code} ${expected_status_code} #This will fail if an unexpected result is received from Scheduler + Send Tier2 Approval ${uuid} jf9860 Accepted + ${resp}= Get Change Management auth schedules/${uuid} #GETs the schedule from Scheduler. The result is stored in $resp + Wait Until Keyword Succeeds 120s 5s Wait For All VNFs Reach Status Completed ${uuid} #Makes sure VNF(s) is(are) completed in the schedule + Wait Until Keyword Succeeds 120s 5s Wait for Schedule to Complete Completed ${uuid} #Makes sure Schedule is marked completed + ${reps}= Delete Change Management auth schedules/${uuid} #sends DELETE request to scheduler this may have to be changed for 1802 US to change Delete Schedule to Cancel Schedule + +Change Management Rejection Template + [Arguments] ${request_file} ${template_folder} + ${uuid}= Generate UUID + ${expected_status_code}= Convert to String 202 #Variables in keywords section have to be assigned keywords. So ${expected_status_code}= 202 + ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} + Wait Until Keyword Succeeds 120s 5s Wait For Pending Approval ${uuid} + Should Be Equal as Strings ${resp.status_code} ${expected_status_code} + Send Tier2 Approval ${uuid} jf9860 Rejected #Sends and checks Approval POST request + +Change Management Failure Template + [Documentation] Sends a post request expecting a failure. expected_status_code should be whatever code is expected for this call + [Arguments] ${request_file} ${expected_status_code} ${template_folder} + ${uuid}= Generate UUID + ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} + Should Be Equal as Strings ${resp.status_code} ${expected_status_code} + Return from Keyword If '${resp.status_code}' == '202' + #List of possible reasons that the request should fail - we should look for exact message..... + @{status_list}= Create List Scheduler.INVALID_ATTRIBUTE Scheduler.MISSING_REQUIRED_ATTRIBUTE Scheduler.NODE_LIST_CONTAINS_EMTPY_NODE Scheduler.INVALID_CHANGE_WINDOW + Validate Json Error ${resp.json()} ${status_list} + +Change Management Immediate Template + [Arguments] ${request_file} ${expected_status_code} ${template_folder} + ${uuid}= Generate UUID + ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} #Immediate schedules do not need approval so there is no wait for pending approval or send approval + Should Be Equal as Strings ${resp.status_code} ${expected_status_code} + Wait Until Keyword Succeeds 120s 5s Wait For All VNFs Reach Status Completed ${uuid} + Wait Until Keyword Succeeds 120s 5s Wait for Schedule to Complete Completed ${uuid} + ${reps}= Delete Change Management auth schedules/${uuid} +Change Management Already Exists Immediate Template + [Arguments] ${request_file} ${template_folder} + ${uuid}= Convert to String 46969fb7-0d4c-4e78-80ca-e20759628be5 #This value was taken from DEV env Scheduler DB. To actually automate may want to make SQL query Keyword to get an existing scheduleId + ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} + Should Be Equal as Strings ${resp.status_code} 409 +Record Status Immediate Template + [Arguments] ${request_file} ${template_folder} + ${uuid}= Generate UUID + ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} + Set Global Variable ${status_list} ${EMPTY} #$EMPTY is a empty string variable defined by ROBOT. This makes sure the global variable is cleared each run + Wait Until Keyword Succeeds 120s 5s Add to Status List Completed ${uuid} + ${reps}= Delete Change Management auth schedules/${uuid} + Compare Status List ${expected_status_list_immediate} ${status_list} + Log ${status_list} +Record Status Template + [Documentation] This test checks statuses for future schedules. It tends to fail due to scheduled status being missed. + [Arguments] ${request_file} ${template_folder} + ${uuid}= Generate UUID + ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} + Set Global Variable ${status_list} ${EMPTY} + Wait Until Keyword Succeeds 120s 5s Add to Status List Pending Approval ${uuid} + Send Tier2 Approval ${uuid} jf9860 Accepted + ${resp}= Get Change Management auth schedules/${uuid} + Wait Until Keyword Succeeds 300s 5s Wait For All VNFs Reach Status and Add to Status Completed ${uuid} + ${reps}= Delete Change Management auth schedules/${uuid} + Compare Status List ${expected_status_list} ${status_list} + Log ${status_list} +#Check Status Template +# [Arguments] ${request_file} ${template_folder} +# ${uuid}= Generate UUID +# ${resp}= Create Schedule ${uuid} ${request_file} ${template_folder} +# Check Schedule Status Pending Schedule ${uuid} + +Get Schedule Test Template + [Documentation] This function reads scheduleIds and the expected values from a text file (see robot/assets/get_schedule_UUIDs.txt for the format) then runs a get on them to confirm the GET schedule functionality #this could be enhanced with SQL query to db + [Arguments] ${existing_uuid_file} + ${uuid_file}= OperatingSystem.Get File ${existing_uuid_file} #this file works with the dev server as of 11/9/2017 + @{file_lines}= Split to Lines ${uuid_file} + &{uuid_dictionary}= Create Dictionary + :For ${line} in @{file_lines} + \ @{line_array}= Split String ${line} + \ log ${line_array[1]} + \ Set To Dictionary ${uuid_dictionary} @{line_array}[0] @{line_array}[1] #You can pass singular list items as scalar variables + \ + Log ${uuid_dictionary} + @{resp_list}= Create List + :For ${uuid} in @{uuid_dictionary.keys()} + \ ${resp}= Get Change Management auth schedules/${uuid} + \ ${actual_status}= Get from dictionary ${uuid_dictionary} ${uuid} + \ Should be equal as Strings ${actual_status} ${resp.status_code} + \ Run Keyword If ${resp.status_code} == 200 Dictionary should contain key ${resp.json()} status ELSE Dictionary Should Contain Key ${resp.json()['requestError']} messageId #${resp.json()['requestError']} this is a scalar reference to a singular item from a dictionary. + \ Append to List ${resp_list} ${resp.json()} + Log ${resp_list} +Wait For All VNFs Reach Status + [Documentation] Checks the status of the VNFs in a schedule. + [Arguments] ${status} ${uuid} + ${resp}= Get Change Management auth schedules/scheduleDetails?request.scheduleId=${uuid} + : for ${vnf} in @{resp.json()} + \ Dictionary Should Contain Item ${vnf} status Completed +Wait For All VNFs Reach Status and Add to Status + [Documentation] This records the status of the vnf in the global status list + [Arguments] ${status} ${uuid} + ${resp}= Get Change Management auth schedules/scheduleDetails?request.scheduleId=${uuid} + : for ${vnf} in @{resp.json()} + \ Dictionary Should Contain Item ${vnf} status Completed + Add to Status List Completed ${uuid} #This only runs if there are no failures in Dictionary should Contain Item for loop previously +Wait for Schedule to Complete + [Documentation] This is used in wait for keyword to succeed generally it checks if the status of the schedule returned by a GET request is Complete + [Arguments] ${status} ${uuid} + ${resp}= Get Change Management auth schedules/${uuid} + Dictionary Should Contain Item ${resp.json()} status Completed +#Check Schedule Status +# [Arguments] ${status} ${uuid} +# ${resp}= Get Change Management auth schedules/${uuid} +# Dictionary Should Contain Item ${resp.json()} status ${status} +Add To Status List + [Documentation] Takes List and Schedule ID and changes global list of Statuses #A global list was used because Wait for Keyword to Succeed only seems to return pass or fail + [Arguments] ${end_status} ${uuid} + ${resp}= Get Change Management auth schedules/${uuid} + ${json}= Stringify Json ${resp.json()} + ${status}= Get Json Value ${json} /status + ${temp_list}= Catenate ${status_list} ${status}, + ${temp_list}= Replace String ${temp_list} ${SPACE}" ${EMPTY}" + Set Global Variable ${status_list} ${temp_list} + Should Contain ${status} ${end_status} +Compare Status List + [Arguments] ${expected} ${actual} + @{expected_list}= Split String ${expected} , + @{actual_list}= Split String ${actual} , + :For ${current} in @{expected_list} + \ Should Contain ${actual_list} ${current} + +Change Management DB Failover Template + [Arguments] ${request_file} ${template_folder} ${uuid1} ${uuid2} + Set Global Variable ${NODES} ${uuid1} + Run Keyword If '${uuid2}' != 'None' Delete Change Management auth schedules/${uuid2} #Sends and checks Approval POST request + ${expected_status_code}= Convert to String 202 #Variables in keywords section have to be assigned keywords. So ${expected_status_code}= 202 + ${resp}= Create Schedule ${uuid1} ${request_file} ${template_folder} + Wait Until Keyword Succeeds 120s 5s Wait For Pending Approval ${uuid1} Optimization Failed + Should Be Equal as Strings ${resp.status_code} ${expected_status_code} |