onap on kubernetes source files
[oom.git] / kubernetes / config / docker / init / src / config / robot / robot / resources / sdngc_interface.robot
1 *** Settings ***
2 Documentation     The main interface for interacting with SDN-GC. It handles low level stuff like managing the http request library and SDN-GC required fields
3 Library               RequestsLibrary
4 Library           UUID
5 Library    OperatingSystem
6 Library             ExtendedSelenium2Library
7 Library         Collections
8 Library      String
9 Library      StringTemplater
10 Resource          global_properties.robot
11 Resource          ../resources/json_templater.robot
12 Resource        browser_setup.robot
13
14 Variables    ../assets/service_mappings.py
15
16 *** Variables ***
17 ${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}  /operations/VNF-API:preload-vnf-topology-operation
18 ${PRELOAD_VNF_CONFIG_PATH}  /config/VNF-API:preload-vnfs/vnf-preload-list
19 ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}  robot/assets/templates/sdnc/
20 ${SDNGC_INDEX_PATH}    /restconf
21 ${SDNCGC_HEALTHCHECK_OPERATION_PATH}  /operations/SLI-API:healthcheck
22 ${SDNGC_REST_ENDPOINT}    ${GLOBAL_SDNGC_SERVER}:${GLOBAL_SDNGC_REST_PORT}
23 ${SDNGC_ADMIN_ENDPOINT}    ${GLOBAL_SDNGC_PORTAL}:${GLOBAL_SDNGC_ADMIN_PORT}
24 ${SDNGC_ADMIN_SIGNUP_URL}    ${SDNGC_ADMIN_ENDPOINT}/signup
25 ${SDNGC_ADMIN_LOGIN_URL}    ${SDNGC_ADMIN_ENDPOINT}/login
26 ${SDNGC_ADMIN_VNF_PROFILE_URL}    ${SDNGC_ADMIN_ENDPOINT}/mobility/getVnfProfile
27
28 *** Keywords ***
29 Run SDNGC Health Check
30     [Documentation]    Runs an SDNGC healthcheck
31         ${resp}=    Run SDNGC Post Request     ${SDNGC_INDEX PATH}${SDNCGC_HEALTHCHECK_OPERATION_PATH}     ${None}
32     Should Be Equal As Strings  ${resp.status_code}     200
33     Should Be Equal As Strings  ${resp.json()['output']['response-code']}       200
34
35 Run SDNGC Get Request
36     [Documentation]    Runs an SDNGC get request
37     [Arguments]    ${data_path}
38     ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
39     Log    Creating session ${SDNGC_REST_ENDPOINT}
40     ${session}=    Create Session       sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
41     ${uuid}=    Generate UUID
42     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
43     ${resp}=    Get Request     sdngc   ${data_path}     headers=${headers}
44     Log    Received response from sdngc ${resp.text}
45     [Return]    ${resp}
46
47 Run SDNGC Put Request
48     [Documentation]    Runs an SDNGC put request
49     [Arguments]    ${data_path}    ${data}
50     ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
51     Log    Creating session ${SDNGC_REST_ENDPOINT}
52     ${session}=    Create Session       sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
53     ${uuid}=    Generate UUID
54     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
55     ${resp}=    Put Request     sdngc   ${data_path}     data=${data}    headers=${headers}
56     Log    Received response from sdngc ${resp.text}
57     [Return]    ${resp}
58
59 Run SDNGC Post Request
60     [Documentation]    Runs an SDNGC post request
61     [Arguments]    ${data_path}    ${data}
62     ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
63     Log    Creating session ${SDNGC_REST_ENDPOINT}
64     ${session}=    Create Session       sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
65     ${uuid}=    Generate UUID
66     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
67     ${resp}=    Post Request    sdngc   ${data_path}     data=${data}    headers=${headers}
68     Log    Received response from sdngc ${resp.text}
69     [Return]    ${resp}
70
71 Run SDNGC Delete Request
72     [Documentation]    Runs an SDNGC delete request
73     [Arguments]    ${data_path}
74     ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
75     Log    Creating session ${SDNGC_REST_ENDPOINT}
76     ${session}=    Create Session       sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
77     ${uuid}=    Generate UUID
78     ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
79     ${resp}=    Delete Request  sdngc   ${data_path}        headers=${headers}
80     Log    Received response from sdngc ${resp.text}
81     [Return]    ${resp}
82
83
84 Preload Vnf
85     [Arguments]    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}     ${vf_module_name}    ${vf_modules}    ${service}   ${uuid}
86     ${base_vf_module_type}=    Catenate    ''
87     ${closedloop_vf_module}=    Create Dictionary
88     ${templates}=    Get From Dictionary    ${GLOBAL_SERVICE_TEMPLATE_MAPPING}    ${service}
89     :for    ${vf_module}    in      @{vf_modules}
90     \       ${vf_module_type}=    Get From Dictionary    ${vf_module}    name
91     \       ${dict}   Get From Mapping    ${templates}    ${vf_module}
92     \       ${filename}=    Get From Dictionary    ${dict}    template
93     \       ${base_vf_module_type}=   Set Variable If    '${dict['isBase']}' == 'true'     ${vf_module_type}    ${base_vf_module_type}
94     \       ${closedloop_vf_module}=   Set Variable If    '${dict['isBase']}' == 'false'     ${vf_module}    ${closedloop_vf_module}
95     \       ${vf_name}=     Update Module Name    ${dict}    ${vf_module_name}
96     \       Preload Vnf Profile    ${vf_module_type}
97     \       Preload One Vnf Topology    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}     ${vf_name}    ${vf_module_type}    ${service}    ${filename}   ${uuid}
98     [Return]    ${base_vf_module_type}   ${closedloop_vf_module}
99
100
101 Update Module Name
102     [Arguments]    ${dict}    ${vf_module_name}
103     Return From Keyword If    'prefix' not in ${dict}    ${vf_module_name}
104     Return From Keyword If    '${dict['prefix']}' == ''    ${vf_module_name}
105     ${name}=    Replace String   ${vf_module_name}   Vfmodule_    ${dict['prefix']}
106     [Return]    ${name}
107
108 Get From Mapping
109     [Documentation]    Retrieve the appropriate prelad template entry for the passed vf_module
110     [Arguments]    ${templates}    ${vf_module}
111     ${vf_module_name}=    Get From DIctionary    ${vf_module}    name
112     :for    ${template}   in   @{templates}
113     \    Return From Keyword If    '${template['name_pattern']}' in '${vf_module_name}'     ${template}
114     [Return]    None
115
116
117 Preload One Vnf Topology
118     [Arguments]    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}       ${vf_module_name}    ${vf_module_type}    ${service}    ${filename}   ${uuid}
119     Return From Keyword If    '${filename}' == ''
120     ${data_template}=    OperatingSystem.Get File    ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}/${filename}
121     ${parameters}=    Get Template Parameters    ${filename}   ${uuid}
122     Set To Dictionary   ${parameters}   generic_vnf_name=${generic_vnf_name}     generic_vnf_type=${generic_vnf_type}  service_type=${service_type_uuid}    vf_module_name=${vf_module_name}    vf_module_type=${vf_module_type}    uuid=${uuid}
123     ${data}=    Fill JSON Template    ${data_template}    ${parameters}
124         ${put_resp}=    Run SDNGC Post Request     ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}     ${data}
125     Should Be Equal As Strings  ${put_resp.json()['output']['response-code']}   200
126     ${get_resp}=  Run SDNGC Get Request  ${SDNGC_INDEX_PATH}${PRELOAD_VNF_CONFIG_PATH}/${vf_module_name}/${vf_module_type}
127     Should Be Equal As Strings  ${get_resp.status_code}         200
128
129 Get Template Parameters
130     [Arguments]    ${template}    ${uuid}
131     ${rest}   ${suite}=    Split String From Right    ${SUITE NAME}   .   1
132     ${uuid}=    Catenate    ${uuid}
133     ${hostid}=    Get Substring    ${uuid}    -4
134     ${ecompnet}=    Evaluate    ${GLOBAL_BUILD_NUMBER}%255
135     # Initialize the value map with the properties generated from the Robot VM /opt/config folder
136     ${valuemap}=   Copy Dictionary   ${GLOBAL_VM_PROPERTIES}
137     # update the value map with unique values.
138     Set To Dictionary   ${valuemap}   uuid=${uuid}   hostid=${hostid}    ecompnet=${ecompnet}
139     ${parameters}=    Create Dictionary
140     ${defaults}=    Get From Dictionary    ${GLOBAL_PRELOAD_PARAMETERS}    defaults
141     Resolve Values Into Dictionary   ${valuemap}   ${defaults}    ${parameters}
142     ${suite_templates}=    Get From Dictionary    ${GLOBAL_PRELOAD_PARAMETERS}    ${suite}
143     ${template}=    Get From Dictionary    ${suite_templates}    ${template}
144     Resolve Values Into Dictionary   ${valuemap}   ${template}    ${parameters}
145     [Return]    ${parameters}
146
147 Resolve Values Into Dictionary
148     [Arguments]   ${valuemap}    ${from}    ${to}
149     ${keys}=    Get Dictionary Keys    ${from}
150     :for   ${key}   in  @{keys}
151     \    ${value}=    Get From Dictionary    ${from}   ${key}
152     \    ${value}=    Template String    ${value}    ${valuemap}
153     \    Set To Dictionary    ${to}    ${key}    ${value}
154
155 Preload Vnf Profile
156     [Arguments]    ${vnf_name}
157     Login To SDNGC Admin GUI
158     Go To    ${SDNGC_ADMIN_VNF_PROFILE_URL}
159     Click Button    xpath=//button[@data-target='#add_vnf_profile']
160     Input Text    xpath=//input[@id='nf_vnf_type']    ${vnf_name}
161     Input Text    xpath=//input[@id='nf_availability_zone_count']    999
162     Input Text    xpath=//input[@id='nf_equipment_role']    robot-ete-test
163     Click Button    xpath=//button[contains(.,'Submit')]
164     Page Should Contain  VNF Profile
165     Input Text    xpath=//div[@id='vnf_profile_filter']//input    ${vnf_name}
166     Page Should Contain  ${vnf_name}
167
168 Delete Vnf Profile
169     [Arguments]    ${vnf_name}
170     Login To SDNGC Admin GUI
171     Go To    ${SDNGC_ADMIN_VNF_PROFILE_URL}
172     Page Should Contain  VNF Profile
173     Input Text    xpath=//div[@id='vnf_profile_filter']//input    ${vnf_name}
174     Page Should Contain  ${vnf_name}
175     Click Button    xpath=//button[contains(@onclick, '${vnf_name}')]
176     Page Should Contain    Are you sure you want to delete VNF_PROFILE
177     Click Button    xpath=//button[contains(text(), 'Yes')]
178     Page Should Not Contain  ${vnf_name}
179
180 Login To SDNGC Admin GUI
181     [Documentation]   Login To SDNGC Admin GUI
182     ## Setup Browser is now being managed by the test case
183     ## Setup Browser
184     Go To    ${SDNGC_ADMIN_SIGNUP_URL}
185     Maximize Browser Window
186     Set Selenium Speed    ${GLOBAL_SELENIUM_DELAY}
187     Set Browser Implicit Wait    ${GLOBAL_SELENIUM_BROWSER_IMPLICIT_WAIT}
188     Log    Logging in to ${SDNGC_ADMIN_LOGIN_URL}
189     Handle Proxy Warning
190     Title Should Be    AdminPortal
191     ${uuid}=    Generate UUID
192     ${shortened_uuid}=     Evaluate    str("${uuid}")[:12]
193     ${email}=        Catenate    ${shortened_uuid}@robotete.com
194     Input Text    xpath=//input[@id='nf_email']    ${email}
195     Input Password    xpath=//input[@id='nf_password']    ${shortened_uuid}
196     Click Button    xpath=//button[@type='submit']
197     Wait Until Page Contains    User created   20s
198     Go To    ${SDNGC_ADMIN_LOGIN_URL}
199     Input Text    xpath=//input[@id='email']    ${email}
200     Input Password    xpath=//input[@id='password']    ${shortened_uuid}
201     Click Button    xpath=//button[@type='submit']
202     Title Should Be    SDN-C AdminPortal
203     Log    Logged in to ${SDNGC_ADMIN_LOGIN_URL}