add vnf and service to vnf orch
[testsuite.git] / robot / resources / sdngc_interface.robot
index 57198db..828752c 100644 (file)
@@ -1,22 +1,25 @@
 *** Settings ***
 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
 Library              RequestsLibrary
-Library                  UUID
-Library    OperatingSystem
-Library            ExtendedSelenium2Library
+Library                  ONAPLibrary.Utilities
+Library            SeleniumLibrary
+Library        OperatingSystem
 Library         Collections
 Library      String
-Library      StringTemplater
+Library           ONAPLibrary.ServiceMapping    WITH NAME     ServiceMapping
+Library           ONAPLibrary.PreloadData    WITH NAME     Preload
+Library           ONAPLibrary.Templating    WITH NAME     Templating
+Library           ONAPLibrary.SDNC        WITH NAME     SDNC
 Resource          global_properties.robot
-Resource          ../resources/json_templater.robot
 Resource        browser_setup.robot
 
-Variables    ../assets/service_mappings.py
 
 *** Variables ***
 ${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}  /operations/VNF-API:preload-vnf-topology-operation
+${PRELOAD_NETWORK_TOPOLOGY_OPERATION_PATH}  /operations/VNF-API:preload-network-topology-operation
+${PRELOAD_GR_TOPOLOGY_OPERATION_PATH}     /operations/GENERIC-RESOURCE-API:preload-vf-module-topology-operation
 ${PRELOAD_VNF_CONFIG_PATH}  /config/VNF-API:preload-vnfs/vnf-preload-list
-${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}  robot/assets/templates/sdnc/
+${PRELOAD_TOPOLOGY_OPERATION_BODY}  sdnc
 ${SDNGC_INDEX_PATH}    /restconf
 ${SDNCGC_HEALTHCHECK_OPERATION_PATH}  /operations/SLI-API:healthcheck
 ${SDNGC_REST_ENDPOINT}    ${GLOBAL_SDNGC_SERVER_PROTOCOL}://${GLOBAL_INJECTED_SDNC_IP_ADDR}:${GLOBAL_SDNGC_REST_PORT}
@@ -28,76 +31,87 @@ ${SDNGC_ADMIN_VNF_PROFILE_URL}    ${SDNGC_ADMIN_ENDPOINT}/mobility/getVnfProfile
 *** Keywords ***
 Run SDNGC Health Check
     [Documentation]    Runs an SDNGC healthcheck
-       ${resp}=    Run SDNGC Post Request     ${SDNGC_INDEX PATH}${SDNCGC_HEALTHCHECK_OPERATION_PATH}     ${None}
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    ${resp}=   SDNC.Run Post Request   ${SDNGC_REST_ENDPOINT}  ${SDNGC_INDEX PATH}${SDNCGC_HEALTHCHECK_OPERATION_PATH}     data=${None}    auth=${auth}
     Should Be Equal As Strings         ${resp.status_code}     200
     Should Be Equal As Strings         ${resp.json()['output']['response-code']}       200
 
-Run SDNGC Get Request
-    [Documentation]    Runs an SDNGC get request
-    [Arguments]    ${data_path}
-    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
-    Log    Creating session ${SDNGC_REST_ENDPOINT}
-    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
-    ${uuid}=    Generate UUID
-    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
-    ${resp}=   Get Request     sdngc   ${data_path}     headers=${headers}
-    Log    Received response from sdngc ${resp.text}
-    [Return]    ${resp}
-
-Run SDNGC Put Request
-    [Documentation]    Runs an SDNGC put request
-    [Arguments]    ${data_path}    ${data}
-    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
-    Log    Creating session ${SDNGC_REST_ENDPOINT}
-    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
-    ${uuid}=    Generate UUID
-    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
-    ${resp}=   Put Request     sdngc   ${data_path}     data=${data}    headers=${headers}
-    Log    Received response from sdngc ${resp.text}
-    [Return]    ${resp}
-
-Run SDNGC Post Request
-    [Documentation]    Runs an SDNGC post request
-    [Arguments]    ${data_path}    ${data}
+Preload Vcpe Networks
+    Preload Network    cpe_public    10.2.0.2   10.2.0.1
+    Preload Network    cpe_signal    10.4.0.2    10.4.0.1
+    Preload Network    brg_bng    10.3.0.2    10.3.0.1
+    Preload Network    bng_mux    10.1.0.10    10.1.0.1
+    Preload Network    mux_gw    10.5.0.10    10.5.0.1
+
+Preload Network
+    [Arguments]    ${network_role}     ${subnet_start_ip}    ${subnet_gateway}
+    ${name_suffix}=    Generate Timestamp
+    ${network_name}=     Catenate    SEPARATOR=_    net            ${network_role}         ${name_suffix}
+    ${subnet_name}=     Catenate    SEPARATOR=_    net     ${network_role}         subnet    ${name_suffix}
+    ${parameters}=     Create Dictionary    network_role=${network_role}    service_type=vCPE    network_type=Generic NeutronNet    network_name=${network_name}    subnet_start_ip=${subnet_start_ip}    subnet_gateway=${subnet_gateway}
+    Templating.Create Environment    sdnc    ${GLOBAL_TEMPLATE_FOLDER}
+    ${data}=   Templating.Apply Template    sdnc   ${PRELOAD_TOPOLOGY_OPERATION_BODY}/template.network.jinja   ${parameters}
     ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
