*** Settings ***
Documentation     Test suite for VTN Functionality
Suite Setup       Suite Setup
Suite Teardown    Suite Teardown
Library           Collections
Library           String
Library           OperatingSystem
Library           XML
Library           RequestsLibrary
Library           CORDRobot
Library           ImportResource  resources=CORDRobot

*** Variables ***
${VM_USER}                         admin
${VM_PASS}                         admin
${head_node}                       head1
${SSH_KEY}                         id_rsa.pub
${ONOS_CORDVTN_API}                http://onos-cord:8182/onos/cordvtn
${CORE_SERVICE_PATHFILE}           ${CURDIR}/data/Service.json
${CORE_NETWORK_PATHFILE}           ${CURDIR}/data/CoreNetwork.json
${CORE_SLICE_PATHFILE}             ${CURDIR}/data/CoreSlice.json
${CORE_NETWORK_SLICE_PATHFILE}     ${CURDIR}/data/CoreNetworkSlice.json
${CORE_INSTANCE_PATHFILE}          ${CURDIR}/data/CoreInstance.json
${CORD_SUBSCRIBER_PATHFILE}        ${CURDIR}/data/CordSubscriber.json
${VOLT_TENANT_PATHFILE}            ${CURDIR}/data/CordVoltTenant.json
${ciab_local}                      True
${physical_pod}                    True
${default_flow_count}              42
${final_flow_count}                49
${expected_num_networks}           4
${expected_num_ports}              5

*** Test Cases ***
Validate Default OVS Flow Count
    [Documentation]    Logs into the compute-node where OVS is running and validates the default flow count
    [Tags]    ovsflows
    Wait Until Keyword Succeeds    30s    5s    Validate Flow Count    ${default_flow_count}

Validate Current VTN Service Networks and Ports
    [Documentation]    Makes rest calls to XOS to validate the default VTN Service Networks + Ports (public,management,exampleservice_network,mysite_vsg-access)
    [Tags]    vtn    pod
    Validate Default CIAB Service Networks and Ports via XOS

Validate Default Subscriber
    [Documentation]    Validates the default subscriber set up in CIAB (My House)
    [Tags]    vsg
    ${resp}=    CORD GET    ${SERVER_IP}    ${VOLT_SUBSCRIBER}/5
    Should Be Equal As Strings    ${resp.status_code}    200
    Log    ${resp.content}
    ${name}=    Get Json Value    ${resp.content}    /name
    ${service_specific_id}=    Get Json Value    ${resp.content}    /service_specific_id
    ${uplink_speed}=    Get Json Value    ${resp.content}    /uplink_speed
    Should Be Equal As Strings    ${name}    "My House"
    Should Be Equal As Strings    ${service_specific_id}    "123"
    Should Be Equal As Strings    ${uplink_speed}    1000000000

Create New Test Service
    [Documentation]    Creates a generic service that will be used for the new VTN Network
    [Tags]    vtn    pod
    ${updatedcservList}=    CORDRobot.setFieldValueInDict    ${cservlist[0]}    name    CordVTN-Test-Service
    ${updatedcservList}=    CORDRobot.setFieldValueInDict    ${updatedcservList}    description    Test Service for CordVTN Test Suite
    ${resp}=    Cord POST    ${SERVER_IP}    ${CH_CORE_SERVICES}    ${updatedcservList}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${name}=    Get Json Value    ${resp.content}    /name
    ${generic_service_id}=    Get Json Value    ${resp.content}    /id
    ${description}=    Get Json Value    ${resp.content}    /description
    ${kind}=    Get Json Value    ${resp.content}    /kind
    Should Be Equal As Strings    ${name}    "CordVTN-Test-Service"
    Should Be Equal As Strings    ${description}    "Test Service for CordVTN Test Suite"
    Should Be Equal As Strings    ${kind}    "generic"
    Set Suite Variable    ${generic_service_id}

