Documentation Test Suite for ITM
Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
Suite Teardown Delete All Sessions
+Test Teardown Get Model Dump ${ODL_SYSTEM_IP} ${bfd_data_models}
Library OperatingSystem
Library String
Library RequestsLibrary
Variables ../../variables/Variables.py
+Variables ../../variables/genius/Modules.py
+Resource ../../libraries/DataModels.robot
Library Collections
Resource ../../libraries/Utils.robot
+Resource ../../libraries/CompareStream.robot
Library re
*** Variables ***
... ${type}
Set Global Variable ${tunnel-2}
${tunnel-type}= Set Variable type: vxlan
- Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/ headers=${ACCEPT_XML}
- Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/ headers=${ACCEPT_XML}
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/
Log >>>>OVS Validation in Switch 1 for Tunnel Created<<<<<
Wait Until Keyword Succeeds 40 10 Ovs Verification 2 Dpn ${conn_id_1} ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP}
... ${tunnel-1} ${tunnel-type}
Wait Until Keyword Succeeds 40 10 Ovs Verification 2 Dpn ${conn_id_2} ${TOOLS_SYSTEM_2_IP} ${TOOLS_SYSTEM_IP}
... ${tunnel-2} ${tunnel-type}
Log >>>> Getting Network Topology Operational <<<<<<
- ${url-2}= Set Variable ${OPERATIONAL_API}/network-topology:network-topology/
${resp} Wait Until Keyword Succeeds 40 10 Get Network Topology with Tunnel ${Bridge-1} ${Bridge-2}
- ... ${tunnel-1} ${tunnel-2} ${url-2}
+ ... ${tunnel-1} ${tunnel-2} ${OPERATIONAL_TOPO_API}
Log >>>>Validating Interface 1 & 2 states<<<<
${return} Validate interface state ${tunnel-1} ${Dpn_id_1} ${tunnel-2} ${Dpn_id_2}
log ${return}
${lower-layer-if-2} Get from List ${return} 2
${port-num-2} Get From List ${return} 3
Log >>>>>Verify Oper data base of Interface state<<<<<
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/ headers=${ACCEPT_XML}
- Log ${resp.content}
+ ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${Dpn_id_1} ${tunnel-1}
Should Contain ${resp.content} ${Dpn_id_2} ${tunnel-2}
Log >>>>> Checking Entry in table 0 on OVS 2<<<<<
${check-4} Wait Until Keyword Succeeds 40 10 Check Table0 Entry for 2 Dpn ${conn_id_2} ${Bridge-2}
... ${port-num-2}
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/opendaylight-inventory:nodes/ headers=${ACCEPT_XML}
+ ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/opendaylight-inventory:nodes/
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${lower-layer-if-1} ${lower-layer-if-2}
- Log ${resp.content}
Delete and Verify VTEP -No Vlan
[Documentation] This Delete testcase , deletes the ITM tunnel created between 2 dpns.
Wait Until Keyword Succeeds 40 10 Verify Data Base after Delete ${Dpn_id_1} ${Dpn_id_2} ${tunnel-1}
... ${tunnel-2}
+Create and Verify VTEP IPv6 - No Vlan
+ [Documentation] This testcase creates a Internal Transport Manager - ITM tunnel between 2 DPNs without VLAN and Gateway configured in Json.
+ Pass Execution If "${ODL_STREAM}" == "boron" IPV6 support is not available in boron or before
+ ${Dpn_id_1} Get Dpn Ids ${conn_id_1}
+ ${Dpn_id_2} Get Dpn Ids ${conn_id_2}
+ Set Global Variable ${Dpn_id_1}
+ Set Global Variable ${Dpn_id_2}
+ ${vlan}= Set Variable 0
+ ${gateway-ip}= Set Variable ::
+ ${TOOLS_SYSTEM_IP} Set Variable fd96:2a25:4ad3:3c7d:0:0:0:1000
+ ${TOOLS_SYSTEM_2_IP} Set Variable fd96:2a25:4ad3:3c7d:0:0:0:2000
+ Create Vteps IPv6 ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP} ${vlan} ${gateway-ip}
+ Wait Until Keyword Succeeds 40 10 Get ITM ${itm_created[0]} ${subnet} ${vlan}
+ ... ${Dpn_id_1} ${TOOLS_SYSTEM_IP} ${Dpn_id_2} ${TOOLS_SYSTEM_2_IP}
+ ${type} set variable odl-interface:tunnel-type-vxlan
+ ${tunnel-1} Wait Until Keyword Succeeds 40 10 Get Tunnel ${Dpn_id_1} ${Dpn_id_2}
+ ... ${type}
+ Set Global Variable ${tunnel-1}
+ ${tunnel-2} Wait Until Keyword Succeeds 40 10 Get Tunnel ${Dpn_id_2} ${Dpn_id_1}
+ ... ${type}
+ Set Global Variable ${tunnel-2}
+ ${tunnel-type}= Set Variable type: vxlan
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/ headers=${ACCEPT_XML}
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/ headers=${ACCEPT_XML}
+ Log >>>>OVS Validation in Switch 1 for Tunnel Created<<<<<
+ Wait Until Keyword Succeeds 40 10 Ovs Verification 2 Dpn ${conn_id_1} ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP}
+ ... ${tunnel-1} ${tunnel-type}
+ Log >>>>OVS Validation in Switch 2 for Tunnel Created<<<<<
+ Wait Until Keyword Succeeds 40 10 Ovs Verification 2 Dpn ${conn_id_2} ${TOOLS_SYSTEM_2_IP} ${TOOLS_SYSTEM_IP}
+ ... ${tunnel-2} ${tunnel-type}
+ Log >>>> Getting Network Topology Operational <<<<<<
+ ${resp} Wait Until Keyword Succeeds 40 10 Get Network Topology with Tunnel ${Bridge-1} ${Bridge-2}
+ ... ${tunnel-1} ${tunnel-2} ${OPERATIONAL_TOPO_API}
+
+Delete and Verify VTEP IPv6 -No Vlan
+ [Documentation] This Delete testcase , deletes the ITM tunnel created between 2 dpns.
+ Pass Execution If "${ODL_STREAM}" == "boron" IPV6 support is not available in boron or before
+ Remove All Elements At URI And Verify ${CONFIG_API}/itm:transport-zones/transport-zone/${itm_created[0]}/
+ Wait Until Keyword Succeeds 40 10 Verify Data Base after Delete ${Dpn_id_1} ${Dpn_id_2} ${tunnel-1}
+ ... ${tunnel-2}
+
Create and Verify VTEP-Vlan
[Documentation] This testcase creates a Internal Transport Manager - ITM tunnel between 2 DPNs with VLAN and \ without Gateway configured in Json.
${vlan}= Set Variable 100
log ${tunnel-4}
Set Global Variable ${tunnel-4}
${tunnel-type}= Set Variable type: vxlan
- Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/ headers=${ACCEPT_XML}
- Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/ headers=${ACCEPT_XML}
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/
Log >>>>OVS Validation in Switch 1 for Tunnel Created<<<<<
Wait Until Keyword Succeeds 40 10 Ovs Verification 2 Dpn ${conn_id_1} ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP}
... ${tunnel-3} ${tunnel-type}
${port-num-2} Get From List ${return} 3
Log >>>>>Verify Oper data base of Interface state<<<<<
${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/
- Log ${resp.content}
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Contain ${resp.content} ${Dpn_id_1} ${tunnel-3}
Should Contain ${resp.content} ${Dpn_id_2} ${tunnel-4}
Log >>>>> Checking Entry in table 0 on OVS 1<<<<<
Wait Until Keyword Succeeds 40 10 Check Table0 Entry for 2 Dpn ${conn_id_1} ${Bridge-1} ${port-num-1}
Log >>>>> Checking Entry in table 0 on OVS \ 2<<<<<
Wait Until Keyword Succeeds 40 10 Check Table0 Entry for 2 Dpn ${conn_id_2} ${Bridge-2} ${port-num-2}
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/opendaylight-inventory:nodes/ headers=${ACCEPT_XML}
- Log ${resp.content}
+ ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/opendaylight-inventory:nodes/
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${lower-layer-if-2} ${lower-layer-if-1}
log ${tunnel-6}
Set Global Variable ${tunnel-6}
${tunnel-type}= Set Variable type: vxlan
- Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/ headers=${ACCEPT_XML}
- Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/ headers=${ACCEPT_XML}
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/
+ Wait Until Keyword Succeeds 40 5 Get Data From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/
Log >>>>OVS Validation in Switch 1 for Tunnel Created<<<<<
${check-1} Wait Until Keyword Succeeds 40 10 Ovs Verification 2 Dpn ${conn_id_1} ${TOOLS_SYSTEM_IP}
... ${TOOLS_SYSTEM_2_IP} ${tunnel-5} ${tunnel-type}
${check-2} Wait Until Keyword Succeeds 40 10 Ovs Verification 2 Dpn ${conn_id_2} ${TOOLS_SYSTEM_2_IP}
... ${TOOLS_SYSTEM_IP} ${tunnel-6} ${tunnel-type}
Log ${check-2}
- ${url-2}= Set Variable ${OPERATIONAL_API}/network-topology:network-topology/
${resp} Wait Until Keyword Succeeds 40 10 Get Network Topology with Tunnel ${Bridge-1} ${Bridge-2}
- ... ${tunnel-5} ${tunnel-6} ${url-2}
+ ... ${tunnel-5} ${tunnel-6} ${OPERATIONAL_TOPO_API}
Log ${resp}
${return} Validate interface state ${tunnel-5} ${Dpn_id_1} ${tunnel-6} ${Dpn_id_2}
log ${return}
${lower-layer-if-2} Get from List ${return} 2
${port-num-2} Get From List ${return} 3
${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/
- Log ${resp.content}
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Contain ${resp.content} ${Dpn_id_1} ${tunnel-5}
Should Contain ${resp.content} ${Dpn_id_2} ${tunnel-6}
${check-3} Wait Until Keyword Succeeds 40 10 Check Table0 Entry for 2 Dpn ${conn_id_1} ${Bridge-1}
${check-4} Wait Until Keyword Succeeds 40 10 Check Table0 Entry for 2 Dpn ${conn_id_2} ${Bridge-2}
... ${port-num-2}
Log ${check-4}
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/opendaylight-inventory:nodes/ headers=${ACCEPT_XML}
+ ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/opendaylight-inventory:nodes/
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${lower-layer-if-2} ${lower-layer-if-1}
- Log ${resp.content}
Delete VTEP -Vlan and gateway
- [Documentation] This Delete testcase deletes the ITM tunnel created between 2 dpns.
+ [Documentation] This testcase deletes the ITM tunnel created between 2 dpns.
Remove All Elements At URI And Verify ${CONFIG_API}/itm:transport-zones/transport-zone/${itm_created[0]}/
Wait Until Keyword Succeeds 40 10 Verify Data Base after Delete ${Dpn_id_1} ${Dpn_id_2} ${tunnel-5}
... ${tunnel-6}
${vlan}= Set Variable ${vlan}
${gateway-ip}= Set Variable ${gateway-ip}
${body} set json ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP} ${vlan} ${gateway-ip} ${subnet}
- ${resp} RequestsLibrary.Post Request session ${CONFIG_API}/itm:transport-zones/ data=${body}
- Log ${resp.content}
- Log ${resp.status_code}
- should be equal as strings ${resp.status_code} 204
+ Post Log Check ${CONFIG_API}/itm:transport-zones/ ${body} 204
+
+Create Vteps IPv6
+ [Arguments] ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP} ${vlan} ${gateway-ip}
+ [Documentation] This keyword creates VTEPs between ${TOOLS_SYSTEM_IP} and ${TOOLS_SYSTEM_2_IP}
+ ${body} OperatingSystem.Get File ${genius_config_dir}/Itm_creation_no_vlan.json
+ ${substr} Should Match Regexp ${TOOLS_SYSTEM_IP} [0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:[0-9a-fA-F]{1,4}:
+ ${subnet} Catenate ${substr}0
+ Log ${subnet}
+ Set Global Variable ${subnet}
+ ${vlan}= Set Variable ${vlan}
+ ${gateway-ip}= Set Variable ${gateway-ip}
+ ${body} set json ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_2_IP} ${vlan} ${gateway-ip} ${subnet}
+ Post Log Check ${CONFIG_API}/itm:transport-zones/ ${body} 204
Get Dpn Ids
[Arguments] ${connection_id}
Get Tunnel
[Arguments] ${src} ${dst} ${type}
[Documentation] This Keyword Gets the Tunnel /Interface name which has been created between 2 DPNS by passing source , destination DPN Ids along with the type of tunnel which is configured.
- ${resp} RequestsLibrary.Get Request session ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${src}/${dst}/${type}/ headers=${ACCEPT_XML}
+ ${resp} RequestsLibrary.Get Request session ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${src}/${dst}/${type}/
Log ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${src}/${dst}/
- Log ${resp.content}
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${src} ${dst} TUNNEL:
- ${result} re.sub <.*?> , ${resp.content}
- Log ${result}
- @{resp_array} Split String ${result} ,,
- ${Tunnel} Get From List ${resp_array} 4
- Log ${Tunnel}
- [Return] ${Tunnel}
+ ${json}= evaluate json.loads('''${resp.content}''') json
+ log to console \nOriginal JSON:\n${json}
+ ${expected_tunnel_interface_name} = Set_Variable_If_At_Least_Carbon tunnel-interface-names tunnel-interface-name
+ ${Tunnels} Collections.Get From Dictionary ${json["internal-tunnel"][0]} ${expected_tunnel_interface_name}
+ Log To Console ${Tunnels}
+ Log ${Tunnels}
+ ${tunnel_interface} = Set_Variable_If_At_Least_Carbon ${Tunnels[0]} ${Tunnels}
+ [Return] ${tunnel_interface}
Validate interface state
[Arguments] ${tunnel-1} ${dpid-1} ${tunnel-2} ${dpid-2}
Check Table0 Entry for 2 Dpn
[Arguments] ${connection_id} ${Bridgename} ${port-num1}
- [Documentation] Checks the Table 0 entry in the OVS when flows are dumped in it.
+ [Documentation] Checks the Table 0 entry in the OVS when flows are dumped.
Switch Connection ${connection_id}
Log ${connection_id}
${check} Execute Command sudo ovs-ofctl -O OpenFlow13 dump-flows ${Bridgename}
[Arguments] ${tunnel}
[Documentation] Check for the Tunnel / Interface absence in OPERATIONAL data base of IETF interface after ITM transport zone is deleted.
Log ${tunnel}
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/interface/${tunnel}/ headers=${ACCEPT_XML}
- Log ${resp.content}
+ ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/interface/${tunnel}/
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Be Equal As Strings ${resp.status_code} 404
Should not contain ${resp.content} ${tunnel}
check-Tunnel-delete-on-ovs
[Arguments] ${connection-id} ${tunnel}
+ [Documentation] Verifies the Tunnel is deleted from OVS
Log ${tunnel}
Switch Connection ${connection-id}
Log ${connection-id}
check interface status
[Arguments] ${tunnel} ${dpid}
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/interface/${tunnel}/ headers=${ACCEPT_XML}
+ [Documentation] Verifies the operational state of the interface .
+ ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/interface/${tunnel}/
Log ${OPERATIONAL_API}/ietf-interfaces:interfaces-state/interface/${tunnel}/
- Log ${resp.content}
+ ${respjson} RequestsLibrary.To Json ${resp.content} pretty_print=True
+ Log ${respjson}
Should Be Equal As Strings ${resp.status_code} 200
Should not contain ${resp.content} down
Should Contain ${resp.content} ${tunnel} up up
Verify Data Base after Delete
[Arguments] ${Dpn_id_1} ${Dpn_id_2} ${tunnel-1} ${tunnel-2}
+ [Documentation] Verifies the config database after the Tunnel deletion is done.
${type} set variable odl-interface:tunnel-type-vxlan
- No Content From URI session ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${Dpn_id_1}/${Dpn_id_2}/${type}/ headers=${ACCEPT_XML}
- No Content From URI session ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${Dpn_id_2}/${Dpn_id_1}/${type}/ headers=${ACCEPT_XML}
- No Content From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/ headers=${ACCEPT_XML}
- No Content From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/ headers=${ACCEPT_XML}
- ${resp_7} RequestsLibrary.Get Request session ${CONFIG_API}/ietf-interfaces:interfaces/ headers=${ACCEPT_XML}
+ No Content From URI session ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${Dpn_id_1}/${Dpn_id_2}/${type}/
+ No Content From URI session ${CONFIG_API}/itm-state:tunnel-list/internal-tunnel/${Dpn_id_2}/${Dpn_id_1}/${type}/
+ No Content From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_1}/
+ No Content From URI session ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${Dpn_id_2}/
+ ${resp_7} RequestsLibrary.Get Request session ${CONFIG_API}/ietf-interfaces:interfaces/
Run Keyword if '${resp_7.content}'=='404' Response is 404
Run Keyword if '${resp_7.content}'=='200' Response is 200
${resp_8} Wait Until Keyword Succeeds 40 10 Get Network Topology without Tunnel ${CONFIG_TOPO_API} ${tunnel-1}
${Ovs-del-2} Wait Until Keyword Succeeds 40 10 check-Tunnel-delete-on-ovs ${conn_id_2} ${tunnel-2}
Log ${Ovs-del-2}
Log >>>>>>> Getting Network Topology Config without Tunnels<<<<<<<
- ${url-2}= Set variable ${OPERATIONAL_API}/network-topology:network-topology/
- Wait Until Keyword Succeeds 40 10 Get Network Topology without Tunnel ${url-2} ${tunnel-1} ${tunnel-2}
+ Wait Until Keyword Succeeds 40 10 Get Network Topology without Tunnel ${OPERATIONAL_TOPO_API} ${tunnel-1} ${tunnel-2}
Wait Until Keyword Succeeds 40 10 Validate interface state Delete ${tunnel-1}
Wait Until Keyword Succeeds 40 10 Validate interface state Delete ${tunnel-2}