Populate VID owning entity fields
[testsuite.git] / robot / resources / demo_preload.robot
1 *** Settings ***
2 Documentation     This test template encapsulates the VNF Orchestration use case.
3
4 Resource        test_templates/model_test_template.robot
5 Resource        test_templates/vnf_orchestration_test_template.robot
6 Resource        asdc_interface.robot
7 Resource        vid/vid_interface.robot
8
9 Library         UUID
10 Library         Collections
11 Library         OperatingSystem
12 Library         HttpLibrary.HTTP
13 Library         ExtendedSelenium2Library
14 Library         RequestsLibrary
15
16 *** Variables ***
17
18 ${ADD_DEMO_CUSTOMER_BODY}   robot/assets/templates/aai/add_demo_customer.template
19 ${AAI_INDEX_PATH}     /aai/v8
20 ${VF_MODULES_NAME}     _Demo_VFModules.json
21 ${FILE_CACHE}    /share/
22 ${DEMO_PREFIX}   demo
23
24
25 *** Keywords ***
26 Load Customer And Models
27     [Documentation]   Use openECOMP to Orchestrate a service.
28     [Arguments]    ${customer_name}
29     Load OwningEntity "lineOfBusiness" ${customer_name}
30     Load OwningEntity "platform" ${customer_name}
31     Load OwningEntity "project" ${customer_name}
32     Load OwningEntity "owningEntity" ${customer_name}
33     Load Customer  ${customer_name}
34     Load Models  ${customer_name}
35
36 Load OwningEntity
37     [Documentation]   Use openECOMP to Orchestrate a service.
38     [Arguments]    ${parameter}   ${name}
39     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json
40     ${data_path} = ${VID_ENDPOINT}${VID_ENV}/maintenance/category_parameter/${parameter}
41     ${vid_data} = '{"options":["${name}"]}'
42     ${resp}=    Post Request    vid     ${data_path}  data=${vid_data}    headers=${headers}
43         
44 Load Customer
45     [Documentation]   Use openECOMP to Orchestrate a service.
46     [Arguments]    ${customer_name}
47     Setup Orchestrate VNF   ${GLOBAL_AAI_CLOUD_OWNER}   SharedNode    OwnerType    v1    CloudZone
48     Set Test Variable    ${CUSTOMER_NAME}    ${customer_name}
49     ${region}=   Get Openstack Region
50     Create Customer For VNF Demo    ${CUSTOMER_NAME}    ${CUSTOMER_NAME}    INFRA    ${GLOBAL_AAI_CLOUD_OWNER}    ${region}   ${TENANT_ID}
51
52 Load Models
53     [Documentation]   Use openECOMP to Orchestrate a service.
54     [Arguments]    ${customer_name}
55     Set Test Variable    ${CUSTOMER_NAME}    ${customer_name}
56     ${status}   ${value}=   Run Keyword And Ignore Error   Distribute Model   vFWCL   ${DEMO_PREFIX}VFWCL
57     ${status}   ${value}=   Run Keyword And Ignore Error   Distribute Model   vLB   ${DEMO_PREFIX}VLB
58     ${status}   ${value}=   Run Keyword And Ignore Error   Distribute Model   vCPE   ${DEMO_PREFIX}VCPE
59     ##${status}   ${value}=   Run Keyword And Ignore Error   Distribute Model   vIMS   ${DEMO_PREFIX}VIMS
60
61 Distribute Model
62     [Arguments]   ${service}   ${modelName}
63     ${service_model_type}     ${vnf_type}    ${vf_modules}=   Model Distribution For Directory    ${service}   ${modelName}
64
65 Create Customer For VNF Demo
66     [Documentation]    Create demo customer for the demo
67     [Arguments]    ${customer_name}   ${customer_id}   ${customer_type}    ${clouder_owner}    ${cloud_region_id}    ${tenant_id}
68     Create Service If Not Exists    vFWCL
69     Create Service If Not Exists    vLB
70     Create Service If Not Exists    vCPE
71     Create Service If Not Exists    vIMS
72     ${data_template}=    OperatingSystem.Get File    ${ADD_DEMO_CUSTOMER_BODY}
73     ${arguments}=    Create Dictionary    subscriber_name=${customer_name}    global_customer_id=${customer_id}    subscriber_type=${customer_type}     cloud_owner=${clouder_owner}  cloud_region_id=${cloud_region_id}    tenant_id=${tenant_id}
74     Set To Dictionary   ${arguments}       service1=vFWCL       service2=vLB   service3=vCPE   service4=vIMS
75     ${data}=    Fill JSON Template    ${data_template}    ${arguments}
76     ${put_resp}=    Run A&AI Put Request     ${INDEX PATH}${ROOT_CUSTOMER_PATH}${customer_id}    ${data}
77     ${status_string}=    Convert To String    ${put_resp.status_code}
78     Should Match Regexp    ${status_string}    ^(200|201|412)$
79
80 Preload User Model
81     [Documentation]   Preload the demo data for the passed VNF with the passed module name
82     [Arguments]   ${vnf_name}   ${vf_module_name}
83     # Go to A&AI and get information about the VNF we need to preload
84     ${status}  ${generic_vnf}=   Run Keyword And Ignore Error   Get Service Instance    ${vnf_name}
85     Run Keyword If   '${status}' == 'FAIL'   FAIL   VNF Name: ${vnf_name} is not found.
86     ${vnf_type}=   Set Variable   ${generic_vnf['vnf-type']}
87     ${relationships}=   Set Variable   ${generic_vnf['relationship-list']['relationship']}
88     ${relationship_data}=    Get Relationship Data   ${relationships}
89     ${customer_id}=   Catenate
90     :for    ${r}   in   @{relationship_data}
91     \   ${service}=   Set Variable If    '${r['relationship-key']}' == 'service-subscription.service-type'   ${r['relationship-value']}    ${service}
92     \   ${service_instance_id}=   Set Variable If    '${r['relationship-key']}' == 'service-instance.service-instance-id'   ${r['relationship-value']}   ${service_instance_id}
93     \   ${customer_id}=    Set Variable If   '${r['relationship-key']}' == 'customer.global-customer-id'   ${r['relationship-value']}   ${customer_id}
94     ${invariantUUID}=   Get Persona Model Id     ${service_instance_id}    ${service}    ${customer_id}
95
96     # We still need the vf module names. We can get them from VID using the persona_model_id (invariantUUID) from A&AI
97     Setup Browser
98     Login To VID GUI
99     ${vf_modules}=   Get Module Names from VID    ${invariantUUID}
100     Log    ${generic_vnf}
101     Log   ${service_instance_id},${vnf_name},${vnf_type},${vf_module_name},${vf_modules},${service}
102     Preload Vnf    ${service_instance_id}   ${vnf_name}   ${vnf_type}   ${vf_module_name}    ${vf_modules}    ${service}    demo
103     [Teardown]    Close All Browsers
104
105
106 Get Relationship Data
107     [Arguments]   ${relationships}
108     :for    ${r}   in   @{relationships}
109     \     ${status}   ${relationship_data}   Run Keyword And Ignore Error    Set Variable   ${r['relationship-data']}
110     \     Return From Keyword If    '${status}' == 'PASS'   ${relationship_data}
111
112
113 Get Generic VNF By ID
114     [Arguments]   ${vnf_id}
115     ${resp}=    Run A&AI Get Request      ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-id=${vnf_id}
116     Should Be Equal As Strings  ${resp.status_code}     200
117     [Return]   ${resp.json()}
118
119 Get Service Instance
120     [Arguments]   ${vnf_name}
121     ${resp}=    Run A&AI Get Request      ${AAI_INDEX PATH}/network/generic-vnfs/generic-vnf?vnf-name=${vnf_name}
122     Should Be Equal As Strings  ${resp.status_code}     200
123     [Return]   ${resp.json()}
124
125 Get Persona Model Id
126     [Documentation]    Query and Validates A&AI Service Instance
127     [Arguments]    ${service_instance_id}    ${service_type}   ${customer_id}
128     ${resp}=    Run A&AI Get Request      ${INDEX PATH}${CUSTOMER SPEC PATH}${customer_id}${SERVICE SUBSCRIPTIONS}${service_type}${SERVICE INSTANCE}${service_instance_id}
129     ${persona_model_id}=   Get From DIctionary   ${resp.json()['service-instance'][0]}    model-invariant-id
130     [Return]   ${persona_model_id}
131
132 APPC Mount Point
133     [Arguments]   ${vf_module_name}
134     Run Openstack Auth Request    auth
135     ${status}   ${stack_info}=   Run Keyword and Ignore Error    Wait for Stack to Be Deployed    auth    ${vf_module_name}   timeout=120s
136     Run Keyword if   '${status}' == 'FAIL'   FAIL   ${vf_module_name} Stack is not found
137     ${stack_id}=    Get From Dictionary    ${stack_info}    id
138     ${server_list}=    Get Openstack Servers    auth
139     ${vpg_name_0}=    Get From Dictionary    ${stack_info}    vpg_name_0
140     ${vpg_public_ip}=    Get Server Ip    ${server_list}    ${stack_info}   vpg_name_0    network_name=public
141     ${vpg_oam_ip}=    Get From Dictionary    ${stack_info}    vpg_private_ip_1
142     ${appc}=    Create Mount Point In APPC    ${vpg_name_0}    ${vpg_oam_ip}
143
144 Instantiate VNF
145     [Arguments]   ${service}
146     Setup Orchestrate VNF    ${GLOBAL_AAI_CLOUD_OWNER}    SharedNode    OwnerType    v1    CloudZone
147     ${vf_module_name}    ${service}=    Orchestrate VNF    DemoCust    ${service}   ${service}    ${TENANT_NAME}
148     Save For Delete
149     Log to Console   Customer Name=${CUSTOMER_NAME}
150     Log to Console   VNF Module Name=${vf_module_name}
151
152 Save For Delete
153     [Documentation]   Create a variable file to be loaded for save for delete
154     ${dict}=    Create Dictionary
155     Set To Dictionary   ${dict}   TENANT_NAME=${TENANT_NAME}
156     Set To Dictionary   ${dict}   TENANT_ID=${TENANT_ID}
157     Set To Dictionary   ${dict}   CUSTOMER_NAME=${CUSTOMER_NAME}
158     Set To Dictionary   ${dict}   STACK_NAME=${STACK_NAME}
159     Set To Dictionary   ${dict}   SERVICE=${SERVICE}
160     Set To Dictionary   ${dict}   VVG_SERVER_ID=${VVG_SERVER_ID}
161     Set To Dictionary   ${dict}   SERVICE_INSTANCE_ID=${SERVICE_INSTANCE_ID}
162
163     Set To Dictionary   ${dict}   VLB_CLOSED_LOOP_DELETE=${VLB_CLOSED_LOOP_DELETE}
164     Set To Dictionary   ${dict}   VLB_CLOSED_LOOP_VNF_ID=${VLB_CLOSED_LOOP_VNF_ID}
165
166     Set To Dictionary   ${dict}   CATALOG_SERVICE_ID=${CATALOG_SERVICE_ID}
167
168     ${vars}=    Catenate
169     ${keys}=   Get Dictionary Keys    ${dict}
170     :for   ${key}   in   @{keys}
171     \    ${value}=   Get From Dictionary   ${dict}   ${key}
172     \    ${vars}=   Catenate   ${vars}${key} = "${value}"\n
173
174     ${comma}=   Catenate
175     ${vars}=    Catenate   ${vars}CATALOG_RESOURCE_IDS = [
176     :for   ${id}   in    @{CATALOG_RESOURCE_IDS}
177     \    ${vars}=    Catenate  ${vars}${comma} "${id}"
178     \    ${comma}=   Catenate   ,
179     ${vars}=    Catenate  ${vars}]\n
180     OperatingSystem.Create File   ${FILE_CACHE}/${STACK_NAME}.py   ${vars}
181
182