Merge "Fix vFW Closed Loop robot test case"
[testsuite.git] / robot / resources / heatbridge.robot
1 *** Settings ***
2 Library     HeatBridge
3 Library     Collections
4 Library     StringTemplater
5 Library     OperatingSystem
6 Library     UUID
7
8 Resource    openstack/keystone_interface.robot
9 Resource    openstack/heat_interface.robot
10 Resource    openstack/nova_interface.robot
11 Resource    openstack/neutron_interface.robot
12 Resource    aai/aai_interface.robot
13
14 *** Variables ***
15 ${MULTIPART_PATH}  /bulkadd
16 ${NAMED_QUERY_PATH}  /aai/search/named-query
17 ${NAMED_QUERY_TEMPLATE}    robot/assets/templates/aai/named_query.template
18
19 ${BASE_URI}   /cloud-infrastructure/cloud-regions/cloud-region/\${cloud}/\${region}
20 ${IMAGE_URI}   ${BASE_URI}/images/image/\${image_id}
21 ${FLAVOR_URI}   ${BASE_URI}/flavors/flavor/\${flavor}
22 ${VSERVER_URI}   ${BASE_URI}/tenants/tenant/\${tenant}/vservers/vserver/\${vserver_id}
23 ${L_INTERFACE_URI}   ${VSERVER_URI}/l-interfaces/l-interface/\${linterface_id}
24
25 #******************** Test Case Variables ****************
26 ${REVERSE_HEATBRIDGE}
27
28
29 *** Keywords ***
30 Execute Heatbridge
31     [Documentation]   Run the Heatbridge against the stack to generate the bulkadd message
32     ...    Execute the build add
33     ...    Validate the add results by running the named query
34     [Arguments]    ${stack_name}    ${service_instance_id}    ${service}
35     Return From Keyword If    '${service}' == 'vVG'
36     Run Openstack Auth Request    auth
37     ${stack_info}=    Wait for Stack to Be Deployed    auth    ${stack_name}
38     ${stack_id}=    Get From Dictionary    ${stack_info}    id
39     ${tenant_id}=   Get From Dictionary    ${stack_info}    OS::project_id
40     ${vnf_id}=    Get From Dictionary    ${stack_info}    vnf_id
41     ${url}   ${path}=   Get Keystone Url And Path
42     ${openstack_identity_url}=    Catenate    ${url}${path}
43     ${region}=   Get Openstack Region
44     ${user}   ${pass}=   Get Openstack Credentials
45     Init Bridge    ${openstack_identity_url}    ${user}    ${pass}    ${tenant_id}    ${region}   ${GLOBAL_AAI_CLOUD_OWNER}
46     ${request}=    Bridge Data    ${stack_id}
47     Log    ${request}
48     ${resp}=    Run A&AI Put Request    ${VERSIONED_INDEX_PATH}${MULTIPART_PATH}    ${request}
49     ${status_string}=    Convert To String    ${resp.status_code}
50     Should Match Regexp    ${status_string}     ^(201|200)$
51     ${reverse_heatbridge}=   Generate Reverse Heatbridge From Stack Info   ${stack_info}
52     Set Test Variable   ${REVERSE_HEATBRIDGE}   ${reverse_heatbridge}
53     Run Validation Query    ${stack_info}    ${service}
54
55
56 Run Validation Query
57     [Documentation]    Run A&AI query to validate the bulk add
58     [Arguments]    ${stack_info}    ${service}
59     Return from Keyword If    '${service}' == ''
60     ${server_name_parameter}=    Get From Dictionary    ${GLOBAL_VALIDATE_NAME_MAPPING}    ${service}
61     ${vserver_name}=    Get From Dictionary    ${stack_info}   ${server_name_parameter}
62     Run Vserver Query   ${vserver_name}
63
64 Run Vserver Query
65     [Documentation]    Run A&AI query to validate the bulk add
66     [Arguments]    ${vserver_name}
67     ${dict}=    Create Dictionary    vserver_name=${vserver_name}
68     ${request}=    OperatingSystem.Get File    ${NAMED_QUERY_TEMPLATE}
69     ${request}=    Template String    ${request}    ${dict}
70     ${resp}=    Run A&AI Post Request    ${NAMED_QUERY_PATH}    ${request}
71     Should Be Equal As Strings    ${resp.status_code}    200
72
73
74 Execute Reverse Heatbridge
75     [Documentation]   VID has already torn down the stack, reverse HB
76     Return From Keyword If   len(${REVERSE_HEATBRIDGE}) == 0
77     :for   ${uri}    in   @{REVERSE_HEATBRIDGE}
78     \    Run Keyword And Ignore Error    Delete A&AI Entity   ${uri}
79
80 Generate Reverse Heatbridge From Stack Name
81     [Arguments]   ${stack_name}
82     Run Openstack Auth Request    auth
83     ${stack_info}=    Wait for Stack to Be Deployed    auth    ${stack_name}   timeout=10s
84     ${reverse_heatbridge}=    Generate Reverse Heatbridge From Stack Info   ${stack_info}
85     [Return]    ${reverse_heatbridge}
86
87 Generate Reverse Heatbridge From Stack Info
88     [Arguments]   ${stack_info}
89     ${reverse_heatbridge}=    Create List
90     ${stack_name}=    Get From Dictionary    ${stack_info}    name
91     ${stack_id}=    Get From Dictionary    ${stack_info}    id
92     ${tenant_id}=   Get From Dictionary    ${stack_info}    OS::project_id
93     ${region}=   Get Openstack Region
94     ${keys}=    Create Dictionary   region=${region}   cloud=${GLOBAL_AAI_CLOUD_OWNER}   tenant=${tenant_id}
95     ${stack_resources}=    Get Stack Resources    auth    ${stack_name}    ${stack_id}
96     ${resource_list}=    Get From Dictionary    ${stack_resources}    resources
97     :FOR   ${resource}    in    @{resource_list}
98     \    Log     ${resource}
99     \    Run Keyword If    '${resource['resource_type']}' == 'OS::Neutron::Port'    Generate Linterface Uri    auth    ${resource['physical_resource_id']}   ${reverse_heatbridge}   ${keys}
100     :FOR   ${resource}    in    @{resource_list}
101     \    Log     ${resource}
102     \    Run Keyword If    '${resource['resource_type']}' == 'OS::Nova::Server'    Generate Vserver Uri    auth    ${resource['physical_resource_id']}  ${reverse_heatbridge}   ${keys}   ${resource_list}
103     [Return]    ${reverse_heatbridge}
104
105 Generate Vserver Uri
106     [Documentation]   Run teardown against the server to generate a message that removes it
107     [Arguments]    ${alias}    ${port_id}   ${reverse_heatbridge}   ${keys}   ${resource_list}
108     ${resp}=    Get Openstack Server By Id   ${alias}     ${port_id}
109     Return From Keyword If   '${resp.status_code}' != '200'
110     ${info}=   Set Variable   ${resp.json()}
111     Set To Dictionary   ${keys}   vserver_id=${info['server']['id']}
112     Set To Dictionary   ${keys}   flavor=${info['server']['flavor']['id']}
113     Set To Dictionary   ${keys}   image_id=${info['server']['image']['id']}
114     ${uri}=   Template String    ${VSERVER_URI}    ${keys}
115     Append To List  ${reverse_heatbridge}   ${uri}
116     ${uri}=   Template String    ${FLAVOR_URI}    ${keys}
117     Append To List  ${reverse_heatbridge}   ${uri}
118     ${uri}=   Template String    ${IMAGE_URI}    ${keys}
119     Append To List  ${reverse_heatbridge}   ${uri}
120
121 Generate Linterface Uri
122     [Documentation]   Run teardown against the server to generate a message that removes it
123     [Arguments]    ${alias}    ${server_id}   ${reverse_heatbridge}   ${keys}
124     ${resp}=    Get Openstack Port By Id   ${alias}     ${server_id}
125     Return From Keyword If   '${resp.status_code}' != '200'
126     ${info}=   Set Variable   ${resp.json()}
127     Set To Dictionary   ${keys}   vserver_id=${info['port']['device_id']}
128     Set To Dictionary   ${keys}   linterface_id=${info['port']['name']}
129     ${uri}=   Template String    ${L_INTERFACE_URI}    ${keys}
130     Append To List  ${reverse_heatbridge}   ${uri}
131