-    Log    Creating session ${SDNGC_REST_ENDPOINT}
-    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
-    ${uuid}=    Generate UUID
-    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
-    ${resp}=   Post Request    sdngc   ${data_path}     data=${data}    headers=${headers}
-    Log    Received response from sdngc ${resp.text}
-    [Return]    ${resp}
-
-Run SDNGC Delete Request
-    [Documentation]    Runs an SDNGC delete request
-    [Arguments]    ${data_path}
+    ${post_resp}=      SDNC.Run Post Request   ${SDNGC_REST_ENDPOINT}  ${SDNGC_INDEX_PATH}${PRELOAD_NETWORK_TOPOLOGY_OPERATION_PATH}     data=${data}    auth=${auth}
+    [Return]    ${network_name}   ${subnet_name}
+
+Preload Vcpe vGW
+    [Arguments]    ${brg_mac}    ${cpe_network_name}   ${cpe_subnet_name}    ${mux_gw_net}    ${mux_gw_subnet}
+    ${name_suffix}=    Generate Timestamp
+    ${parameters}=     Create Dictionary    pub_key=${GLOBAL_INJECTED_PUBLIC_KEY}    brg_mac=${brg_mac}    cpe_public_net=${cpe_network_name}     cpe_public_subnet=${cpe_subnet_name}    mux_gw_net=${mux_gw_net}     mux_gw_subnet=${mux_gw_subnet}    suffix=${name_suffix}    oam_onap_net=oam_network_2No2        oam_onap_subnet=oam_network_2No2        public_net_id=${GLOBAL_INJECTED_PUBLIC_NET_ID}
+    Templating.Create Environment    sdnc    ${GLOBAL_TEMPLATE_FOLDER}
+    ${data}=   Templating.Apply Template    sdnc   ${PRELOAD_TOPOLOGY_OPERATION_BODY}/template.vcpe_vgw_vfmodule.jinja   ${parameters}
     ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
-    Log    Creating session ${SDNGC_REST_ENDPOINT}
-    ${session}=    Create Session      sdngc   ${SDNGC_REST_ENDPOINT}    auth=${auth}
-    ${uuid}=    Generate UUID
-    ${headers}=  Create Dictionary     Accept=application/json    Content-Type=application/json    X-TransactionId=${GLOBAL_APPLICATION_ID}-${uuid}    X-FromAppId=${GLOBAL_APPLICATION_ID}
-    ${resp}=   Delete Request  sdngc   ${data_path}        headers=${headers}
-    Log    Received response from sdngc ${resp.text}
-    [Return]    ${resp}
+    ${post_resp}=      SDNC.Run Post Request   ${SDNGC_REST_ENDPOINT}  ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}     data=${data}    auth=${auth}
 
+Preload Vcpe vGW Gra
+    [Arguments]    ${brg_mac}  ${cpe_public_network_name}   ${cpe_public_subnet_name}    ${mux_gw_net}    ${mux_gw_subnet}
+    ${name_suffix}=    Generate Timestamp
+    ${parameters}=     Create Dictionary    pub_key=${GLOBAL_INJECTED_PUBLIC_KEY}    brg_mac=${brg_mac}    cpe_public_net=${cpe_public_network_name}     cpe_public_subnet=${cpe_public_subnet_name}    mux_gw_net=${mux_gw_net}       mux_gw_subnet=${mux_gw_subnet}    suffix=${name_suffix}    oam_onap_net=oam_network_2No2        oam_onap_subnet=oam_network_2No2        public_net_id=${GLOBAL_INJECTED_PUBLIC_NET_ID}
+    Templating.Create Environment    sdnc    ${GLOBAL_TEMPLATE_FOLDER}
+    ${data}=   Templating.Apply Template    sdnc   ${PRELOAD_TOPOLOGY_OPERATION_BODY}/template.vcpe_gwgra_vfmodule.jinja   ${parameters}
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    ${post_resp}=      SDNC.Run Post Request   ${SDNGC_REST_ENDPOINT}  ${SDNGC_INDEX_PATH}${PRELOAD_GR_TOPOLOGY_OPERATION_PATH}     data=${data}    auth=${auth}
 