Create New VTN Service Network
    [Documentation]    Makes a POST Request to XOS to create a new core network
    [Tags]    vtn    pod
    ${updatedCnList}=    CORDRobot.setFieldValueInDict    ${cnlist[0]}    template_id    ${vsg_network_template_id}
    ${updatedCnList}=    CORDRobot.setFieldValueInDict    ${updatedCnList}    owner_id    ${vsg_slice_id}
    Log    ${updatedCnList}
    ${resp}=    Cord POST    ${SERVER_IP}    ${CH_CORE_NETWORKS}    ${cnlist[0]}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${name}=    Get Json Value    ${resp.content}    /name
    ${network_id}=    Get Json Value    ${resp.content}    /id
    ${subnet}=    Get Json Value    ${resp.content}    /subnet
    ${start_ip}=    Get Json Value    ${resp.content}    /start_ip
    ${end_ip}=    Get Json Value    ${resp.content}    /end_ip
    Should Be Equal As Strings    ${name}    "test-network"
    Should Be Equal As Strings    ${subnet}    "2.2.2.0/24"
    Should Be Equal As Strings    ${start_ip}    "2.2.2.2"
    Should Be Equal As Strings    ${end_ip}    "2.2.2.254"
    Set Suite Variable    ${network_id}

Create New Slice with New Test Service
    [Documentation]    Makes a POST Request to XOS to create a new slice and adds new generic test service to that slice
    [Tags]    vtn    pod
    ${updatedCsList}=    CORDRobot.setFieldValueInDict    ${cslist[0]}    service_id    ${generic_service_id}
    #${updatedCsList}=    CORDRobot.setFieldValueInDict    ${cslist[0]}    service_id    12
    Log    ${updatedCsList}
    ${resp}=    Cord POST    ${SERVER_IP}    ${CH_CORE_SLICES}    ${updatedCsList}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${name}=    Get Json Value    ${resp.content}    /name
    ${new_slice_id}=    Get Json Value    ${resp.content}    /id
    ${max_instances}=    Get Json Value    ${resp.content}    /max_instances
    ${ser_id}=    Get Json Value    ${resp.content}    /service_id
    ${default_isolation}=    Get Json Value    ${resp.content}    /default_isolation
    Should Be Equal As Strings    ${name}    "mysite_testservice"
    Should Be Equal As Strings    ${max_instances}    10
    Should Be Equal As Strings    ${ser_id}    ${generic_service_id}
    Should Be Equal As Strings    ${default_isolation}    "vm"
    Set Suite Variable    ${new_slice_id}

Add Networks to New Test Network Slice
    [Documentation]    Creates a new network slice for the new slice and adds mgmt and new network to it
    [Tags]    vsg    pod
    ${updatedCsList}=    CORDRobot.setFieldValueInDict    ${cnslist[0]}    network_id    ${network_id}
    #${updatedCsList}=    CORDRobot.setFieldValueInDict    ${cnslist[0]}    network_id    5
    ${updatedCsList}=    CORDRobot.setFieldValueInDict    ${updatedCsList}    slice_id    ${new_slice_id}
    #${updatedCsList}=    CORDRobot.setFieldValueInDict    ${updatedCsList}    slice_id    5
    Log    ${updatedCsList}
    ${resp}=    Cord POST    ${SERVER_IP}    ${CH_CORE_NETWORK_SLICES}    ${updatedCsList}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${s_id}=    Get Json Value    ${resp.content}    /slice_id
    ${n_id}=    Get Json Value    ${resp.content}    /network_id
    #Should Be Equal As Strings    ${s_id}    5
    Should Be Equal As Strings    ${s_id}    ${new_slice_id}
    Should Be Equal As Strings    ${n_id}    ${network_id}
    ##Add mgmt network to this network slice
    ${updatedCsList}=    CORDRobot.setFieldValueInDict    ${cnslist[0]}    network_id    ${mgmt_network_id}
    ${updatedCsList}=    CORDRobot.setFieldValueInDict    ${updatedCsList}    slice_id    ${new_slice_id}
    #${updatedCsList}=    CORDRobot.setFieldValueInDict    ${updatedCsList}    slice_id    5
    Log    ${updatedCsList}
    ${resp}=    Cord POST    ${SERVER_IP}    ${CH_CORE_NETWORK_SLICES}    ${updatedCsList}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${s_id}=    Get Json Value    ${resp.content}    /slice_id
    ${n_id}=    Get Json Value    ${resp.content}    /network_id
    Should Be Equal As Strings    ${s_id}    ${new_slice_id}
    #Should Be Equal As Strings    ${s_id}    5
    Should Be Equal As Strings    ${n_id}    ${mgmt_network_id}

