Merge "Add orchestration project to SO integration testing repository"
[integration/csit.git] / tests / so / orchestration / resources / aai / service_instance.robot
diff --git a/tests/so/orchestration/resources/aai/service_instance.robot b/tests/so/orchestration/resources/aai/service_instance.robot
new file mode 100644 (file)
index 0000000..bdf4547
--- /dev/null
@@ -0,0 +1,191 @@
+*** Settings ***
+Documentation    Validate A&AI Serivce Instance
+...
+...                  Validate A&AI Serivce Instance
+
+Resource          aai_interface.robot
+Library    Collections
+Library    OperatingSystem
+Library    RequestsLibrary
+Library    JSONUtils
+Library    HttpLibrary.HTTP
+Library    StringTemplater
+Resource          ../json_templater.robot
+Resource          ../aai/aai_interface.robot
+Resource          ../properties/cloudRegion.robot
+*** Variables ***
+${INDEX PATH}     /aai/v15
+${GENERIC_QUERY_PATH}  /search/generic-query?
+${SYSTEM USER}    robot-ete
+${CUSTOMER SPEC PATH}    /business/customers/customer/
+${SERVICE SUBSCRIPTIONS}    /service-subscriptions/service-subscription/
+${SERVICE_INSTANCE_QUERY}    /service-instances?service-instance-name=
+${SERVCE INSTANCE TEMPLATE}    robot/assets/templates/aai/service_subscription.template
+${vnf_orch_update_json}    robot/assets/templates/aai/vnf_orch_update.template
+${GENERIC_VNF_PATH_TEMPLATE}   /network/generic-vnfs/generic-vnf/\${vnf_id}/vf-modules/vf-module/\${vf_module_id}
+${GENERIC_VNF_QUERY_TEMPLATE}   /network/generic-vnfs/generic-vnf/\${vnf_id}/vf-modules/vf-module?vf-module-name=\${vf_module_name}
+${VLB_CLOSED_LOOP_HACK_BODY}    robot/assets/templates/aai/vlb_closed_loop_hack.template
+${ROOT_CLOUD_PATH}     /cloud-infrastructure/cloud-regions/cloud-region
+#*************** Test Case Variables *************
+${VLB_CLOSED_LOOP_DELETE}
+${VLB_CLOSED_LOOP_VNF_ID}
+
+
+*** Keywords ***
+Validate Service Instance
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${service_instance_name}    ${service_type}    ${customer_name}    ${orchestration_status}
+    ${cust_resp}=    Run A&AI Get Request      ${INDEX PATH}/business/customers?subscriber-name=${customer_name}
+       ${resp}=    Run A&AI Get Request      ${INDEX PATH}${CUSTOMER SPEC PATH}${cust_resp.json()['customer'][0]['global-customer-id']}${SERVICE SUBSCRIPTIONS}${service_type}${SERVICE_INSTANCE_QUERY}${service_instance_name}
+    Dictionary Should Contain Value    ${resp.json()['service-instance'][0]}    ${service_instance_name}
+    Dictionary Should Contain Value    ${resp.json()['service-instance'][0]}    ${orchestration_status}
+
+Validate Service Instance By Id
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${service_instance_id}
+    ${resp}=    Run A&AI Get Request      ${INDEX PATH}/nodes/service-instances/service-instance/${service_instance_id}?depth=0&nodes-only
+    Should Be Equal As Strings         ${resp.status_code}     200
+
+Delete Service Instance by Id
+    [Documentation]    Delete  passed service in A&AI
+    [Arguments]    ${service_instance_id}
+    ${resp}=    Run A&AI Get Request      ${INDEX PATH}/nodes/service-instances/service-instance/${service_instance_id}
+       Run Keyword If    '${resp.status_code}' == '200'    Run A&AI Delete Request    ${INDEX PATH}/nodes/service-instances/service-instance/${service_instance_id}    ${resp.json()['resource-version']}
+
+Validate Customer By Id
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${customer_id}    ${status_code}
+    ${cust_resp}=    Run A&AI Get Request      ${INDEX PATH}/business/customers/customer/${customer_id}
+    Should Be Equal As Strings         ${cust_resp.status_code}        ${status_code}
+
+Validate Generic VNF
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${vnf_name}  ${vnf_type}    ${service_instance_id}
+    ${generic_vnf}=    Run A&AI Get Request      ${INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-name=${vnf_name}
+    Dictionary Should Contain Value    ${generic_vnf.json()}    ${vnf_name}
+    ${returned_vnf_type}=    Get From Dictionary    ${generic_vnf.json()}    vnf-type
+    Should Contain     ${returned_vnf_type}    ${vnf_type}
+    ${vnf_id}=    Get From Dictionary    ${generic_vnf.json()}    vnf-id
+    ${generic_vnf}=    Run A&AI Get Request      ${INDEX PATH}/network/generic-vnfs/generic-vnf/${vnf_id}?depth=all
+    [Return]    ${generic_vnf.json()}
+
+Delete Vnf by Id
+    [Documentation]    Delete  passed service in A&AI
+    [Arguments]    ${vnf_id}
+    ${resp}=    Run A&AI Get Request      ${INDEX PATH}/network/generic-vnfs/generic-vnf/${vnf_id}
+    
+       Run Keyword If    '${resp.status_code}'=='200'    Run A&AI Delete Request    ${INDEX PATH}/network/generic-vnfs/generic-vnf/${vnf_id}    ${resp.json()['resource-version']}
+
+Delete Volume Group by Id
+    [Documentation]    Delete  passed service in A&AI
+    [Arguments]    ${volume_group_instance_id}
+    ${resp}=    Run A&AI Get Request      ${INDEX PATH}${ROOT_CLOUD_PATH}/${cloud_owner}/${cloud_region_id}/volume-groups/volume-group/${volume_group_instance_id}
+    
+       Run Keyword If    '${resp.status_code}'=='200'    Run A&AI Delete Request    ${INDEX PATH}${ROOT_CLOUD_PATH}/${cloud_owner}/${cloud_region_id}/volume-groups/volume-group/${volume_group_instance_id}    ${resp.json()['resource-version']}
+
+Validate Tenant By Name
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${tenant_name}    ${cloud_owner}    ${cloud_region}    ${response_code}
+    ${tenants}=    Run A&AI Get Request      ${INDEX PATH}/cloud-infrastructure/cloud-regions/cloud-region/${cloud_owner}/${cloud_region}/tenants?tenant-name=${tenant_name}
+    Should Be Equal As Strings    ${tenants.status_code}    ${response_code}
+    Run Keyword If    '${response_code}'=='200'    Dictionary Should Contain Value     ${tenants.json()['tenant'][0]}    ${tenant_name}
+
+Validate Line of Business
+    [Arguments]    ${vnf_id}    @{Lobs}
+        :FOR    ${ELEMENT}    IN    @{Lobs}
+        \    ${response}     Run A&AI Get Request      ${INDEX PATH}/network/generic-vnfs/generic-vnf/${vnf_id}/related-to/lines-of-business?line-of-business-name=${ELEMENT}
+           \    Should Be Equal As Strings     ${response.status_code}         200
+
+Validate Platform
+    [Arguments]    ${vnf_id}    @{platforms}
+        :FOR    ${platform}    IN    @{platforms}
+        \    ${response}     Run A&AI Get Request      ${INDEX PATH}/network/generic-vnfs/generic-vnf/${vnf_id}/related-to/platforms?platform-name=${platform}
+           \    Should Be Equal As Strings     ${response.status_code}         200
+
+    
+Validate Owning Entity By Name
+    [Arguments]    ${owning_entity_name}
+    ${oe_resp}=    Run A&AI Get Request      ${INDEX PATH}/business/owning-entities?owning-entity-name=${owning_entity_name}
+    Should Be Equal As Strings    ${oe_resp.json()['owning-entity'][0]['owning-entity-name']}    ${owning_entity_name}
+        
+
+
+VLB Closed Loop Hack
+    [Arguments]    ${service}    ${generic_vnf}   ${closedloop_vf_module}
+    Return From Keyword If    '${service}' != 'vLB'
+    ${vnf_id}=     Get From Dictionary    ${generic_vnf}    vnf-id
+    ${vf_modules}=    Get From Dictionary    ${generic_vnf}    vf-modules
+    ${list}=    Get From Dictionary    ${vf_modules}   vf-module
+    ${vfmodule}=    Get From List    ${list}    0
+    ${persona_model_id}=    Get From Dictionary    ${closedloop_vf_module}    invariantUUID
+    ${persona_model_version}=   Get From Dictionary    ${closedloop_vf_module}    version
+    ${dummy}=    Catenate   dummy_${vnf_id}
+    ${dict}=    Create Dictionary   vnf_id=${vnf_id}   vf_module_id=${dummy}   persona_model_id=${persona_model_id}   persona_model_version=${persona_model_version}
+    ${datapath}=    Template String    ${GENERIC_VNF_PATH_TEMPLATE}    ${dict}
+    ${data}=   Fill JSON Template File    ${VLB_CLOSED_LOOP_HACK_BODY}    ${dict}
+       ${put_resp}=    Run A&AI Put Request     ${INDEX PATH}${datapath}   ${data}
+    ${status_string}=    Convert To String    ${put_resp.status_code}
+    Should Match Regexp    ${status_string}    ^(201|412)$
+    Set Test Variable   ${VLB_CLOSED_LOOP_DELETE}    ${datapath}
+    Set Test Variable   ${VLB_CLOSED_LOOP_VNF_ID}    ${vnf_id}
+
+VLB Closed Loop Hack Update
+    [Documentation]   Update the A&AI vDNS scaling vf module to have persona-model-version 1 rather than 1.0
+    [Arguments]   ${stack_name}
+    ${dict}=    Create Dictionary   vnf_id=${VLB_CLOSED_LOOP_VNF_ID}   vf_module_name=${stack_name}
+    ${query}=   Template String   ${GENERIC_VNF_QUERY_TEMPLATE}   ${dict}
+    ${get_resp}=    Run A&AI Get Request     ${INDEX_PATH}${query}
+    ${json}=   Set Variable   ${get_resp.json()}
+    Set to Dictionary    ${json}   persona-model-version   1
+    ${vf_module_id}=   Get From Dictionary   ${json}   vf-module-id
+    Set to Dictionary   ${dict}   vf_module_id=${vf_module_id}
+    ${uri}=   Template String   ${GENERIC_VNF_PATH_TEMPLATE}   ${dict}
+    ${resp}=   Run A&AI Put Request    ${INDEX_PATH}${uri}   ${json}
+    ${get_resp}=    Run A&AI Get Request     ${INDEX_PATH}${query}
+
+Teardown VLB Closed Loop Hack
+    Return From Keyword If    ' ${VLB_CLOSED_LOOP_DELETE}' == ''
+       Delete A&AI Entity    ${VLB_CLOSED_LOOP_DELETE}
+
+Validate VF Module
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${vf_module_name}    ${stack_type}
+       Run Keyword If    '${stack_type}'=='vLB'    Validate vLB Stack    ${vf_module_name}
+       Run Keyword If    '${stack_type}'=='vFW'    Validate Firewall Stack    ${vf_module_name}
+       Run Keyword If    '${stack_type}'=='vVG'    Validate vVG Stack    ${vf_module_name}
+
+*** Keywords ***
+Create AAI Service Instance
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${customer_id}    ${service_type}    ${service_instance_id}    ${service_instance_name}
+    ${json_string}=    Catenate     { "service-type": "VDNS" , "service-subscriptions":[{"service-instance-id":"instanceid123","service-instance-name":"VDNS"}]}
+       ${put_resp}=    Run A&AI Put Request     ${INDEX PATH}${CUSTOMER SPEC PATH}${CUSTOMER ID}${SERVICE SUBSCRIPTIONS}/{service_type}   ${json_string}
+    Should Be Equal As Strings         ${put_resp.status_code}         201
+       [Return]  ${put_resp.status_code}
+
+Validate Service Instance Not Exist
+    [Arguments]    ${service_instance_name}    ${service_type}    ${customer_name}
+    ${cust_resp}=    Run A&AI Get Request      ${INDEX PATH}/business/customers?subscriber-name=${customer_name}
+       ${resp}=    Run A&AI Get Request      ${INDEX PATH}${CUSTOMER SPEC PATH}${cust_resp.json()['customer'][0]['global-customer-id']}${SERVICE SUBSCRIPTIONS}${service_type}${SERVICE_INSTANCE_QUERY}${service_instance_name}
+    Should Be Equal As Strings         ${resp.status_code}     404
+    
+Validate Service Instance Not Exist By Id
+    [Arguments]    ${service_instance_id}
+    ${resp}=    Run A&AI Get Request      ${INDEX PATH}/nodes/service-instances/service-instance/${service_instance_id}?depth=0&nodes-only
+    Should Be Equal As Strings         ${resp.status_code}     404    
+
+Validate Customer Not Exist
+    [Documentation]    Query and Validates A&AI Service Instance
+    [Arguments]    ${customer_name}
+    ${cust_resp}=    Run A&AI Get Request      ${INDEX PATH}/business/customers?subscriber-name=${customer_name}
+    Should Be Equal As Strings    ${cust_resp.status_code}    404
+   
+Validate Owning Entity
+    [Arguments]    ${owning_entity_id}    ${status_code}
+    ${oe_resp}=    Run A&AI Get Request      ${INDEX PATH}/business/owning-entities/owning-entity/${owning_entity_id}
+    Should Be Equal As Strings         ${oe_resp.status_code}  ${status_code}
+
+Validate Project
+    [Arguments]    ${project_name}    ${status_code}
+    ${proj_resp}=    Run A&AI Get Request      ${INDEX PATH}/business/projects/project/${project_name}
+    Should Be Equal As Strings         ${proj_resp.status_code}        ${status_code}