+Preload Generic VfModule
+    [Arguments]    ${service_instance_id}      ${vnf_model}   ${model_customization_name}    ${short_model_customization_name}     ${cpe_public_network_name}=None   ${cpe_public_subnet_name}=None   ${cpe_signal_network_name}=None   ${cpe_signal_subnet_name}=None
+    ${name_suffix}=    Generate Timestamp
+    ${vfmodule_name}=     Catenate    SEPARATOR=_    vf            ${short_model_customization_name}       ${name_suffix}
+    #TODO this became a mess, need to fix
+    ${parameters}=     Create Dictionary    pub_key=${GLOBAL_INJECTED_PUBLIC_KEY}    suffix=${name_suffix}    mr_ip_addr=${GLOBAL_INJECTED_MR_IP_ADDR}    mr_ip_port=${GLOBAL_MR_SERVER_PORT}
+    Set To Dictionary    ${parameters}    oam_onap_net=oam_network_2No2        oam_onap_subnet=oam_network_2No2    cpe_public_net=${cpe_public_network_name}     cpe_public_subnet=${cpe_public_subnet_name}    
+    Set To Dictionary    ${parameters}    cpe_signal_subnet=${cpe_signal_subnet_name}    cpe_signal_net=${cpe_signal_network_name}    public_net_id=${GLOBAL_INJECTED_PUBLIC_NET_ID}
+    # vnf_type and generic_vnf_type are identical
+    Set To Dictionary    ${parameters}    vnf_type=${model_customization_name}    generic_vnf_type=${model_customization_name}    generic_vnf_name=${model_customization_name}    vnf_name=${vfmodule_name}    
+    Set To Dictionary    ${parameters}    service_type=${service_instance_id}    sdnc_oam_ip=${GLOBAL_INJECTED_SDNC_IP_ADDR}
+       ${post_resp}=    SDNC.Preload Vfmodule    ${SDNGC_REST_ENDPOINT}    ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}    ${GLOBAL_TEMPLATE_FOLDER}    ${PRELOAD_TOPOLOGY_OPERATION_BODY}/template.vcpe_infra_vfmodule.jinja    ${parameters}
+    [Return]    ${post_resp}
+           
 Preload Vnf
-    [Arguments]    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}     ${vf_module_name}    ${vf_modules}    ${service}   ${uuid}
+    [Arguments]    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}     ${vf_module_name}    ${vf_modules}    ${vnf}   ${uuid}    ${service}
     ${base_vf_module_type}=    Catenate
     ${closedloop_vf_module}=    Create Dictionary
-    ${templates}=    Get From Dictionary    ${GLOBAL_SERVICE_TEMPLATE_MAPPING}    ${service}
-    :for    ${vf_module}    in      @{vf_modules}
+    ServiceMapping.Set Directory    default    ${GLOBAL_SERVICE_MAPPING_DIRECTORY}
+    ${templates}=    ServiceMapping.Get Service Template Mapping    default    ${service}    ${generic_vnf_type}
+    :FOR    ${vf_module}    IN      @{vf_modules}
     \       ${vf_module_type}=    Get From Dictionary    ${vf_module}    name
-    \       ${dict}   Get From Mapping    ${templates}    ${vf_module}
+    #     need to pass in vnf_index if non-zero
+    \       ${dict}   Run Keyword If    "${generic_vnf_name}".endswith('0')      Get From Mapping With Index    ${templates}    ${vf_module}   0
+            ...    ELSE IF  "${generic_vnf_name}".endswith('1')      Get From Mapping With Index    ${templates}    ${vf_module}   1
+            ...    ELSE IF  "${generic_vnf_name}".endswith('2')      Get From Mapping With Index    ${templates}    ${vf_module}   2
+            ...    ELSE   Get From Mapping    ${templates}    ${vf_module}
+    #     skip this iteration if no template 
+    \       ${test_dict_length} =  Get Length  ${dict}
+    \       Continue For Loop If   ${test_dict_length} == 0
     \       ${filename}=    Get From Dictionary    ${dict}    template
     \       ${base_vf_module_type}=   Set Variable If    '${dict['isBase']}' == 'true'     ${vf_module_type}    ${base_vf_module_type}
     \       ${closedloop_vf_module}=   Set Variable If    '${dict['isBase']}' == 'false'     ${vf_module}    ${closedloop_vf_module}
     \       ${vf_name}=     Update Module Name    ${dict}    ${vf_module_name}