Create New Test Instance
    [Documentation]    Creates a new instance for the test service
    [Tags]    vsg    pod
    ${updatedCiList}=    CORDRobot.setFieldValueInDict    ${cilist[0]}    slice_id    ${new_slice_id}
    #${updatedCiList}=    CORDRobot.setFieldValueInDict    ${cilist[0]}    slice_id    5
    ${updatedCiList}=    CORDRobot.setFieldValueInDict    ${updatedCiList}    image_id    ${image_id}
    Log    ${updatedCiList}
    ${resp}=    Cord POST    ${SERVER_IP}    ${CH_CORE_INSTANCES}    ${updatedCiList}
    #${resp}=    Cord POST    ${SERVER_IP}    ${CH_CORE_INSTANCES}    ${cilist[0]}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${new_instance_id}=    Get Json Value    ${resp.content}    /id
    ${slice_id}=    Get Json Value    ${resp.content}    /slice_id
    ${i_id}=    Get Json Value    ${resp.content}    /image_id
    ${node_id}=    Get Json Value    ${resp.content}    /node_id
    ${name}=    Get Json Value    ${resp.content}    /name
    ${instance_name}=    Get Json Value    ${resp.content}    /instance_name
    Should Be Equal As Strings    ${slice_id}    ${new_slice_id}
    #Should Be Equal As Strings    ${slice_id}    5
    Should Be Equal As Strings    ${i_id}    ${image_id}
    Should Be Equal As Strings    ${node_id}    1
    Should Be Equal As Strings    ${name}    "mysite_testservice"
    Should Be Equal As Strings    ${instance_name}    "mysite_testservice-1"
    Set Suite Variable    ${new_instance_id}

Validate New OVS Flow Count
    [Documentation]    Logs into the compute-node where OVS is running and validates the new flow count (new flow rules for new volt tenant instance)
    [Tags]    ovsflows
    Wait Until Keyword Succeeds    300s    5s    Validate Flow Count    ${final_flow_count}

Validate Creation of Openstack Resources
    [Documentation]    Retrieves openstack compute node state and validates the new network and instance has been created properly
    [Tags]    openstack    pod
    Wait Until Keyword Succeeds    300s    5s    Validate Openstack Network    test-network    2.2.2.0/24
    Sleep    300
    ${test_instance_name}=    Get New Instance
    Wait Until Keyword Succeeds    300s    5s    Validate Openstack Nova Instance    ${test_instance_name}    test-network
    Set Suite Variable    ${test_instance_name}

Validate New Flows Pushed to OVS
    [Documentation]    Logs into the compute-node where OVS is running and validates the new flows added
    [Tags]    ovsflows
    ${ovs_flow_count}=    Run Keyword If    '${ciab_local}' == 'False'        Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${head_node}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int | grep 2.2.2.0 | wc -l    ELSE    Execute Command Locally    ssh -q root@${compute_node_hostname} "ovs-ofctl dump-flows br-int | grep 2.2.2.0 | wc -l"
    ${ovs_flow_count}=    Get Line    ${ovs_flow_count}    0
    Should Be Equal As Integers    ${ovs_flow_count}    2
    ${flows_added}=    Run Keyword If    '${ciab_local}' == 'False'        Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${head_node}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int    ELSE    Execute Command Locally    ssh -q root@${compute_node_hostname} "ovs-ofctl dump-flows br-int"
    ${flows_added}=    Get Lines Containing String    ${flows_added}    cookie=
    Log    ${flows_added}
    ## Match src/dst (bi-directional) rules on new flows added
    Should Contain    ${flows_added}    nw_src=2.2.2.0/24,nw_dst=2.2.2.0/24

Create New Cord Subscriber
    [Documentation]    Creates a new cord root subscriber
    [Tags]    vsg
    ${blacklist_sr_ids}=    Get Subscriber Root IDs in Use
    ${ss_id}=    Generate Random Number from Blacklist    ${blacklist_sr_ids}
    Set Suite Variable    ${ss_id}
    ${updatedcsList}=    CORDRobot.setFieldValueInDict    ${csubList[0]}    service_specific_id    ${ss_id}
    Log    ${updatedcsList}
    ${resp}=    Cord POST    ${SERVER_IP}    ${VOLT_SUBSCRIBER}    ${updatedcsList}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${subscriber_root_id}=    Get Json Value    ${resp.content}    /id
    ${enable_uverse}=    Get Json Value    ${resp.content}    /enable_uverse
    ${uplink_speed}=    Get Json Value    ${resp.content}    /uplink_speed
    ${downlink_speed}=    Get Json Value    ${resp.content}    /downlink_speed
    ${status}=    Get Json Value    ${resp.content}    /status
    ${is_demo_user}=    Get Json Value    ${resp.content}    /is_demo_user
    ${service_specific_id}=    Get Json Value    ${resp.content}    /service_specific_id
    Should Be Equal As Strings    ${enable_uverse}    true
    Should Be Equal As Strings    ${uplink_speed}    1000000011
    Should Be Equal As Strings    ${downlink_speed}    1000000011
    Should Be Equal As Strings    ${status}    "enabled"
    Should Be Equal As Strings    ${is_demo_user}    false
    Should Be Equal As Strings    ${service_specific_id}    "${ss_id}"
    Set Suite Variable    ${service_specific_id}
    Set Suite Variable    ${subscriber_root_id}

