aboutsummaryrefslogtreecommitdiffstats
path: root/tests/so/orchestration/resources/aai/service_instance.robot
blob: bdf454758d57b3ee79c57a838d3b45ec494d3e8d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
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}