-    \       Preload Vnf Profile    ${vf_module_type}
+    #    Admin portal update no longer 
+    #\       Preload Vnf Profile    ${vf_module_type}
     \       Preload One Vnf Topology    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}     ${vf_name}    ${vf_module_type}    ${service}    ${filename}   ${uuid}
     [Return]    ${base_vf_module_type}   ${closedloop_vf_module}
 
-
 Update Module Name
     [Arguments]    ${dict}    ${vf_module_name}
     Return From Keyword If    'prefix' not in ${dict}    ${vf_module_name}
@@ -105,29 +119,39 @@ Update Module Name
     ${name}=    Replace String   ${vf_module_name}   Vfmodule_    ${dict['prefix']}
     [Return]    ${name}
 
+Get From Mapping With Index
+    [Documentation]    Retrieve the appropriate prelad template entry for the passed vf_module
+    [Arguments]    ${templates}    ${vf_module}   ${vnf_index}=0
+    ${vf_module_name}=    Get From DIctionary    ${vf_module}    name
+    :FOR    ${template}   IN   @{templates}
+    \    Return From Keyword If    '${template['name_pattern']}' in '${vf_module_name}' and ('${template['vnf_index']}' == '${vnf_index}')     ${template}
+    ${result}=    Create Dictionary
+    [Return]    ${result}
+
 Get From Mapping
     [Documentation]    Retrieve the appropriate prelad template entry for the passed vf_module
     [Arguments]    ${templates}    ${vf_module}
     ${vf_module_name}=    Get From DIctionary    ${vf_module}    name
-    :for    ${template}   in   @{templates}
+    :FOR    ${template}   IN   @{templates}
     \    Return From Keyword If    '${template['name_pattern']}' in '${vf_module_name}'     ${template}
-    [Return]    None
+    ${result}=    Create Dictionary
+    [Return]    ${result}
 
 Preload One Vnf Topology
     [Arguments]    ${service_type_uuid}    ${generic_vnf_name}    ${generic_vnf_type}       ${vf_module_name}    ${vf_module_type}    ${service}    ${filename}   ${uuid}
     Return From Keyword If    '${filename}' == ''
-    ${data_template}=    OperatingSystem.Get File    ${PRELOAD_VNF_TOPOLOGY_OPERATION_BODY}/preload.template
-    ${parameters}=    Get Template Parameters    ${filename}   ${uuid}
+    ${parameters}=    Get Template Parameters    ${generic_vnf_name}    ${filename}   ${uuid}    ${service}
     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}
-    ${data}=   Fill JSON Template    ${data_template}    ${parameters}
-       ${put_resp}=    Run SDNGC Post Request     ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}     ${data}
-    Should Be Equal As Strings         ${put_resp.json()['output']['response-code']}   200
-    ${get_resp}=  Run SDNGC Get Request  ${SDNGC_INDEX_PATH}${PRELOAD_VNF_CONFIG_PATH}/${vf_module_name}/${vf_module_type}
-    Should Be Equal As Strings         ${get_resp.status_code}         200
+    Templating.Create Environment    sdnc    ${GLOBAL_TEMPLATE_FOLDER}
+    ${data}=   Templating.Apply Template    sdnc   ${PRELOAD_TOPOLOGY_OPERATION_BODY}/preload.jinja    ${parameters}
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    ${post_resp}=      SDNC.Run Post Request   ${SDNGC_REST_ENDPOINT}  ${SDNGC_INDEX_PATH}${PRELOAD_VNF_TOPOLOGY_OPERATION_PATH}     data=${data}    auth=${auth}
+    Should Be Equal As Strings         ${post_resp.json()['output']['response-code']}  200
+    ${auth}=  Create List  ${GLOBAL_SDNGC_USERNAME}    ${GLOBAL_SDNGC_PASSWORD}
+    ${get_resp}=       SDNC.Run Get Request    ${SDNGC_REST_ENDPOINT}    ${SDNGC_INDEX_PATH}${PRELOAD_VNF_CONFIG_PATH}/${vf_module_name}/${vf_module_type}     auth=${auth}
 
 Get Template Parameters