Create New Volt Tenant for New Cord Subscriber
    [Documentation]    Creates a new volt tenant for the newly created cord root subscriber
    [Tags]    vsg
    ${blacklist_tags}=    Get Tags in Use
    Log    ${blacklist_tags}
    ${s_tag}=    Generate Random Number from Blacklist    ${blacklist_tags}    1    4096    True
    Append To List    ${blacklist_tags}    ${s_tag}
    ${c_tag}=    Generate Random Number from Blacklist    ${blacklist_tags}    1    4096    True
    Append To List    ${blacklist_tags}    ${c_tag}
    Log    ${blacklist_tags}
    ${updatedvtList}=    CORDRobot.setFieldValueInDict    ${vtList[0]}    service_specific_id    ${subscriber_root_id}
    #${updatedvtList}=    CORDRobot.setFieldValueInDict    ${vtList[0]}    subscriber_root_id    ${subscriber_root_id}
    ${updatedvtList}=    CORDRobot.setFieldValueInDict    ${updatedvtList}    s_tag    ${s_tag}
    ${updatedvtList}=    CORDRobot.setFieldValueInDict    ${updatedvtList}    c_tag    ${c_tag}
    Log    ${updatedvtList}
    ${resp}=    Cord POST    ${SERVER_IP}    ${VOLT_TENANT}    ${vtList[0]}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${volt_tenant_id}=    Get Json Value    ${resp.content}    /id
    Set Suite Variable    ${volt_tenant_id}
    ${stag}=    Get Json Value    ${resp.content}    /s_tag
    ${ctag}=    Get Json Value    ${resp.content}    /c_tag
    ${ssid}=    Get Json Value    ${resp.content}    /service_specific_id
    Should Be Equal As Strings    ${stag}    ${s_tag}
    Should Be Equal As Strings    ${ctag}    ${c_tag}
    Should Be Equal As Strings   ${ssid}    "${subscriber_root_id}"

Validate Creation of New Subscriber Instance
    [Documentation]    Validates instance (vm) for new subscriber is created in the vsg slice
    [Tags]    openstack
    Sleep    300
    ${new_vsg_instance}=    Get New Instance
    Wait Until Keyword Succeeds    300s    5s    Validate Openstack Nova Instance    ${new_vsg_instance}    mysite_vsg-access
    Set Suite Variable    ${new_vsg_instance}

Delete Volt Tenant
    [Documentation]    Deletes new volt tenant
    [Tags]    delete
    ${resp}=    Cord DELETE    ${SERVER_IP}    ${VOLT_TENANT}    ${volt_tenant_id}
    Should Be Equal As Strings    ${resp.status_code}    200
    Wait Until Keyword Succeeds    300s    5s    Validate Openstack Nova Instance    ${new_vsg_instance}    mysite_vsg-access    destroyed=True

Delete Cord Subscriber
    [Documentation]    Deletes new cord subscriber
    [Tags]    delete
    ${resp}=    Cord DELETE    ${SERVER_IP}    ${VOLT_SUBSCRIBER}    ${subscriber_root_id}
    Should Be Equal As Strings    ${resp.status_code}    200

Delete Test Instance
    [Documentation]    Deletes the test instance created previously
    [Tags]    delete    pod
    ${resp}=    Cord DELETE    ${SERVER_IP}    ${CH_CORE_INSTANCES}    ${new_instance_id}
    Should Be Equal As Strings    ${resp.status_code}    200
    Wait Until Keyword Succeeds    300s    5s    Validate Openstack Nova Instance    ${test_instance_name}    test-network    destroyed=True

Delete Test Slice
    [Documentation]    Deletes the test slice created previously
    [Tags]    delete    pod
    ${resp}=    Cord DELETE    ${SERVER_IP}    ${CH_CORE_SLICES}    ${new_slice_id}
    Should Be Equal As Strings    ${resp.status_code}    200

Delete VTN Test Network
    [Documentation]    Deletes the test network created previously
    [Tags]    delete    pod
    ## Wait for test network to be destroyed via get neutron lists
    ##TODO: Find someting to poll on rather than wait 5 mins
    #Sleep    300
    ${resp}=    Cord DELETE    ${SERVER_IP}    ${CH_CORE_NETWORKS}    ${network_id}
    Should Be Equal As Strings    ${resp.status_code}    200

Delete Test Service
    [Documentation]    Deletes the test service created
    [Tags]    delete    pod
    ${resp}=    Cord DELETE    ${SERVER_IP}    ${CH_CORE_SERVICES}    ${generic_service_id}
    Should Be Equal As Strings    ${resp.status_code}    200

Validate OVS Flow Count Back to Default
    [Documentation]    Logs into the compute-node where OVS is running and validates the new flow count (new flow rules for new volt tenant instance)
    [Tags]    ovsflows
    Wait Until Keyword Succeeds    60s    5s    Validate Flow Count    ${default_flow_count}

Validate New Flows Removed From OVS
    [Documentation]    Validates that the flow rules added by ONOS from the network creation has been removed
    [Tags]    ovsflows
    ${ovs_flow_count}=    Run Keyword If    '${ciab_local}' == 'False'        Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${head_node}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int | grep 2.2.2.0 | wc -l    ELSE    Execute Command Locally    ssh -q root@${compute_node_hostname} "ovs-ofctl dump-flows br-int | grep 2.2.2.0 | wc -l"
    ${ovs_flow_count}=    Get Line    ${ovs_flow_count}    0
    Should Be Equal As Integers    ${ovs_flow_count}    0
    ${flows_added}=    Run Keyword If    '${ciab_local}' == 'False'        Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${head_node}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int    ELSE    Execute Command Locally    ssh -q root@${compute_node_hostname} "ovs-ofctl dump-flows br-int"
    ${flows_added}=    Get Lines Containing String    ${flows_added}    cookie=
    Log    ${flows_added}
    ## Validate flow rules arent in the flows table
    Should Not Contain    ${flows_added}    nw_src=2.2.2.0/24,nw_dst=2.2.2.0/24

*** Keywords ***
Suite Setup
    ${auth} =    Create List    ${XOS_USER}    ${XOS_PASSWD}
    ${HEADERS}    Create Dictionary    Content-Type=application/json
    Create Session    ${SERVER_IP}    http://${SERVER_IP}:${SERVER_PORT}    auth=${AUTH}    headers=${HEADERS}
    Read InputFile
    ${vsg_service_id}=    Get ID    ${CH_CORE_SERVICES}    name    vsg
    Set Suite Variable    ${vsg_service_id}
    ${vsg_network_template_id}=    Get ID    ${CH_CORE_NETWORK_TEMPLATES}    name    vsg
    Set Suite Variable    ${vsg_network_template_id}
    ${mgmt_network_id}=    Get ID    ${CH_CORE_NETWORKS}    name    management
    Set Suite Variable    ${mgmt_network_id}
    ${vsg_slice_id}=    Get ID    ${CH_CORE_SLICES}    name    mysite_vsg
    Set Suite Variable    ${vsg_slice_id}
    ${volt_service_id}=    Get ID    ${CH_CORE_SERVICES}    name    volt
    Set Suite Variable    ${volt_service_id}
    ${image_id}=    Get ID    ${CH_CORE_IMAGES}    name    trusty-server-multi-nic
    Set Suite Variable    ${image_id}
    ##Get compute node information
    ${compute_node_hostname}=    Run Keyword If    '${ciab_local}' == 'False'    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    ${head_node}    cord prov list | grep node | awk '{print $2}'    ELSE    Execute Command Locally    cord prov list | grep node | awk '{print $2}'
    ${compute_node_ip}=    Run Keyword If    '${ciab_local}' == 'False'        Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    ${head_node}    cord prov list | grep node | awk '{print $4}'    ELSE    Execute Command Locally    cord prov list | grep node | awk '{print $4}'
    Set Suite Variable    ${compute_node_hostname}
    Set Suite Variable    ${compute_node_ip}
    Get List of Instances

Suite Teardown
    Delete All Sessions
    Close All Connections