-    [Arguments]    ${template}    ${uuid}
-    ${rest}   ${suite}=    Split String From Right    ${SUITE NAME}   .   1
+    [Arguments]   ${generic_vnf_name}    ${template}    ${uuid}    ${service}
     ${uuid}=    Catenate    ${uuid}
     ${hostid}=    Get Substring    ${uuid}    -4
     ${ecompnet}=    Evaluate    (${GLOBAL_BUILD_NUMBER}%128)+128
@@ -147,18 +171,18 @@ Get Template Parameters
 
 
     # update the value map with unique values.
-    Set To Dictionary   ${valuemap}   uuid=${uuid}   hostid=${hostid}    ecompnet=${ecompnet}
+    Set To Dictionary   ${valuemap}   uuid=${uuid}   hostid=${hostid}    ecompnet=${ecompnet}    generic_vnf_name=${generic_vnf_name}
 
     #
     # Mash together the defaults dict with the test case dict to create the set of
     # preload parameters
     #
-    ${suite_templates}=    Get From Dictionary    ${GLOBAL_PRELOAD_PARAMETERS}    ${suite}
-    ${template}=    Get From Dictionary    ${suite_templates}    ${template}
-    ${defaults}=    Get From Dictionary    ${GLOBAL_PRELOAD_PARAMETERS}    defaults
+    Preload.Set Directory    preload    ./demo/preload_data
+    ${defaults}=       Get Default Preload Data    preload
+    ${template}=    Get Preload Data    preload    ${service}    ${template}
     # add all of the defaults to template...
     @{keys}=    Get Dictionary Keys    ${defaults}
-    :for   ${key}   in   @{keys}
+    :FOR   ${key}   IN   @{keys}
     \    ${value}=   Get From Dictionary    ${defaults}    ${key}
     \    Set To Dictionary    ${template}  ${key}    ${value}
 
@@ -170,21 +194,13 @@ Get Template Parameters
     ${parameters}=   Create Dictionary   vnf_parameters=${vnf_parameters_json}
     [Return]    ${parameters}
 
-Resolve Values Into Dictionary
-    [Arguments]   ${valuemap}    ${from}    ${to}
-    ${keys}=    Get Dictionary Keys    ${from}
-    :for   ${key}   in  @{keys}
-    \    ${value}=    Get From Dictionary    ${from}   ${key}
-    \    ${value}=    Template String    ${value}    ${valuemap}
-    \    Set To Dictionary    ${to}    ${key}    ${value}
-
 Resolve VNF Parameters Into Array
     [Arguments]   ${valuemap}    ${from}
     ${vnf_parameters}=   Create List
     ${keys}=    Get Dictionary Keys    ${from}
-    :for   ${key}   in  @{keys}
+    :FOR   ${key}   IN  @{keys}
     \    ${value}=    Get From Dictionary    ${from}   ${key}
-    \    ${value}=    Template String    ${value}    ${valuemap}
+    \    ${value}=    Templating.Template String    ${value}    ${valuemap}
     \    ${parameter}=   Create Dictionary   vnf-parameter-name=${key}    vnf-parameter-value=${value}
     \    Append To List    ${vnf_parameters}   ${parameter}
     [Return]   ${vnf_parameters}
@@ -225,7 +241,7 @@ Login To SDNGC Admin GUI
     Log    Logging in to ${SDNGC_ADMIN_LOGIN_URL}
     Handle Proxy Warning
     Title Should Be    AdminPortal
-    ${uuid}=    Generate UUID
+    ${uuid}=    Generate UUID4
     ${shortened_uuid}=     Evaluate    str("${uuid}")[:12]
     ${email}=        Catenate    ${shortened_uuid}@robotete.com
     Input Text    xpath=//input[@id='nf_email']    ${email}
@@ -237,4 +253,4 @@ Login To SDNGC Admin GUI
     Input Password    xpath=//input[@id='password']    ${shortened_uuid}
     Click Button    xpath=//button[@type='submit']
     Title Should Be    SDN-C AdminPortal
-    Log    Logged in to ${SDNGC_ADMIN_LOGIN_URL}
\ No newline at end of file
+    Log    Logged in to ${SDNGC_ADMIN_LOGIN_URL}