Read InputFile
    ${coreServiceList} =    CORDRobot.jsonToList    ${CORE_SERVICE_PATHFILE}    ServiceInfo
    Set Suite Variable    ${cservlist}    ${coreServiceList}
    ${coreNetworkList} =    CORDRobot.jsonToList    ${CORE_NETWORK_PATHFILE}    NetworkInfo
    Set Suite Variable    ${cnlist}    ${coreNetworkList}
    ${coreSliceList} =    CORDRobot.jsonToList    ${CORE_SLICE_PATHFILE}    SliceInfo
    Set Suite Variable    ${cslist}    ${coreSliceList}
    ${coreNetworkSliceList} =    CORDRobot.jsonToList    ${CORE_NETWORK_SLICE_PATHFILE}    NetworkSliceInfo
    Set Suite Variable    ${cnslist}    ${coreNetworkSliceList}
    ${coreInstanceList} =    CORDRobot.jsonToList    ${CORE_INSTANCE_PATHFILE}    InstanceInfo
    Set Suite Variable    ${cilist}    ${coreInstanceList}
    ${cordSubscriberList} =    CORDRobot.jsonToList    ${CORD_SUBSCRIBER_PATHFILE}    CordSubscriberInfo
    Set Suite Variable    ${csubList}    ${cordSubscriberList}
    ${voltTenantList} =    CORDRobot.jsonToList    ${VOLT_TENANT_PATHFILE}    VoltTenantInfo
    Set Suite Variable    ${vtList}    ${voltTenantList}

CORD Get
    [Documentation]    Make a GET call to the CORD controller
    [Arguments]    ${session}    ${service}
    ${resp}=    Get Request    ${session}    ${service}
    Log    ${resp.content}
    [Return]    ${resp}

CORD Post
    [Documentation]    Make a POST call to the CORD controller
    [Arguments]    ${session}    ${service}    ${data}
    ${data}=    Evaluate    json.dumps(${data})    json
    ${resp}=    Post Request    ${session}    uri=${service}    data=${data}
    Log    ${resp.content}
    [Return]    ${resp}

CORD Delete
    [Documentation]    Make a DELETE call to the CORD controller
    [Arguments]    ${session}    ${service}    ${id}
    ${resp}=    Delete Request    ${session}    uri=${service}/${id}
    Log    ${resp.content}
    [Return]    ${resp}

Validate Default CIAB Service Networks and Ports via XOS
    [Documentation]    Using XOS API, this validates the default VTN Service Networks + Ports for a CIAB Environment
    @{expected_network_names}=    Create List    public    management    exampleservice_network    mysite_vsg-access
    Run Keyword If    '${physical_pod}' == 'True'    Remove Values From List    ${expected_network_names}    exampleservice_network
    @{names}=    Create List
    @{network_names}=    Create List
    ${resp}=    CORD GET    ${SERVER_IP}   ${CH_CORE_NETWORKS}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${jsondata}=    To Json    ${resp.content}
    Log    ${jsondata}
    ${length}=    Get Length    ${jsondata['items']}
    Should Be Equal As Integers    ${length}    ${expected_num_networks}
    : FOR    ${INDEX}    IN RANGE    0    ${length}
    \    ${item}=    Get From List    ${jsondata['items']}    ${INDEX}
    \    ${name}=    Get From Dictionary    ${item}    name
    \    Append To List    ${names}    ${name}
    : FOR    ${value}    IN    @{expected_network_names}
    \    List Should Contain Value    ${names}    ${value}
    ${resp}=    CORD GET    ${SERVER_IP}    ${CH_CORE_PORTS}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${jsondata}=    To Json    ${resp.content}
    ${length}=    Get Length    ${jsondata['items']}
    Should Be Equal As Integers    ${length}    ${expected_num_ports}

Validate Default CIAB Service Networks via ONOSCORD
    [Documentation]    Validates the default VTN Service Network via ONOSCORD for a CIAB Environment
    [Arguments]    ${jsondata}
    @{network_ids}=    Create List
    @{expected_types}=    Create List    PUBLIC    PRIVATE    MANAGEMENT_LOCAL    VSG
    @{expected_names}=    Create List    public    exampleservice_network    management    mysite_vsg-access
    Run Keyword If    '${physical_pod}' == 'True'    Remove From List    ${expected_types}    VSG
    Run Keyword If    '${physical_pod}' == 'True'    Remove From List    ${expected_names}    exampleservice_network
    @{types}=    Create List
    @{names}=    Create List
    ${jsondata}=    To Json    ${jsondata}
    ${length}=    Get Length    ${jsondata['ServiceNetworks']}
    Should Be Equal As Integers    ${length}    4
    : FOR    ${INDEX}    IN RANGE    0    ${length}
    \    ${item}=    Get From List    ${jsondata['ServiceNetworks']}    ${INDEX}
    \    ${network_id}=    Get From Dictionary    ${item}    id
    \    ${type}=    Get From Dictionary    ${item}    type
    \    ${name}=    Get From Dictionary    ${item}    name
    \    Append To List    ${network_ids}    ${network_id}
    \    Append To List    ${types}    ${type}
    \    Append To List    ${names}    ${name}
    \    Run Keyword If    "${name}" == "management"    Set Suite Variable    ${management_network_id}    ${network_id}
    \    Run Keyword If    "${name}" == "public"    Set Suite Variable    ${public_network_id}    ${network_id}
    : FOR    ${value}    IN    @{expected_types}
    \    List Should Contain Value    ${types}    ${value}
    : FOR    ${value}    IN    @{expected_names}
    \    List Should Contain Value    ${names}    ${value}
    Set Suite Variable    ${network_ids}

Validate Default CIAB Service Ports via ONOSCORD
    [Documentation]    Validates the default VTN Service Ports via ONOSCORD for a CIAB Environment
    [Arguments]    ${jsondata}
    ${net_ids}=    Create List
    ${jsondata}=    To Json    ${jsondata}
    ${length}=    Get Length    ${jsondata['ServicePorts']}
    Should Be Equal As Integers    ${length}    5
    : FOR    ${INDEX}    IN RANGE    0    ${length}
    \    ${item}=    Get From List    ${jsondata['ServicePorts']}    ${INDEX}
    \    ${net_id}=    Get From Dictionary    ${item}    network_id
    \    Append To List    ${net_ids}    ${net_id}
    : FOR    ${value}    IN    @{net_ids}
    \    List Should Contain Value    ${network_ids}    ${value}
    ${management_len}=    Count Values in List    ${net_ids}    ${management_network_id}
    Should Be Equal As Integers    ${management_len}    2

Get ID
    [Documentation]    Retreives the id of any specific component
    [Arguments]    ${endpoint}    ${item}    ${match}
    ${resp}=    CORD GET    ${SERVER_IP}   ${endpoint}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${jsondata}=    To Json    ${resp.content}
    Log    ${jsondata}
    ${length}=    Get Length    ${jsondata['items']}
    : FOR    ${INDEX}    IN RANGE    0    ${length}
    \    ${value}=    Get From List    ${jsondata['items']}    ${INDEX}
    \    ${name}=    Get From Dictionary    ${value}    ${item}
    \    ${id}=    Get From Dictionary    ${value}    id
    \    Run Keyword If    '${name}' == '${match}'    Exit For Loop
    [Return]    ${id}

Validate Flow Count
    [Documentation]    Gets the count of the flows pushed to an ovs switch and validates that against expected count
    [Arguments]    ${count}
    ${ovs_flow_count}=    Run Keyword If    '${ciab_local}' == 'False'        Execute Command on Compute Node in CIAB    ${SERVER_IP}    ${head_node}    ${compute_node_hostname}    ovs-ofctl dump-flows br-int | wc -l    ELSE    Execute Command Locally    ssh -q root@${compute_node_hostname} "ovs-ofctl dump-flows br-int | wc -l"
    ${ovs_flow_count}=    Get Line    ${ovs_flow_count}    0
    Should Be Equal As Integers    ${ovs_flow_count}    ${count}

Get Subscriber Root IDs in Use
    [Documentation]    Retrieves information for current subscribers and "blacklists" their subscriber root ids
    @{sr_id_blacklist}=    Create List
    ${resp}=    CORD GET    ${SERVER_IP}    ${VOLT_SUBSCRIBER}
    ${jsondata}=    To Json    ${resp.content}
    ${length}=    Get Length    ${jsondata['items']}
    : FOR    ${INDEX}    IN RANGE    0    ${length}
    \    ${item}=    Get From List    ${jsondata['items']}    ${INDEX}
    \    ${id}=    Get From Dictionary    ${item}    service_specific_id
    \    Append To List    ${sr_id_blacklist}    ${id}
   [Return]    @{sr_id_blacklist}

Get Tags in Use
    [Documentation]    Retrieves information for current active volt tenants and "blacklists" their s/c tags
    @{tag_blacklist}=    Create List
    ${resp}=    CORD GET    ${SERVER_IP}    ${VOLT_TENANT}
    ${jsondata}=    To Json    ${resp.content}
    ${length}=    Get Length    ${jsondata['items']}
    : FOR    ${INDEX}    IN RANGE    0    ${length}
    \    ${item}=    Get From List    ${jsondata['items']}    ${INDEX}
    \    ${s_tag}=    Get From Dictionary    ${item}    s_tag
    \    ${c_tag}=    Get From Dictionary    ${item}    c_tag
    \    Append To List    ${tag_blacklist}    ${s_tag}
    \    Append To List    ${tag_blacklist}    ${c_tag}
   [Return]    @{tag_blacklist}

Get Openstack Info
    [Documentation]    Executes a command in the headnode vm in a CIAB environment where openstack is running
    [Arguments]    ${cmd}
    ${output}=    Run Keyword If    '${ciab_local}' == 'False'    Execute Command on CIAB Server in Specific VM    ${SERVER_IP}    ${head_node}    source /opt/cord_profile/admin-openrc.sh; ${cmd}    strip_line=False    ELSE    Execute Command Locally    . /opt/cord_profile/admin-openrc.sh; ${cmd}
    Log    ${output}
    [Return]    ${output}

Validate Openstack Network
    [Documentation]    Validates that a particular network/subnet exists
    [Arguments]    ${network_name}    ${subnet}    ${destroyed}=False
    ${netlist}=    Get Openstack Info    neutron net-list
    Log    ${netlist}
    ${NET_DICT}=    openstackUtils.Get Neutron Lists    ${netlist}
    Log    ${NET_DICT}
    ${test-net}=    Get From Dictionary    ${NET_DICT}    ${network_name}
    Should Contain    ${test-net}    ${subnet}


Validate Openstack Nova Instance
    [Documentation]    Validates that a particular nova instance/tenant exists
    [Arguments]    ${instance_name}    ${network}    ${destroyed}=False
    ${novalist}=    Get Openstack Info    nova list --all-tenants
    Log    ${novalist}
    Run Keyword If    '${destroyed}' == 'True'    Should Not Contain    ${novalist}    ${instance_name}
    ${INSTANCE_STATUS}=    openstackUtils.Get Instance Status    ${novalist}    ${instance_name}
    Run Keyword If    '${destroyed}' == 'False'    Should Contain    ${INSTANCE_STATUS}    ACTIVE
    ${NOVA_DICT}=    openstackUtils.Get Nova Lists    ${novalist}    ${instance_name}
    Run Keyword If    '${destroyed}' == 'False'    Should Contain    ${NOVA_DICT}    ${network}

Get List of Instances
    ${instances}=    Create List
    Set Suite Variable    ${instances}
    ${resp}=    Cord GET    ${SERVER_IP}    ${CH_CORE_INSTANCES}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${jsondata}=    To Json    ${resp.content}
    Log    ${jsondata}
    ${instance_length}=    Get Length    ${jsondata['items']}
    : FOR    ${INDEX}    IN RANGE    0    ${instance_length}
    \    ${item}=    Get From List    ${jsondata['items']}    ${INDEX}
    \    ${name}=    Get From Dictionary    ${item}    instance_name
    \    Append To List    ${instances}    ${name}
    Log    ${instances}
    Set Suite Variable    ${instance_length}

Get New Instance
    ${new_instance}=    Set Variable    null
    ${resp}=    Cord GET    ${SERVER_IP}    ${CH_CORE_INSTANCES}
    Should Be Equal As Strings    ${resp.status_code}    200
    ${jsondata}=    To Json    ${resp.content}
    Log    ${jsondata}
    ${length}=    Get Length    ${jsondata['items']}
    : FOR    ${INDEX}    IN RANGE    0    ${length}
    \    ${item}=    Get From List    ${jsondata['items']}    ${INDEX}
    \    ${name}=    Get From Dictionary    ${item}    instance_name
    \    ${passed}=    Run Keyword And Return Status    List Should Contain Value    ${instances}    ${name}
    \    ${new_instance}=    Set Variable If    '${passed}' == 'False'    ${name}    ${new_instance}
    Log    ${new_instance}
    Append To List    ${instances}    ${new_instance}
    [Return]    ${new_instance}
