*** Settings ***
-Documentation Test Suite for verification of HWVTEP usecases
-Suite Setup Basic Suite Setup
-Suite Teardown Basic Suite Teardown
-Test Teardown Get L2gw Debug Info
-Resource ../../libraries/L2GatewayOperations.robot
-Resource ../../libraries/CompareStream.robot
+Documentation Test Suite for verification of HWVTEP usecases
+
+Resource ../../libraries/L2GatewayOperations.robot
+Resource ../../libraries/CompareStream.robot
+
+Suite Setup Basic Suite Setup
+Suite Teardown Basic Suite Teardown
+Test Teardown Get L2gw Debug Info
+
*** Test Cases ***
TC01 Configure Hwvtep Manager OVS Manager Controller And Verify
Should Contain ${output} ${SUBNET_1}
OpenStackOperations.Create And Configure Security Group ${SECURITY_GROUP_L2GW}
OpenStackOperations.Create Port ${NET_1} ${OVS_PORT_1} sg=${SECURITY_GROUP_L2GW}
- OpenStackOperations.Create Neutron Port With Additional Params ${NET_1} ${HWVTEP_PORT_1} ${SECURITY_GROUP_L2GW_NONE}
+ OpenStackOperations.Create Neutron Port With Additional Params
+ ... ${NET_1}
+ ... ${HWVTEP_PORT_1}
+ ... ${SECURITY_GROUP_L2GW_NONE}
${port_mac}= Get Port Mac ${OVS_PORT_1} #port_mac[0]
${port_ip}= Get Port Ip ${OVS_PORT_1} #port_ip[0]
Append To List ${port_mac_list} ${port_mac}
TC03 Update Port For Hwvtep And Attach Port To Namespace
[Documentation] Update the Neutron Ports for required to connect to HWVTEP and attach that port to tap port in namespace
L2GatewayOperations.Update Port For Hwvtep ${HWVTEP_PORT_1}
- Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Attach Port To Hwvtep Namespace ${port_mac_list[1]} ${HWVTEP_NS1} ${NS_TAP1}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 2s
+ ... L2GatewayOperations.Attach Port To Hwvtep Namespace
+ ... ${port_mac_list[1]}
+ ... ${HWVTEP_NS1}
+ ... ${NS_TAP1}
TC04 Create Vms On Compute Node
[Documentation] Create VM on compute node and verify that VM got IP address
# FIXME! Don't need this in queens, but do in earlier releases
OpenStackOperations.Create Nano Flavor
- OpenStackOperations.Create Vm Instance With Port On Compute Node ${OVS_PORT_1} ${OVS_VM1_NAME} ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP_L2GW}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node
+ ... ${OVS_PORT_1}
+ ... ${OVS_VM1_NAME}
+ ... ${OS_CMP1_HOSTNAME}
+ ... sg=${SECURITY_GROUP_L2GW}
${vm_ip}= Wait Until Keyword Succeeds 60s 2s L2GatewayOperations.Verify Nova VM IP ${OVS_VM1_NAME}
Log ${vm_ip}
Should Contain ${vm_ip} ${port_ip_list[0]}
[Documentation] Create L2GW and Connection using Neutron CLI. Verify info in hardware_vtep db in HWVTEP emulator.
${output}= L2GatewayOperations.Create Verify L2Gateway ${HWVTEP_BRIDGE} ${NS_PORT1} ${L2GW_NAME1}
Log ${output}
- ${output}= Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Create Verify L2Gateway Connection ${L2GW_NAME1} ${NET_1}
+ ${output}= Wait Until Keyword Succeeds
+ ... 30s
+ ... 2s
+ ... L2GatewayOperations.Create Verify L2Gateway Connection
+ ... ${L2GW_NAME1}
+ ... ${NET_1}
Log ${output}
Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Verify Ovs Tunnel ${HWVTEP_IP} ${OVS_IP}
${output}= ITM Get Tunnels
Log ${output}
Should Contain ${output} physicalswitch/${HWVTEP_BRIDGE}
- Wait Until Keyword Succeeds 30s 1s L2GatewayOperations.Verify Vtep List ${hwvtep_conn_id} ${TUNNEL_TABLE} enable="true"
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 1s
+ ... L2GatewayOperations.Verify Vtep List
+ ... ${hwvtep_conn_id}
+ ... ${TUNNEL_TABLE}
+ ... enable="true"
${phy_port_out}= Get Vtep List ${PHYSICAL_PORT_TABLE}
Validate Regexp In String ${phy_port_out} ${VLAN_BINDING_REGEX} 1
${list}= Create List ${OVS_IP} ${HWVTEP_IP}
- Wait Until Keyword Succeeds 30s 1s L2GatewayOperations.Verify Vtep List ${hwvtep_conn_id} ${PHYSICAL_LOCATOR_TABLE} @{list}
- Wait Until Keyword Succeeds 30s 1s L2GatewayOperations.Verify Vtep List ${hwvtep_conn_id} ${UCAST_MACS_REMOTE_TABLE} ${port_mac_list[0]}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 1s
+ ... L2GatewayOperations.Verify Vtep List
+ ... ${hwvtep_conn_id}
+ ... ${PHYSICAL_LOCATOR_TABLE}
+ ... @{list}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 1s
+ ... L2GatewayOperations.Verify Vtep List
+ ... ${hwvtep_conn_id}
+ ... ${UCAST_MACS_REMOTE_TABLE}
+ ... ${port_mac_list[0]}
TC06 Dhcp Ip Allocation For Hwvtep Tap Port
[Documentation] Verify that HWVTEP port gets an IP address
- Wait Until Keyword Succeeds 180s 10s L2GatewayOperations.Namespace Dhclient Verify ${HWVTEP_NS1} ${NS_TAP1} ${port_ip_list[1]}
+ Wait Until Keyword Succeeds
+ ... 180s
+ ... 10s
+ ... L2GatewayOperations.Namespace Dhclient Verify
+ ... ${HWVTEP_NS1}
+ ... ${NS_TAP1}
+ ... ${port_ip_list[1]}
TC07 Verify Ping From Compute Node Vm To Hwvtep
[Documentation] Verify that VM on Compute Node can ping HWVTEP port
- ${output}= Wait Until Keyword Succeeds 60s 10s Execute Command on VM Instance ${NET_1} ${port_ip_list[0]}
+ ${output}= Wait Until Keyword Succeeds
+ ... 60s
+ ... 10s
+ ... Execute Command on VM Instance
+ ... ${NET_1}
+ ... ${port_ip_list[0]}
... ping -c 3 ${port_ip_list[1]}
Log ${output}
Should Not Contain ${output} ${PACKET_LOSS}
${src_mac_list}= Create List ${port_mac_list[0]}
${dst_mac_list}= Create List ${port_mac_list[1]}
- Wait Until Keyword Succeeds 30s 5s L2GatewayOperations.Verify Elan Flow Entries ${OVS_IP} ${src_mac_list} ${dst_mac_list}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... L2GatewayOperations.Verify Elan Flow Entries
+ ... ${OVS_IP}
+ ... ${src_mac_list}
+ ... ${dst_mac_list}
TC08 Ping Verification From Namespace Tap To Ovs Vm
[Documentation] Verify that HWVTEP port can ping VM on compute node
- Wait Until Keyword Succeeds 30s 5s L2GatewayOperations.Verify Ping In Namespace Extra Timeout ${HWVTEP_NS1} ${port_mac_list[1]} ${port_ip_list[0]}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... L2GatewayOperations.Verify Ping In Namespace Extra Timeout
+ ... ${HWVTEP_NS1}
+ ... ${port_mac_list[1]}
+ ... ${port_ip_list[0]}
TC09 Additional Network Subnet Port Creation
[Documentation] Create 2nd network and ports
${output}= OpenStackOperations.List Subnets
Should Contain ${output} ${SUBNET_2}
OpenStackOperations.Create Port ${NET_2} ${OVS_PORT_2} sg=${SECURITY_GROUP_L2GW}
- OpenStackOperations.Create Neutron Port With Additional Params ${NET_2} ${HWVTEP_PORT_2} ${SECURITY_GROUP_L2GW_NONE}
+ OpenStackOperations.Create Neutron Port With Additional Params
+ ... ${NET_2}
+ ... ${HWVTEP_PORT_2}
+ ... ${SECURITY_GROUP_L2GW_NONE}
${port_mac}= Get Port Mac ${OVS_PORT_2} #port_mac[2]
${port_ip}= Get Port Ip ${OVS_PORT_2} #port_ip[2]
Append To List ${port_mac_list} ${port_mac}
TC10 Update And Attach Second Port To Hwvtep Create L2gw Connection
[Documentation] Update ports in Neutron so they can be connected to HWVTEP, create 2nd L2GW and Connection, and Verify
L2GatewayOperations.Update Port For Hwvtep ${HWVTEP_PORT_2}
- Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Attach Port To Hwvtep Namespace ${port_mac_list[3]} ${HWVTEP_NS2} ${NS2_TAP1}
- OpenStackOperations.Create Vm Instance With Port On Compute Node ${OVS_PORT_2} ${OVS_VM2_NAME} ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP_L2GW}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 2s
+ ... L2GatewayOperations.Attach Port To Hwvtep Namespace
+ ... ${port_mac_list[3]}
+ ... ${HWVTEP_NS2}
+ ... ${NS2_TAP1}
+ OpenStackOperations.Create Vm Instance With Port On Compute Node
+ ... ${OVS_PORT_2}
+ ... ${OVS_VM2_NAME}
+ ... ${OS_CMP1_HOSTNAME}
+ ... sg=${SECURITY_GROUP_L2GW}
${vm_ip}= Wait Until Keyword Succeeds 60s 2s L2GatewayOperations.Verify Nova VM IP ${OVS_VM2_NAME}
Log ${vm_ip}
Should Contain ${vm_ip} ${port_ip_list[2]}
TC11 Dhcp Ip Allocation And Ping Validation Within Second Network
[Documentation] Verify that port in namespace got an IP. Verify flow entries, verify IP connectivity between HWVTEP port and VM
- Wait Until Keyword Succeeds 180s 10s L2GatewayOperations.Namespace Dhclient Verify ${HWVTEP_NS2} ${NS2_TAP1} ${port_ip_list[3]}
- ${output}= Wait Until Keyword Succeeds 60s 10s Execute Command on VM Instance ${NET_2} ${port_ip_list[2]}
+ Wait Until Keyword Succeeds
+ ... 180s
+ ... 10s
+ ... L2GatewayOperations.Namespace Dhclient Verify
+ ... ${HWVTEP_NS2}
+ ... ${NS2_TAP1}
+ ... ${port_ip_list[3]}
+ ${output}= Wait Until Keyword Succeeds
+ ... 60s
+ ... 10s
+ ... Execute Command on VM Instance
+ ... ${NET_2}
+ ... ${port_ip_list[2]}
... ping -c 3 ${port_ip_list[3]}
Log ${output}
Should Not Contain ${output} ${PACKET_LOSS}
${src_mac_list}= Create List ${port_mac_list[2]}
${dst_mac_list}= Create List ${port_mac_list[3]}
- Wait Until Keyword Succeeds 30s 5s L2GatewayOperations.Verify Elan Flow Entries ${OVS_IP} ${src_mac_list} ${dst_mac_list}
- Wait Until Keyword Succeeds 30s 5s L2GatewayOperations.Verify Ping In Namespace Extra Timeout ${HWVTEP_NS2} ${port_mac_list[3]} ${port_ip_list[2]}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... L2GatewayOperations.Verify Elan Flow Entries
+ ... ${OVS_IP}
+ ... ${src_mac_list}
+ ... ${dst_mac_list}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... L2GatewayOperations.Verify Ping In Namespace Extra Timeout
+ ... ${HWVTEP_NS2}
+ ... ${port_mac_list[3]}
+ ... ${port_ip_list[2]}
TC12 Ping Between Vm In Second Network To Namespace In First Network
[Documentation] Verify IP Connectivity between VM in 2nd network to NS in 1st network
- ${output}= Wait Until Keyword Succeeds 60s 10s Execute Command on VM Instance ${NET_2} ${port_ip_list[2]}
+ ${output}= Wait Until Keyword Succeeds
+ ... 60s
+ ... 10s
+ ... Execute Command on VM Instance
+ ... ${NET_2}
+ ... ${port_ip_list[2]}
... ping -c 3 ${port_ip_list[1]}
Log ${output}
Should Contain ${output} ${PACKET_LOSS}
TC13 Ping Between Namespace In Second Network To Vm In First Network
[Documentation] Verify IP Connectivity between port in NS in 2nd network to VM in 1st network
- Wait Until Keyword Succeeds 30s 5s L2GatewayOperations.Verify Ping Fails In Namespace ${HWVTEP_NS2} ${port_mac_list[3]} ${port_ip_list[0]}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... L2GatewayOperations.Verify Ping Fails In Namespace
+ ... ${HWVTEP_NS2}
+ ... ${port_mac_list[3]}
+ ... ${port_ip_list[0]}
TC14 Create, Update And Attach 2nd Neutron Port to Hwvtep Namespace 1
[Documentation] Create and attach 2nd port to HWVTEP in network 1
CompareStream.Run_Keyword_If_At_Most_Nitrogen BuiltIn.Pass_Execution Only run on oxygen and later
- OpenStackOperations.Create Neutron Port With Additional Params ${NET_1} ${HWVTEP_PORT_3} ${SECURITY_GROUP_L2GW_NONE}
+ OpenStackOperations.Create Neutron Port With Additional Params
+ ... ${NET_1}
+ ... ${HWVTEP_PORT_3}
+ ... ${SECURITY_GROUP_L2GW_NONE}
${port_mac}= Get Port Mac ${HWVTEP_PORT_3} #port_mac[4]
${port_ip}= Get Port Ip ${HWVTEP_PORT_3} #port_ip[4]
Append To List ${port_mac_list} ${port_mac}
Append To List ${port_ip_list} ${port_ip}
Namespace Add Port Hwvtep1
L2GatewayOperations.Update Port For Hwvtep ${HWVTEP_PORT_3}
- Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Attach Port To Hwvtep Namespace ${port_mac_list[4]} ${HWVTEP_NS1} ${NS_TAP1}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 2s
+ ... L2GatewayOperations.Attach Port To Hwvtep Namespace
+ ... ${port_mac_list[4]}
+ ... ${HWVTEP_NS1}
+ ... ${NS_TAP1}
TC15 Update Existing L2Gateway With 2nd Port And Verify
[Documentation] Add the new port ${NS_PORT3} to existing L2GW ${L2GW_NAME1} that has an existing connection. ${NS_PORT1} is already attached, adding ${NS_PORT3}
- ${output}= Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Update And Verify L2Gateway ${HWVTEP_BRIDGE} ${L2GW_NAME1}
- ... ${NS_PORT1} ${NS_PORT3}
+ ${output}= Wait Until Keyword Succeeds
+ ... 30s
+ ... 2s
+ ... L2GatewayOperations.Update And Verify L2Gateway
+ ... ${HWVTEP_BRIDGE}
+ ... ${L2GW_NAME1}
+ ... ${NS_PORT1}
+ ... ${NS_PORT3}
TC16 Verify L2Gateway Connection
[Documentation] Verify the L2GW connection has the 2nd port. Verify db in hardware vtep emulator tables.
- Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Verify L2Gateway Connection ${L2GW_NAME1} ${NET_1}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 2s
+ ... L2GatewayOperations.Verify L2Gateway Connection
+ ... ${L2GW_NAME1}
+ ... ${NET_1}
Wait Until Keyword Succeeds 30s 2s L2GatewayOperations.Verify Ovs Tunnel ${HWVTEP_IP} ${OVS_IP}
${output}= ITM Get Tunnels
Log ${output}
Should Contain ${output} physicalswitch/${HWVTEP_BRIDGE}
- Wait Until Keyword Succeeds 30s 1s L2GatewayOperations.Verify Vtep List ${hwvtep_conn_id} ${TUNNEL_TABLE} enable="true"
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 1s
+ ... L2GatewayOperations.Verify Vtep List
+ ... ${hwvtep_conn_id}
+ ... ${TUNNEL_TABLE}
+ ... enable="true"
${phy_port_out}= Get Vtep List ${PHYSICAL_PORT_TABLE}
Validate Regexp In String ${phy_port_out} ${VLAN_BINDING_REGEX} 3
${list}= Create List ${OVS_IP} ${HWVTEP_IP}
- Wait Until Keyword Succeeds 30s 1s L2GatewayOperations.Verify Vtep List ${hwvtep_conn_id} ${PHYSICAL_LOCATOR_TABLE} @{list}
- Wait Until Keyword Succeeds 30s 1s L2GatewayOperations.Verify Vtep List ${hwvtep_conn_id} ${UCAST_MACS_REMOTE_TABLE} ${port_mac_list[0]}
- Wait Until Keyword Succeeds 30s 1s L2GatewayOperations.Verify Vtep List ${hwvtep_conn_id} ${UCAST_MACS_REMOTE_TABLE} ${port_mac_list[2]}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 1s
+ ... L2GatewayOperations.Verify Vtep List
+ ... ${hwvtep_conn_id}
+ ... ${PHYSICAL_LOCATOR_TABLE}
+ ... @{list}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 1s
+ ... L2GatewayOperations.Verify Vtep List
+ ... ${hwvtep_conn_id}
+ ... ${UCAST_MACS_REMOTE_TABLE}
+ ... ${port_mac_list[0]}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 1s
+ ... L2GatewayOperations.Verify Vtep List
+ ... ${hwvtep_conn_id}
+ ... ${UCAST_MACS_REMOTE_TABLE}
+ ... ${port_mac_list[2]}
TC17 Dhcp Ip Allocation For Hwvtep Tap Port
[Documentation] Verify the 2nd HWVTEP port was able to get an IP address
- Wait Until Keyword Succeeds 180s 10s L2GatewayOperations.Namespace Dhclient Verify ${HWVTEP_NS1} ${NS_TAP1} ${port_ip_list[4]}
+ Wait Until Keyword Succeeds
+ ... 180s
+ ... 10s
+ ... L2GatewayOperations.Namespace Dhclient Verify
+ ... ${HWVTEP_NS1}
+ ... ${NS_TAP1}
+ ... ${port_ip_list[4]}
TC18 Verify Ping From Compute Node Vm To Hwvtep Port 2
[Documentation] Verify IP connectivity between VM in net1 and 2nd HWVTEP port in net 1
- ${output}= Wait Until Keyword Succeeds 60s 10s Execute Command on VM Instance ${NET_1} ${port_ip_list[0]}
+ ${output}= Wait Until Keyword Succeeds
+ ... 60s
+ ... 10s
+ ... Execute Command on VM Instance
+ ... ${NET_1}
+ ... ${port_ip_list[0]}
... ping -c 3 ${port_ip_list[4]}
Log ${output}
Should Not Contain ${output} ${PACKET_LOSS}
${src_mac_list}= Create List ${port_mac_list[0]}
${dst_mac_list}= Create List ${port_mac_list[4]}
- Wait Until Keyword Succeeds 30s 5s L2GatewayOperations.Verify Elan Flow Entries ${OVS_IP} ${src_mac_list} ${dst_mac_list}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... L2GatewayOperations.Verify Elan Flow Entries
+ ... ${OVS_IP}
+ ... ${src_mac_list}
+ ... ${dst_mac_list}
TC19 Ping Verification From Namespace Tap To Ovs Vm
[Documentation] Verify IP connectivity between 2nd HWVTEP port and VM in compute node
- Wait Until Keyword Succeeds 30s 5s L2GatewayOperations.Verify Ping In Namespace Extra Timeout ${HWVTEP_NS1} ${port_mac_list[4]} ${port_ip_list[0]}
+ Wait Until Keyword Succeeds
+ ... 30s
+ ... 5s
+ ... L2GatewayOperations.Verify Ping In Namespace Extra Timeout
+ ... ${HWVTEP_NS1}
+ ... ${port_mac_list[4]}
+ ... ${port_ip_list[0]}
TC99 Cleanup L2Gateway Connection Itm Tunnel Port Subnet And Network
L2GatewayOperations.Delete L2Gateway Connection ${L2GW_NAME1}
OpenStackOperations.Delete Network ${NET_1}
OpenStackOperations.Delete Network ${NET_2}
+
*** Keywords ***
Basic Suite Setup
[Documentation] Basic Suite Setup required for the HWVTEP Test Suite
Namespace Cleanup
Hwvtep Cleanup
- [Arguments] ${conn_id} ${hwvtep_bridge}
[Documentation] Cleanup any existing VTEP, VSWITCHD or OVSDB processes.
+ [Arguments] ${conn_id} ${hwvtep_bridge}
Switch Connection ${conn_id}
Write Commands Until Prompt ${DEL_OVS_BRIDGE} ${hwvtep_bridge} 30s
Write Commands Until Prompt ${KILL_VTEP_PROC} 30s
Log ${stdout}
Hwvtep Initiate
- [Arguments] ${conn_id} ${hwvtep_ip} ${hwvtep_bridge}
[Documentation] Configure the Hwvtep Emulation
+ [Arguments] ${conn_id} ${hwvtep_ip} ${hwvtep_bridge}
Switch Connection ${conn_id}
Write Commands Until Prompt ${CREATE_OVSDB} 30s
Write Commands Until Prompt ${CREATE VTEP} 30s
Should Contain ${stdout} ${NS_PORT2}
Create And Set Hwvtep Connection Id
- [Arguments] ${hwvtep_ip}
[Documentation] To create connection and return connection id for hwvtep_ip received
+ [Arguments] ${hwvtep_ip}
${conn_id}= SSHLibrary.Open Connection ${hwvtep_ip} prompt=${DEFAULT_LINUX_PROMPT} timeout=30s
Log ${conn_id}
Flexible SSH Login ${DEFAULT_USER} ${DEFAULT_PASSWORD}
- [Return] ${conn_id}
+ RETURN ${conn_id}
*** Settings ***
-Documentation Test suite for AddressObservations in RESTCONF inventory
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
-Suite Teardown Delete All Sessions
-Library RequestsLibrary
-Resource ../../../libraries/Utils.robot
-Resource ../../../variables/openflowplugin/Variables.robot
-Variables ../../../variables/Variables.py
+Documentation Test suite for AddressObservations in RESTCONF inventory
+
+Library RequestsLibrary
+Resource ../../../libraries/Utils.robot
+Resource ../../../variables/openflowplugin/Variables.robot
+Variables ../../../variables/Variables.py
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${IP_1} "10.0.0.1"
-${IP_2} "10.0.0.2"
-${IP_3} "10.0.0.3"
+${IP_1} "10.0.0.1"
+${IP_2} "10.0.0.2"
+${IP_3} "10.0.0.3"
+
*** Test Cases ***
Check Stats for node 1
Check No Host Is Present
[Documentation] Get the invnetory, should not contain any host address
@{list} Create List ${IP_1} ${IP_2} ${IP_3}
- Wait Until Keyword Succeeds 10s 2s Check For Elements Not At URI ${RFC8040_OPERATIONAL_NODES_API} ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements Not At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${list}
Ping All
[Documentation] Pingall, verify no packet loss
Check node 1 addresses
[Documentation] Get the address observations for node 1
@{list} Create List ${IP_2} ${IP_3}
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_NODES_API}/node=openflow%3A1?content=nonconfig ${IP_1} 1
- Wait Until Keyword Succeeds 10s 2s Check For Elements Not At URI ${RFC8040_NODES_API}/node=openflow%3A1?content=nonconfig ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A1?content=nonconfig
+ ... ${IP_1}
+ ... 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements Not At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A1?content=nonconfig
+ ... ${list}
Check node 2 addresses
[Documentation] Get the address observations for node 2
@{list} Create List ${IP_1} ${IP_3}
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_NODES_API}/node=openflow%3A2?content=nonconfig ${IP_2} 1
- Wait Until Keyword Succeeds 10s 2s Check For Elements Not At URI ${RFC8040_NODES_API}/node=openflow%3A2?content=nonconfig ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A2?content=nonconfig
+ ... ${IP_2}
+ ... 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements Not At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A2?content=nonconfig
+ ... ${list}
Check node 3 addresses
[Documentation] Get the address observations for node 3
@{list} Create List ${IP_1} ${IP_2}
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_NODES_API}/node=openflow%3A3?content=nonconfig ${IP_3} 1
- Wait Until Keyword Succeeds 10s 2s Check For Elements Not At URI ${RFC8040_NODES_API}/node=openflow%3A3?content=nonconfig ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A3?content=nonconfig
+ ... ${IP_3}
+ ... 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements Not At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A3?content=nonconfig
+ ... ${list}
+
*** Keywords ***
Ping All Works Good
*** Settings ***
-Documentation Test suite for L2switch's Address Tracking using mininet OF13
-Suite Setup Start Mininet
-Suite Teardown Stop Mininet
-Library SSHLibrary
-Resource ../../../libraries/Utils.robot
+Documentation Test suite for L2switch's Address Tracking using mininet OF13
+
+Library SSHLibrary
+Resource ../../../libraries/Utils.robot
+
+Suite Setup Start Mininet
+Suite Teardown Stop Mininet
+
*** Variables ***
-${start} sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=linear,3 --switch ovsk,protocols=OpenFlow13
+${start} sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=linear,3 --switch ovsk,protocols=OpenFlow13
*** Settings ***
-Documentation Test suite for FlowProgramming in RESTCONF inventory
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
-Suite Teardown Delete All Sessions
-Library Collections
-Library RequestsLibrary
-Resource ../../../libraries/Utils.robot
-Resource ../../../variables/openflowplugin/Variables.robot
-Variables ../../../variables/Variables.py
+Documentation Test suite for FlowProgramming in RESTCONF inventory
+
+Library Collections
+Library RequestsLibrary
+Resource ../../../libraries/Utils.robot
+Resource ../../../variables/openflowplugin/Variables.robot
+Variables ../../../variables/Variables.py
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Teardown Delete All Sessions
-*** Variables ***
*** Test Cases ***
Check Stats for node 1
Check Flows
[Documentation] Check all flows are present
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} "output-node-connector" 21
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... "output-node-connector"
+ ... 21
Ping All Test
[Documentation] Ping all, verify no packet loss or duplicates
*** Settings ***
-Documentation Test suite for L2switch's Flow Programming using mininet OF13
-Suite Setup Start Mininet
-Suite Teardown Stop Mininet
-Library SSHLibrary
-Resource ../../../libraries/Utils.robot
+Documentation Test suite for L2switch's Flow Programming using mininet OF13
+
+Library SSHLibrary
+Resource ../../../libraries/Utils.robot
+
+Suite Setup Start Mininet
+Suite Teardown Stop Mininet
+
*** Variables ***
-${start} sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=tree,2 --switch ovsk,protocols=OpenFlow13
+${start} sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=tree,2 --switch ovsk,protocols=OpenFlow13
*** Settings ***
-Documentation Test suite for Address in RESTCONF topology
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
-Suite Teardown Delete All Sessions
-Library RequestsLibrary
-Resource ../../../libraries/Utils.robot
-Resource ../../../variables/openflowplugin/Variables.robot
-Variables ../../../variables/Variables.py
+Documentation Test suite for Address in RESTCONF topology
+
+Library RequestsLibrary
+Resource ../../../libraries/Utils.robot
+Resource ../../../variables/openflowplugin/Variables.robot
+Variables ../../../variables/Variables.py
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${MAC_1} 00:00:00:00:00:01
-${MAC_2} 00:00:00:00:00:02
-${MAC_3} 00:00:00:00:00:03
-${IP_1} 10.0.0.1
-${IP_2} 10.0.0.2
-${IP_3} 10.0.0.3
+${MAC_1} 00:00:00:00:00:01
+${MAC_2} 00:00:00:00:00:02
+${MAC_3} 00:00:00:00:00:03
+${IP_1} 10.0.0.1
+${IP_2} 10.0.0.2
+${IP_3} 10.0.0.3
+
*** Test Cases ***
Check Stats for node 1
Check Switch Links
[Documentation] Get the topology and check links
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} link-id 4
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... link-id
+ ... 4
Check No Host Is Present
[Documentation] Get the network topology, should not contain any host address
@{list} Create List ${MAC_1} ${MAC_2} ${MAC_3}
Wait Until Keyword Succeeds 10s 2s Check For Elements Not At URI ${OPERATIONAL_TOPO_API} ${list}
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} link-id 4
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... link-id
+ ... 4
Ping All
[Documentation] Pingall, verify no packet loss
Check Host Links
[Documentation] Get the topology and check links
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} link-id 10
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... link-id
+ ... 10
Host Tracker host1
[Documentation] Get the network topology, should contain host1 one time
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} "node-id":"host:${MAC_1}" 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... "node-id":"host:${MAC_1}"
+ ... 1
Host Tracker host2
[Documentation] Get the network topology, should contain host 2 one time
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} "node-id":"host:${MAC_2}" 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... "node-id":"host:${MAC_2}"
+ ... 1
Host Tracker host3
[Documentation] Get the network topology, should contain hos 3 one time
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} "node-id":"host:${MAC_3}" 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... "node-id":"host:${MAC_3}"
+ ... 1
Link Down
[Documentation] Take link s1-h1 down and verify host1 goes away. This is a not implemented feature.
Write link s1 h1 down
Read Until mininet>
@{list} Create List "link-down":true
- Wait Until Keyword Succeeds 10s 2s Check For Elements At URI ${RFC8040_NODES_API}/node=openflow%3A1/node-connector=openflow%3A1%3A1?content=nonconfig ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A1/node-connector=openflow%3A1%3A1?content=nonconfig
+ ... ${list}
@{list} Create List ${MAC_1}
Wait Until Keyword Succeeds 10s 2s Check For Elements Not At URI ${OPERATIONAL_TOPO_API} ${list}
Write link s1 h1 up
Read Until mininet>
@{list} Create List "link-down":false
- Wait Until Keyword Succeeds 10s 2s Check For Elements At URI ${RFC8040_NODES_API}/node=openflow%3A1/node-connector=openflow%3A1%3A1?content=nonconfig ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A1/node-connector=openflow%3A1%3A1?content=nonconfig
+ ... ${list}
Write pingall
Read Until mininet>
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} "node-id":"host:${MAC_1}" 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... "node-id":"host:${MAC_1}"
+ ... 1
Remove Port
[Documentation] Remove port s1-eth1 and verify host1 goes away. This fails sporadically in CI but not in local env.
Write sh ovs-vsctl add-port s1 s1-eth1 -- set interface s1-eth1 ofport=1
Read Until mininet>
@{list} Create List "link-down":false
- Wait Until Keyword Succeeds 10s 2s Check For Elements At URI ${RFC8040_NODES_API}/node=openflow%3A1/node-connector=openflow%3A1%3A1?content=nonconfig ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements At URI
+ ... ${RFC8040_NODES_API}/node=openflow%3A1/node-connector=openflow%3A1%3A1?content=nonconfig
+ ... ${list}
Write pingall
Read Until mininet>
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${OPERATIONAL_TOPO_API} "node-id":"host:${MAC_1}" 1
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${OPERATIONAL_TOPO_API}
+ ... "node-id":"host:${MAC_1}"
+ ... 1
+
*** Keywords ***
Ping All Works Good
*** Settings ***
-Documentation Test suite for L2switch's Address Tracking using mininet OF13
-Suite Setup Start Mininet
-Suite Teardown Stop Mininet
-Library SSHLibrary
-Resource ../../../libraries/Utils.robot
+Documentation Test suite for L2switch's Address Tracking using mininet OF13
+
+Library SSHLibrary
+Resource ../../../libraries/Utils.robot
+
+Suite Setup Start Mininet
+Suite Teardown Stop Mininet
+
*** Variables ***
-${start} sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=linear,3 --switch ovsk,protocols=OpenFlow13 --mac
+${start} sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=linear,3 --switch ovsk,protocols=OpenFlow13 --mac
*** Settings ***
-Documentation Test suite for RESTCONF inventory
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
-Suite Teardown Delete All Sessions
-Library Collections
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
+Documentation Test suite for RESTCONF inventory
+
+Library Collections
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${REST_CONTEXT} /restconf/operational/opendaylight-inventory:nodes
+${REST_CONTEXT} /restconf/operational/opendaylight-inventory:nodes
+
*** Test Cases ***
Get list of nodes
${numnodes} Num Of Nodes ${TOPO_TREE_DEPTH} ${TOPO_TREE_FANOUT}
Wait Until Keyword Succeeds 120s 2s Check Every Nodes Stats ${numnodes}
+
*** Keywords ***
Check Every Nodes
[Arguments] ${numnodes}
*** Settings ***
-Documentation Test suite for RESTCONF topology
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
-Suite Teardown Delete All Sessions
-Library Collections
-Library XML
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
+Documentation Test suite for RESTCONF topology
+
+Library Collections
+Library XML
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${REST_CONTEXT} /restconf/operational/network-topology:network-topology/topology/flow:1
+${REST_CONTEXT} /restconf/operational/network-topology:network-topology/topology/flow:1
+
*** Test Cases ***
Get Nodes Count
${numlinks} Evaluate (${numnodes}-1)*2
Wait Until Keyword Succeeds 60s 2s Verify Element Count ${REST_CONTEXT} link ${numlinks}
+
*** Keywords ***
Verify Element Count
[Arguments] ${URI} ${xpath_location} ${expected_count}
${resp} RequestsLibrary.Get Request session ${REST_CONTEXT} headers=${ACCEPT_XML}
Log ${resp.content}
Should Be Equal As Strings ${resp.status_code} 200
- ${count}= Get Element Count ${resp.content} xpath=${xpath_location}
+ ${count} Get Element Count ${resp.content} xpath=${xpath_location}
Should Be Equal As Numbers ${count} ${expected_count}
*** Settings ***
-Documentation Test suite for do pingall test
-Library SSHLibrary
-Library Collections
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
+Documentation Test suite for do pingall test
+
+Library SSHLibrary
+Library Collections
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
-*** Variables ***
*** Test Cases ***
Ping all
*** Settings ***
-Documentation Test suite for Inventory Scalability
-Suite Setup Start Suite
-Suite Teardown Stop Suite
-Library SSHLibrary
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
+Documentation Test suite for Inventory Scalability
+
+Library SSHLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+
+Suite Setup Start Suite
+Suite Teardown Stop Suite
+
*** Variables ***
-${start} sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo tree,${TOPO_TREE_DEPTH},${TOPO_TREE_FANOUT} --switch ovsk,protocols=OpenFlow13
+${start}
+... sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo tree,${TOPO_TREE_DEPTH},${TOPO_TREE_FANOUT} --switch ovsk,protocols=OpenFlow13
+
*** Keywords ***
Start Suite
*** Settings ***
-Documentation Test suite for Ring/Loop topology of size 3
-Suite Setup Start Suite
-Suite Teardown Utils.Stop Mininet
-Library RequestsLibrary
-Resource ../../../libraries/Utils.robot
-Resource ../../../variables/openflowplugin/Variables.robot
-Variables ../../../variables/Variables.py
+Documentation Test suite for Ring/Loop topology of size 3
+
+Library RequestsLibrary
+Resource ../../../libraries/Utils.robot
+Resource ../../../variables/openflowplugin/Variables.robot
+Variables ../../../variables/Variables.py
+
+Suite Setup Start Suite
+Suite Teardown Utils.Stop Mininet
+
*** Variables ***
-${FORWARD} "stp-status-aware-node-connector:status":"forwarding"
-${DISCARD} "stp-status-aware-node-connector:status":"discarding"
+${FORWARD} "stp-status-aware-node-connector:status":"forwarding"
+${DISCARD} "stp-status-aware-node-connector:status":"discarding"
+
*** Test Cases ***
Check Stats for node 1
[Documentation] Check all ports are present
@{list} Create List openflow:1:1 openflow:1:2 openflow:1:3 openflow:2:1 openflow:2:2
... openflow:2:3 openflow:3:1 openflow:3:2 openflow:3:3
- Wait Until Keyword Succeeds 10s 2s Check For Elements At URI ${RFC8040_OPERATIONAL_NODES_API} ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${list}
Check Ports STP status
[Documentation] Check the stp status of the ports (forwarding/discarding)
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} ${FORWARD} 4
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} ${DISCARD} 2
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${FORWARD}
+ ... 4
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${DISCARD}
+ ... 2
Check Flows
[Documentation] Check all flows are present
[Tags] bug 6984 bug
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} "output-node-connector" 16
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... "output-node-connector"
+ ... 16
[Teardown] Report_Failure_Due_To_Bug 6984
Ping Test
Write link s1 s2 down
Read Until mininet>
@{list} Create List ${DISCARD}
- Wait Until Keyword Succeeds 10s 2s Check For Elements Not At URI ${RFC8040_OPERATIONAL_NODES_API} ${list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Elements Not At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${list}
Wait Until Keyword Succeeds 10s 2s Ping Works Good
Link Up
[Tags] exclude
Write link s1 s2 up
Read Until mininet>
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} ${FORWARD} 4
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} ${DISCARD} 2
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${FORWARD}
+ ... 4
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${DISCARD}
+ ... 2
# This sleep is needed because if the ping in the below WUKS is launched before the STP effectively removes the link,
# it produces a packet storm in mininet that makes the test unresponsive.
Sleep 1
[Tags] exclude
Write sh ovs-vsctl add-port s1 s1-eth2 -- set interface s1-eth2 ofport=2
Read Until mininet>
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} ${FORWARD} 4
- Wait Until Keyword Succeeds 10s 2s Check For Specific Number Of Elements At URI ${RFC8040_OPERATIONAL_NODES_API} ${DISCARD} 2
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${FORWARD}
+ ... 4
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... Check For Specific Number Of Elements At URI
+ ... ${RFC8040_OPERATIONAL_NODES_API}
+ ... ${DISCARD}
+ ... 2
# This sleep is needed because if the ping in the below WUKS is launched before the STP effectively removes the link,
# it produces a packet storm in mininet that makes the test unresponsive.
Sleep 1
Wait Until Keyword Succeeds 10s 2s Ping Works Good
+
*** Keywords ***
Start Suite
[Documentation] Open controller session & mininet connection and start mininet custom topo
Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
- ${start}= Set Variable sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --custom customtopo.py --topo ring --switch ovsk,protocols=OpenFlow13
- ${mininet_conn_id}= Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=30s
+ ${start} Set Variable
+ ... sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --custom customtopo.py --topo ring --switch ovsk,protocols=OpenFlow13
+ ${mininet_conn_id} Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=30s
Set Suite Variable ${mininet_conn_id}
Login With Public Key ${TOOLS_SYSTEM_USER} ${USER_HOME}/.ssh/${SSH_KEY} any
Put File ${CURDIR}/../topologies/customtopo.py
*** Settings ***
-Documentation Test suite for finding out max number of switches
-Suite Setup Workflow Setup
-Suite Teardown Workflow Teardown
-Library OperatingSystem
-Resource ../../../variables/Variables.robot
-Resource ../../../libraries/WorkflowsL2switch.robot
-Resource ../../../libraries/KarafKeywords.robot
+Documentation Test suite for finding out max number of switches
+
+Library OperatingSystem
+Resource ../../../variables/Variables.robot
+Resource ../../../libraries/WorkflowsL2switch.robot
+Resource ../../../libraries/KarafKeywords.robot
+
+Suite Setup Workflow Setup
+Suite Teardown Workflow Teardown
+
*** Variables ***
-${MIN_HOSTS} 50
-${MAX_HOSTS} 1000
-${STEP_HOSTS} 50
+${MIN_HOSTS} 50
+${MAX_HOSTS} 1000
+${STEP_HOSTS} 50
${HOSTS_RESULT_FILE} hosts.csv
-${TIME_RESULT_FILE} time.csv
+${TIME_RESULT_FILE} time.csv
+
*** Test Cases ***
Find Max Supported Hosts
${stop}= BuiltIn.Convert to Integer ${MAX_HOSTS}
${step}= BuiltIn.Convert to Integer ${STEP_HOSTS}
FOR ${hosts} IN RANGE ${start} ${stop+1} ${step}
- ${status} ${error_message} ${host_discover_time} WorkflowsL2switch.Workflow Single Switch Multiple Hosts ${hosts}
- BuiltIn.Exit For Loop If '${status}' == 'FAIL'
+ ${status}
+ ... ${error_message}
+ ... ${host_discover_time}=
+ ... WorkflowsL2switch.Workflow Single Switch Multiple Hosts
+ ... ${hosts}
+ IF '${status}' == 'FAIL' BREAK
${maximum_hosts}= BuiltIn.Set variable ${hosts}
${discover_time}= BuiltIn.Set Variable ${host_discover_time}
END
*** Settings ***
-Documentation Test suite for RESTCONF LACP inventory
-Suite Setup LACP Inventory Suite Setup
-Suite Teardown Delete All Sessions
-Library SSHLibrary
-Library Collections
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
+Documentation Test suite for RESTCONF LACP inventory
+
+Library SSHLibrary
+Library Collections
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+
+Suite Setup LACP Inventory Suite Setup
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${node1} openflow:1
-${agg-id1} 1
-${agg-id2} 2
-${agg1-connector-id1} 1
-${agg1-connector-id2} 2
-${agg2-connector-id1} 3
-${agg2-connector-id2} 4
+${node1} openflow:1
+${agg-id1} 1
+${agg-id2} 2
+${agg1-connector-id1} 1
+${agg1-connector-id2} 2
+${agg2-connector-id1} 3
+${agg2-connector-id2} 4
+
*** Test Cases ***
Get the Specific Node Inventory and Lacp aggregator details
Get node connector data for node 1
[Documentation] Get the node connector inventory for node 1
- ${resp} Get Request session ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg1-connector-id1}
+ ${resp} Get Request
+ ... session
+ ... ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg1-connector-id1}
Verify LACP RESTAPI Response Code for node ${resp}
Verify specific LACP node connector data for node ${resp.content} ${agg-id1} agg-id
- ${resp} Get Request session ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg1-connector-id2}
+ ${resp} Get Request
+ ... session
+ ... ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg1-connector-id2}
Verify LACP RESTAPI Response Code for node ${resp}
Verify specific LACP node connector data for node ${resp.content} ${agg-id1} agg-id
- ${resp} Get Request session ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg2-connector-id1}
+ ${resp} Get Request
+ ... session
+ ... ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg2-connector-id1}
Verify LACP RESTAPI Response Code for node ${resp}
Verify specific LACP node connector data for node ${resp.content} ${agg-id2} agg-id
- ${resp} Get Request session ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg2-connector-id2}
+ ${resp} Get Request
+ ... session
+ ... ${OPERATIONAL_NODES_API}/node/${node1}/node-connector/${node1}:${agg2-connector-id2}
Verify LACP RESTAPI Response Code for node ${resp}
Verify specific LACP node connector data for node ${resp.content} ${agg-id2} agg-id
+
*** Keywords ***
Verify LACP RESTAPI Response Code for node
- [Arguments] ${resp}
[Documentation] Will check for the response code of the REST query
+ [Arguments] ${resp}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${node1}
Verify LACP RESTAPI Aggregator and Tag Contents
- [Arguments] ${resp.content} ${content-lookup}
[Documentation] Will check for the LACP Specific tags or Aggregator ID for node
+ [Arguments] ${resp.content} ${content-lookup}
Should Contain ${resp.content} ${content-lookup}
Verify LACP connector associated for aggregator
- [Arguments] ${resp.content} ${node} ${agg-connector-id}
[Documentation] Will check for the LACP connector info for each aggregator
+ [Arguments] ${resp.content} ${node} ${agg-connector-id}
Should Contain ${resp.content} ${node}:${agg-connector-id}
Verify specific LACP node connector data for node
- [Arguments] ${resp.content} ${agg-id} ${connector}
[Documentation] Will check for node connectory info for node
+ [Arguments] ${resp.content} ${agg-id} ${connector}
Should Contain ${resp.content} ${connector}='${agg-id}'
Verify LACP Tags Are Formed
*** Settings ***
-Documentation Test suite for LACP Link Resiliency
-Suite Setup LACP Inventory Suite Setup
-Suite Teardown Delete All Sessions
-Library SSHLibrary
-Library Collections
-Library String
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Resource ../../../libraries/Utils.robot
-Variables ../../../variables/Variables.py
+Documentation Test suite for LACP Link Resiliency
+
+Library SSHLibrary
+Library Collections
+Library String
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Resource ../../../libraries/Utils.robot
+Variables ../../../variables/Variables.py
+
+Suite Setup LACP Inventory Suite Setup
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${node1} openflow:1
-${agg-id1} 1
-${agg-id2} 2
-${agg1-connector-id1} 1
-${agg1-connector-id2} 2
-${agg2-connector-id1} 3
-${agg2-connector-id2} 4
+${node1} openflow:1
+${agg-id1} 1
+${agg-id2} 2
+${agg1-connector-id1} 1
+${agg1-connector-id2} 2
+${agg2-connector-id1} 3
+${agg2-connector-id2} 4
+
*** Test Cases ***
Verify the Group tables data for Switch(S1)
[Documentation] Functionality to check if the corresponding group entries are updated on OVS Switch(S1) after port-bringup scenario on the Host H2
Verify Switch S1 Group Table select 3 4 up
+
*** Keywords ***
Verify LACP RESTAPI Response Code for node
- [Arguments] ${resp}
[Documentation] Will check for the response code of the REST query
+ [Arguments] ${resp}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${node1}
Verify LACP RESTAPI Aggregator and Tag Contents
- [Arguments] ${resp.content} ${content-lookup}
[Documentation] Will check for the LACP Specific tags or Aggregator ID for node
+ [Arguments] ${resp.content} ${content-lookup}
Should Contain ${resp.content} ${content-lookup}
Verify LACP RESTAPI connector associated for aggregator
- [Arguments] ${resp.content} ${node} ${agg-connector-id}
[Documentation] Will check for the LACP connector info for each aggregator
+ [Arguments] ${resp.content} ${node} ${agg-connector-id}
Should Contain ${resp.content} ${node}:${agg-connector-id}
Verify LACP aggregator data is updated post link down scenario
[Documentation] Functionality will verify the node conenctor data on the lacp-agg api after link down scenario
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}/node/${node1}/lacp-aggregators/${agg-id2}
+ ${resp} RequestsLibrary.Get Request
+ ... session
+ ... ${OPERATIONAL_NODES_API}/node/${node1}/lacp-aggregators/${agg-id2}
Verify LACP RESTAPI Response Code for node ${resp}
Verify LACP RESTAPI connector associated for aggregator ${resp.content} ${node1} ${agg2-connector-id1}
Should not Contain ${resp.content} ${node1}:${agg2-connector-id2}
Verify LACP aggregator data is updated post link up scenario
[Documentation] Functionality will verify the node connector data on the lacp-agg api after link up scenario
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}/node/${node1}/lacp-aggregators/${agg-id2}
+ ${resp} RequestsLibrary.Get Request
+ ... session
+ ... ${OPERATIONAL_NODES_API}/node/${node1}/lacp-aggregators/${agg-id2}
Verify LACP RESTAPI Response Code for node ${resp}
Verify LACP RESTAPI connector associated for aggregator ${resp.content} ${node1} ${agg2-connector-id1}
Verify LACP RESTAPI connector associated for aggregator ${resp.content} ${node1} ${agg2-connector-id2}
Wait Until Keyword Succeeds 15s 1s Verify LACP Tags Are Formed
Set Host interface state
- [Arguments] ${port-id} ${port-state}
[Documentation] Will configure the port state of the Host to either up or down
+ [Arguments] ${port-id} ${port-state}
Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT}
Login With Public Key ${TOOLS_SYSTEM_USER} ${USER_HOME}/.ssh/${SSH_KEY} any
Write sudo ./m h2
Write sudo ifconfig ${port-id} ${port-state}
Verify Switch S1 Group Table
- [Arguments] ${group-type} ${port-id1} ${port-id2} ${port-id2-state}
[Documentation] Functionality to verify the presence of LACP group entries on the OVS Switch(S1) Group table
- ${group_output}= Run Command on Remote System ${TOOLS_SYSTEM_IP} sudo ovs-ofctl dump-groups s1 -O OpenFlow13 ${TOOLS_SYSTEM_USER} #
+ [Arguments] ${group-type} ${port-id1} ${port-id2} ${port-id2-state}
+ #
+ ${group_output} Run Command on Remote System
+ ... ${TOOLS_SYSTEM_IP}
+ ... sudo ovs-ofctl dump-groups s1 -O OpenFlow13
+ ... ${TOOLS_SYSTEM_USER}
Log ${group_output}
Comment ${group_output} Read Until mininet>
- ${result}= Get Lines Containing String ${group_output} output:${port-id1}
+ ${result} Get Lines Containing String ${group_output} output:${port-id1}
Should Contain ${result} type=${group-type}
Should Contain ${result} output:${port-id1}
- Run Keyword If "${port-id2-state}" == "up" Should Contain ${result} output:${port-id2}
- ... ELSE Should not Contain ${result} output:${port-id2}
+ IF "${port-id2-state}" == "up"
+ Should Contain ${result} output:${port-id2}
+ ELSE
+ Should not Contain ${result} output:${port-id2}
+ END
*** Settings ***
-Documentation Test suite to verify if the PDU count for the LACP flow entry is getting updated
-Suite Setup LACP Inventory Suite Setup
-Suite Teardown Delete All Sessions
-Library SSHLibrary
-Library Collections
-Library String
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Resource ../../../libraries/Utils.robot
-Variables ../../../variables/Variables.py
+Documentation Test suite to verify if the PDU count for the LACP flow entry is getting updated
+
+Library SSHLibrary
+Library Collections
+Library String
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Resource ../../../libraries/Utils.robot
+Variables ../../../variables/Variables.py
+
+Suite Setup LACP Inventory Suite Setup
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${node1} openflow:1
+${node1} openflow:1
+
*** Test Cases ***
Verify Switch S1 LACP flow entry packet hit doesn't display zero value
Verify Switch S1 Port stats doesn't display zero value
[Documentation] Verify the port stats for the Switch S1 doesn't display value with zero
- ${result}= Run Command On Remote System ${TOOLS_SYSTEM_IP} sudo ovs-ofctl dump-ports s1 -O OpenFlow13 ${TOOLS_SYSTEM_USER} #
+ #
+ ${result}= Run Command On Remote System
+ ... ${TOOLS_SYSTEM_IP}
+ ... sudo ovs-ofctl dump-ports s1 -O OpenFlow13
+ ... ${TOOLS_SYSTEM_USER}
Comment ${result} Read Until mininet>
${port1}= Get Lines Containing String ${result} 1:
Should Not Contain ${port1} rx pkts=0
Should Not Contain ${port4} rx pkts=0
Should Not Contain ${port4} bytes=0
+
*** Keywords ***
Verify LACP RESTAPI Response Code for node
- [Arguments] ${resp}
[Documentation] Will check for the response code of the REST query
+ [Arguments] ${resp}
Should Be Equal As Strings ${resp.status_code} 200
Should Contain ${resp.content} ${node1}
Verify LACP RESTAPI Aggregator and Tag Contents
- [Arguments] ${resp.content} ${content-lookup}
[Documentation] Will check for the LACP Specific tags or Aggregator ID for node
+ [Arguments] ${resp.content} ${content-lookup}
Should Contain ${resp.content} ${content-lookup}
Verify LACP Tags Are Formed
[Documentation] Fundamental Check That LACP is working
- ${resp} RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}
+ ${resp}= RequestsLibrary.Get Request session ${OPERATIONAL_NODES_API}
Verify LACP RESTAPI Response Code for node ${resp}
Verify LACP RESTAPI Aggregator and Tag Contents ${resp.content} non-lag-groupid
Verify LACP RESTAPI Aggregator and Tag Contents ${resp.content} lacp-aggregators
*** Settings ***
-Documentation Test suite for MD-SAL LACP mininet OF13
-Suite Setup Start Suite
-Suite Teardown Stop Suite
-Library SSHLibrary
-Variables ../../../variables/Variables.py
+Documentation Test suite for MD-SAL LACP mininet OF13
+
+Library SSHLibrary
+Variables ../../../variables/Variables.py
+
+Suite Setup Start Suite
+Suite Teardown Stop Suite
+
*** Variables ***
-${start} sudo mn --custom LACP_custom1.py --switch ovsk,protocols=OpenFlow13
-${bond} "/etc/modprobe.d/bonding.conf"
+${start} sudo mn --custom LACP_custom1.py --switch ovsk,protocols=OpenFlow13
+${bond} "/etc/modprobe.d/bonding.conf"
+
*** Keywords ***
Start Suite
*** Settings ***
-Documentation Test suite to verify CRUD operations using RPCs
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/LISPFlowMapping__Lithium.robot
-Resource ../../../libraries/Utils.robot
+Documentation Test suite to verify CRUD operations using RPCs
+
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/LISPFlowMapping__Lithium.robot
+Resource ../../../libraries/Utils.robot
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${IPV4_C_KEY} ${JSON_DIR}/rpc_add-key_ipv4.json
-${IPV4_RD} ${JSON_DIR}/rpc_get-remove_ipv4.json
-${MISS_RD} ${JSON_DIR}/rpc_get-remove_missing.json
-${IPV4_U_KEY} ${JSON_DIR}/rpc_update-key_ipv4.json
-${IPV4_C_MAP} ${JSON_DIR}/rpc_add-mapping_ipv4_ipv4.json
-${IPV4_U_MAP} ${JSON_DIR}/rpc_update-mapping_ipv4_ipv4.json
+${IPV4_C_KEY} ${JSON_DIR}/rpc_add-key_ipv4.json
+${IPV4_RD} ${JSON_DIR}/rpc_get-remove_ipv4.json
+${MISS_RD} ${JSON_DIR}/rpc_get-remove_missing.json
+${IPV4_U_KEY} ${JSON_DIR}/rpc_update-key_ipv4.json
+${IPV4_C_MAP} ${JSON_DIR}/rpc_add-mapping_ipv4_ipv4.json
+${IPV4_U_MAP} ${JSON_DIR}/rpc_update-mapping_ipv4_ipv4.json
+
*** Test Cases ***
Create Key
*** Settings ***
-Documentation Test suite to verify data types using RPCs
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-Test Setup Set Suite Variable ${RPC_Datatype__current_json} ${EMPTY}
-Test Teardown Remove Datatype And Check Removal
-Test Template Check Datatype
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/LISPFlowMapping__Lithium.robot
-Resource ../../../libraries/Utils.robot
+Documentation Test suite to verify data types using RPCs
+
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/LISPFlowMapping__Lithium.robot
+Resource ../../../libraries/Utils.robot
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
+Suite Teardown Delete All Sessions
+Test Setup Set Suite Variable ${RPC_Datatype__current_json} ${EMPTY}
+Test Teardown Remove Datatype And Check Removal
+Test Template Check Datatype
+
*** Test Cases ***
IPv4 Prefix
[Documentation] Perform mapping operations with an IPv4 EID
rpc_add-mapping_ipv4_ipv4.json rpc_get-remove_ipv4.json
-
IPv6 Prefix
[Documentation] Perform mapping operations with an IPv6 EID
rpc_add-mapping_ipv6_ipv4.json rpc_get-remove_ipv6.json
-
MAC Address
[Documentation] Perform mapping operations with a MAC address EID
rpc_add-mapping_mac_ipv4.json rpc_get-remove_mac.json
-
Distinguished Name
[Documentation] Perform mapping operations with a Distinguished Name EID
rpc_add-mapping_dn_ipv4.json rpc_get-remove_dn.json
-
AS Number
[Documentation] Perform mapping operations with an Autonomous System Number EID
rpc_add-mapping_as_ipv4.json rpc_get-remove_as.json
-
Instance ID
[Documentation] Perform mapping operations with an IPv4 EID in Instance ID 1
rpc_add-mapping_iid_ipv4.json rpc_get-remove_iid.json
-
Source/Destination
[Documentation] Perform mapping operations with a Source/Destination EID
rpc_add-mapping_srcdst_ipv4.json rpc_get-remove_srcdst.json
-
Key/Value
[Documentation] Perform mapping operations with a Key/Value EID
rpc_add-mapping_kv_ipv4.json rpc_get-remove_kv.json
-
AFI List
[Documentation] Perform mapping operations with an IPv4 EID mapped to an AFI List RLOC
rpc_add-mapping_ipv4_list.json rpc_get-remove_ipv4.json
-
Application Data
[Documentation] Perform mapping operations with an IPv4 EID mapped to an Application Data RLOC
rpc_add-mapping_ipv4_appdata.json rpc_get-remove_ipv4.json
-
Explicit Locator Path
[Documentation] Perform mapping operations with an IPv4 EID mapped to an ELP RLOC
rpc_add-mapping_ipv4_elp.json rpc_get-remove_ipv4.json
+
*** Keywords ***
Check Datatype
- [Arguments] ${add_mapping_json_file} ${get_mapping_json_file}
[Documentation] Perform CRD operations using a specific datatype
+ [Arguments] ${add_mapping_json_file} ${get_mapping_json_file}
${add_mapping}= OperatingSystem.Get File ${JSON_DIR}/${add_mapping_json_file}
${get_mapping}= OperatingSystem.Get File ${JSON_DIR}/${get_mapping_json_file}
Set Suite Variable ${RPC_Datatype__current_json} ${get_mapping}
*** Settings ***
-Documentation Test suite to verify CRUD operations using RPCs
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Library ../../../libraries/JsonGenerator.py
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/LISPFlowMapping.robot
-Resource ../../../libraries/TemplatedRequests.robot
-Resource ../../../libraries/Utils.robot
+Documentation Test suite to verify CRUD operations using RPCs
+
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Library ../../../libraries/JsonGenerator.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/LISPFlowMapping.robot
+Resource ../../../libraries/TemplatedRequests.robot
+Resource ../../../libraries/Utils.robot
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
+Suite Teardown Delete All Sessions
+
*** Test Cases ***
Create Key
*** Settings ***
-Documentation Test suite to verify data types using RPCs
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
-Suite Teardown Delete All Sessions
-Test Setup Set Suite Variable ${RPC_Datatype__current_json} ${EMPTY}
-Test Teardown Remove Datatype And Check Removal
-Test Template Check Datatype
-Library Collections
-Library OperatingSystem
-Library RequestsLibrary
-Library ../../../libraries/Common.py
-Library ../../../libraries/JsonGenerator.py
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/LISPFlowMapping.robot
-Resource ../../../libraries/Utils.robot
+Documentation Test suite to verify data types using RPCs
+
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Library ../../../libraries/JsonGenerator.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/LISPFlowMapping.robot
+Resource ../../../libraries/Utils.robot
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS}
+Suite Teardown Delete All Sessions
+Test Setup Set Suite Variable ${RPC_Datatype__current_json} ${EMPTY}
+Test Teardown Remove Datatype And Check Removal
+Test Template Check Datatype
+
*** Test Cases ***
IPv4 Prefix
[Documentation] Perform mapping operations with an IPv4 EID
ipv4:192.0.2.1/32 ipv4:10.10.10.10 ipv4:192.0.2.1/32
-
IPv6 Prefix
[Documentation] Perform mapping operations with an IPv6 EID
ipv6:2001:db8::1/128 ipv4:10.10.10.10 ipv6:2001:db8::1/128
-
MAC Address
[Documentation] Perform mapping operations with a MAC address EID
mac:00:11:22:33:44:55 ipv4:10.10.10.10 mac:00:11:22:33:44:55
-
Distinguished Name
[Documentation] Perform mapping operations with a Distinguished Name EID
dn:stringAsIs ipv4:10.10.10.10 dn:stringAsIs
-
AS Number
[Documentation] Perform mapping operations with an Autonomous System Number EID
as:64500 ipv4:10.10.10.10 as:64500
-
Source/Destination
[Documentation] Perform mapping operations with a Source/Destination EID
srcdst:192.0.2.1/32|192.0.2.2/32 ipv4:10.10.10.10 srcdst:192.0.2.1/32|192.0.2.2/32
-
Key/Value
[Documentation] Perform mapping operations with a Key/Value EID
kv:192.0.2.1->192.0.2.2 ipv4:10.10.10.10 kv:192.0.2.1->192.0.2.2
-
Service Path
[Documentation] Perform mapping operations with a Service Path EID
sp:42(3) ipv4:10.10.10.10 sp:42(3)
-
AFI List
[Documentation] Perform mapping operations with an IPv4 EID mapped to an AFI List RLOC
ipv4:192.0.2.1/32 list:{10.10.10.10,2001:db8::1} ipv4:192.0.2.1/32
-
Application Data
[Documentation] Perform mapping operations with an IPv4 EID mapped to an Application Data RLOC
ipv4:192.0.2.1/32 appdata:10.10.10.10!128!17!80-81!6667-7000 ipv4:192.0.2.1/32
-
Explicit Locator Path
[Documentation] Perform mapping operations with an IPv4 EID mapped to an ELP RLOC
ipv4:192.0.2.1/32 elp:{20.20.20.20|lps->30.30.30.30|ls} ipv4:192.0.2.1/32
+
*** Keywords ***
Check Datatype
- [Arguments] ${add_mapping_eid} ${add_mapping_rloc} ${get_mapping_eid}
[Documentation] Perform CRD operations using a specific datatype
+ [Arguments] ${add_mapping_eid} ${add_mapping_rloc} ${get_mapping_eid}
${add_mapping}= Get Mapping JSON ${add_mapping_eid} ${add_mapping_rloc}
${get_mapping}= Get LispAddress JSON And Wrap input ${get_mapping_eid}
Set Suite Variable ${RPC_Datatype__current_json} ${get_mapping}
Remove Datatype And Check Removal
Variable Should Exist ${RPC_Datatype__current_json}
- Post Log Check ${LFM_RPC_API}:remove-mapping ${RPC_Datatype__current_json} status_codes=${ALLOWED_STATUS_CODES}
+ Post Log Check
+ ... ${LFM_RPC_API}:remove-mapping
+ ... ${RPC_Datatype__current_json}
+ ... status_codes=${ALLOWED_STATUS_CODES}
Wait Until Keyword Succeeds 5s 200ms Check Mapping Removal ${RPC_Datatype__current_json}
Set Suite Variable ${RPC_Datatype__current_json} ${EMPTY}
*** Settings ***
-Documentation LISP southbound performance tests
-Suite Setup Prepare Environment
-Suite Teardown Destroy Environment
-Library Collections
-Library DateTime
-Library OperatingSystem
-Library RequestsLibrary
-Library String
-Resource ../../../libraries/Utils.robot
-Resource ../../../libraries/LISPFlowMapping.robot
-Resource ../../../libraries/TemplatedRequests.robot
-Variables ../../../variables/Variables.py
+Documentation LISP southbound performance tests
+
+Library Collections
+Library DateTime
+Library OperatingSystem
+Library RequestsLibrary
+Library String
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/LISPFlowMapping.robot
+Resource ../../../libraries/TemplatedRequests.robot
+Variables ../../../variables/Variables.py
+
+Suite Setup Prepare Environment
+Suite Teardown Destroy Environment
+
*** Variables ***
-${MAPPINGS} 10000
-${LISP_SCAPY} https://raw.githubusercontent.com/ljakab/py-lispnetworking/opendaylight/lisp.py
-${TOOLS_DIR} ${CURDIR}/../../../../tools/odl-lispflowmapping-performance-tests/
-${PCAP_CREATOR} ${TOOLS_DIR}/create_lisp_control_plane_pcap.py
-${MAPPING_BLASTER} ${TOOLS_DIR}/mapping_blaster.py
-${REPLAY_PPS} 100000
-${REPLAY_CNT} 1000
-${REPLAY_FILE_MREQ} encapsulated-map-requests-sequential.pcap
-${REPLAY_FILE_MREG} map-registers-sequential-no-auth.pcap
-${REPLAY_FILE_MRGA} map-registers-sequential-sha1-auth.pcap
+${MAPPINGS} 10000
+${LISP_SCAPY} https://raw.githubusercontent.com/ljakab/py-lispnetworking/opendaylight/lisp.py
+${TOOLS_DIR} ${CURDIR}/../../../../tools/odl-lispflowmapping-performance-tests/
+${PCAP_CREATOR} ${TOOLS_DIR}/create_lisp_control_plane_pcap.py
+${MAPPING_BLASTER} ${TOOLS_DIR}/mapping_blaster.py
+${REPLAY_PPS} 100000
+${REPLAY_CNT} 1000
+${REPLAY_FILE_MREQ} encapsulated-map-requests-sequential.pcap
+${REPLAY_FILE_MREG} map-registers-sequential-no-auth.pcap
+${REPLAY_FILE_MRGA} map-registers-sequential-sha1-auth.pcap
${RPCS_RESULTS_FILE} rpcs.csv
-${PPS_RESULTS_FILE} pps.csv
+${PPS_RESULTS_FILE} pps.csv
+
*** Test Cases ***
Add Simple IPv4 Mappings
${start_date}= Get Current Date
- Run Process With Logging And Status Check ${MAPPING_BLASTER} --host ${ODL_SYSTEM_IP} --mappings ${MAPPINGS}
+ Run Process With Logging And Status Check
+ ... ${MAPPING_BLASTER}
+ ... --host
+ ... ${ODL_SYSTEM_IP}
+ ... --mappings
+ ... ${MAPPINGS}
${end_date}= Get Current Date
${add_seconds}= Subtract Date From Date ${end_date} ${start_date}
Log ${add_seconds}
${pps_mnot_auth}= Lossy Test 4 ${REPLAY_FILE_MRGA}
Set Suite Variable ${pps_mnot_auth}
+
*** Keywords ***
Clean Up
Clear Config Datastore
Log ${resp.content}
Lossy Test
- [Arguments] ${lisp_type} ${replay_file}
[Documentation] This test will send traffic at a rate that is known to be
... higher than the capacity of the LISP Flow Mapping service and count
... the reply messages. Using the test's time duration, it computes the
... average reply packet rate in packets per second
+ [Arguments] ${lisp_type} ${replay_file}
${elapsed_time}= Generate Test Traffic ${REPLAY_PPS} ${REPLAY_CNT} ${replay_file}
${odl_tx_count}= Get Control Message Stats ${lisp_type} tx-count
${pps}= Evaluate int(${odl_tx_count}/${elapsed_time})
Log ${pps}
Clean Up
- [Return] ${pps}
+ RETURN ${pps}
Generate Test Traffic
[Arguments] ${replay_pps} ${replay_cnt} ${replay_file}
Reset Stats
- ${result}= Run Process With Logging And Status Check /usr/local/bin/udpreplay --pps ${replay_pps} --repeat ${replay_cnt}
- ... --host ${ODL_SYSTEM_IP} --port 4342 ${replay_file}
+ ${result}= Run Process With Logging And Status Check
+ ... /usr/local/bin/udpreplay
+ ... --pps
+ ... ${replay_pps}
+ ... --repeat
+ ... ${replay_cnt}
+ ... --host
+ ... ${ODL_SYSTEM_IP}
+ ... --port
+ ... 4342
+ ... ${replay_file}
${partial}= Fetch From Left ${result.stdout} s =
Log ${partial}
${time}= Fetch From Right ${partial} ${SPACE}
${time}= Convert To Number ${time}
Log ${time}
- [Return] ${time}
+ RETURN ${time}
Reset Stats
[Arguments] ${status_codes}=${ALLOWED_STATUS_CODES}
${msg_cnt}= Get From Dictionary ${ctrlmsg_type} ${stat_type}
${msg_cnt}= Convert To Integer ${msg_cnt}
Log ${msg_cnt}
- [Return] ${msg_cnt}
+ RETURN ${msg_cnt}
Prepare Environment
Create File ${RPCS_RESULTS_FILE} store/s\n
*** Settings ***
-Documentation Suite for testing performance of Java binding v1 using binding-parent.
+Documentation Suite for testing performance of Java binding v1 using binding-parent.
...
-... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
+... Copyright (c) 2016 Cisco Systems, Inc. and others. All rights reserved.
...
-... This program and the accompanying materials are made available under the
-... terms of the Eclipse Public License v1.0 which accompanies this distribution,
-... and is available at http://www.eclipse.org/legal/epl-v10.html
+... This program and the accompanying materials are made available under the
+... terms of the Eclipse Public License v1.0 which accompanies this distribution,
+... and is available at http://www.eclipse.org/legal/epl-v10.html
...
...
-... This suite tests performance of binding-parent from Mdsal project.
-... It measures time (only as a test case duration) needed to create Java bindings (v1).
-... It uses large set of Yang modules, collected from YangModels and openconfig
-... github projects.
-... Some modules are removed prior to testing, as they either do not conform to RFC6020,
-... or they trigger known Bugs in ODL.
-... Known Bugs: 6125, 6135, 6141, 2323, 6150, 2360, 138, 6172, 6180, 6183, 5772, 6189.
+... This suite tests performance of binding-parent from Mdsal project.
+... It measures time (only as a test case duration) needed to create Java bindings (v1).
+... It uses large set of Yang modules, collected from YangModels and openconfig
+... github projects.
+... Some modules are removed prior to testing, as they either do not conform to RFC6020,
+... or they trigger known Bugs in ODL.
+... Known Bugs: 6125, 6135, 6141, 2323, 6150, 2360, 138, 6172, 6180, 6183, 5772, 6189.
...
-... The suite performs installation of Maven, optionally with building patched artifacts.
+... The suite performs installation of Maven, optionally with building patched artifacts.
...
-... FIXME: This suite does not work when run with URL from Autorelease.
-... The thing is, mdsal-parent is not part of .zip distribution.
-... The fix would need to override the usual maven settings,
-... as Autorelease artifacts have non-snapshot versions, but they are not released yet.
-Suite Setup Setup_Suite
-Test Setup SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
-Test Teardown Teardown_Test
-Default Tags 1node binding_v1 critical
-Library SSHLibrary
-Library String
-Library XML
-Resource ${CURDIR}/../../../libraries/NexusKeywords.robot
-Resource ${CURDIR}/../../../libraries/SetupUtils.robot
-Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
-Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
-Resource ${CURDIR}/../../../libraries/YangCollection.robot
+... FIXME: This suite does not work when run with URL from Autorelease.
+... The thing is, mdsal-parent is not part of .zip distribution.
+... The fix would need to override the usual maven settings,
+... as Autorelease artifacts have non-snapshot versions, but they are not released yet.
+
+Library SSHLibrary
+Library String
+Library XML
+Resource ${CURDIR}/../../../libraries/NexusKeywords.robot
+Resource ${CURDIR}/../../../libraries/SetupUtils.robot
+Resource ${CURDIR}/../../../libraries/SSHKeywords.robot
+Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
+Resource ${CURDIR}/../../../libraries/YangCollection.robot
+
+Suite Setup Setup_Suite
+Test Setup SetupUtils.Setup_Test_With_Logging_And_Fast_Failing
+Test Teardown Teardown_Test
+
+Default Tags 1node binding_v1 critical
+
*** Variables ***
-${BRANCH} ${EMPTY}
+${BRANCH} ${EMPTY}
${MAVEN_OUTPUT_FILENAME} maven.log
-${PATCHES_TO_BUILD} ${EMPTY}
-${POM_FILENAME} binding-parent-test.xml
+${PATCHES_TO_BUILD} ${EMPTY}
+${POM_FILENAME} binding-parent-test.xml
+
*** Test Cases ***
Kill_Odl
Run_Maven
[Documentation] Create pom file with correct version and run maven with some performance switches.
- ${final_pom} = TemplatedRequests.Resolve_Text_From_Template_File folder=${CURDIR}/../../../variables/mdsal/binding_v1 file_name=binding_template.xml mapping={"BINDING_PARENT_VERSION":"${binding_parent_version}"}
+ ${final_pom} = TemplatedRequests.Resolve_Text_From_Template_File
+ ... folder=${CURDIR}/../../../variables/mdsal/binding_v1
+ ... file_name=binding_template.xml
+ ... mapping={"BINDING_PARENT_VERSION":"${binding_parent_version}"}
SSHKeywords.Execute_Command_At_Cwd_Should_Pass echo '${final_pom}' > '${POM_FILENAME}'
${autorelease_dir} = String.Get_Regexp_Matches ${BUNDLE_URL} (autorelease-[0-9]+)
- BuiltIn.Run_Keyword_If ${autorelease_dir} != [] Add_Autorelease_Profile ${autorelease_dir}[0]
+ IF ${autorelease_dir} != []
+ Add_Autorelease_Profile ${autorelease_dir}[0]
+ END
NexusKeywords.Run_Maven pom_file=${POM_FILENAME} log_file=${MAVEN_OUTPUT_FILENAME}
# TODO: Figure out patters to identify various known Bug symptoms.
[Documentation] Download created files so Releng scripts would archive it. Size of maven log is usually under 7 megabytes.
[Setup] FailFast.Run_Even_When_Failing_Fast
SSHKeywords.Open_Connection_To_ODL_System # The original one may have timed out.
- BuiltIn.Run_Keyword_And_Ignore_Error SSHLibrary.Get_File ${MAVEN_DEFAULT_OUTPUT_FILENAME} # only present if multipatch build happened
+ # only present if multipatch build happened
+ BuiltIn.Run_Keyword_And_Ignore_Error
+ ... SSHLibrary.Get_File
+ ... ${MAVEN_DEFAULT_OUTPUT_FILENAME}
SSHLibrary.Get_File settings.xml
SSHLibrary.Get_File ${POM_FILENAME}
SSHLibrary.Get_File ${MAVEN_OUTPUT_FILENAME}
+
*** Keywords ***
Setup_Suite
[Documentation] Activate dependency Resources, create SSH connection.
SetupUtils.Teardown_Test_Show_Bugs_And_Start_Fast_Failing_If_Test_Failed
Add_Autorelease_Profile
- [Arguments] ${nexus_autorelease_dir}
[Documentation] Add autorelease repository into the settings.xml file.
+ [Arguments] ${nexus_autorelease_dir}
SSHLibrary.Get_File settings.xml
${root} = XML.Parse_Xml settings.xml
${profiles} = Xml.Get_Elements ${root} xpath=profiles/profile
FOR ${profile} IN @{profiles}
${id} = XML.Get_Element_Text ${profile} xpath=id
- BuiltIn.Exit_For_Loop_If "${id}" == "opendaylight-release"
+ IF "${id}" == "opendaylight-release" BREAK
END
BuiltIn.Should_Be_Equal_As_Strings ${id} opendaylight-release
${profile} = Xml.Copy_Element ${profile}
SSHLibrary.Put_File settings.xml
Update_Repository_Element
- [Arguments] ${profile} ${repo_xpath} ${nexus_autorelease_dir}
[Documentation] Modify given profile to use autorelease dir in nexus
+ [Arguments] ${profile} ${repo_xpath} ${nexus_autorelease_dir}
${repository} = XML.Get_Element ${profile} xpath=${repo_xpath}
${url} = XML.Get_Element_Text ${repository} xpath=url
${url} = String.Replace_String ${url} public ${nexus_autorelease_dir}
*** Settings ***
-Documentation Test suite for testing MD-SAL netty replication functionality
-Suite Setup Setup_Suite
-Test Setup Setup_Test
-Test Teardown Teardown_Test
-Default Tags 3node critical netty-replicate
-Library SSHLibrary
-Resource ${CURDIR}/../../../libraries/NettyReplication.robot
-Resource ${CURDIR}/../../../libraries/KarafKeywords.robot
-Resource ${CURDIR}/../../../libraries/ClusterManagement.robot
-Resource ${CURDIR}/../../../libraries/SetupUtils.robot
-Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
-Resource ${CURDIR}/../../../libraries/CarPeople.robot
-Resource ${CURDIR}/../../../libraries/WaitForFailure.robot
-Resource ${CURDIR}/../../../libraries/Utils.robot
+Documentation Test suite for testing MD-SAL netty replication functionality
+
+Library SSHLibrary
+Resource ${CURDIR}/../../../libraries/NettyReplication.robot
+Resource ${CURDIR}/../../../libraries/KarafKeywords.robot
+Resource ${CURDIR}/../../../libraries/ClusterManagement.robot
+Resource ${CURDIR}/../../../libraries/SetupUtils.robot
+Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
+Resource ${CURDIR}/../../../libraries/CarPeople.robot
+Resource ${CURDIR}/../../../libraries/WaitForFailure.robot
+Resource ${CURDIR}/../../../libraries/Utils.robot
+
+Suite Setup Setup_Suite
+Test Setup Setup_Test
+Test Teardown Teardown_Test
+
+Default Tags 3node critical netty-replicate
+
*** Variables ***
-${CARPEOPLE_DEV_FOLDER} ${CURDIR}/../../../variables/carpeople/crud
-${ADDITIONAL_SOURCE_NODE_INDEX} ${3}
-@{MULTIPLE_SINK_NODES_INDEXES} ${2} ${3}
+${CARPEOPLE_DEV_FOLDER} ${CURDIR}/../../../variables/carpeople/crud
+${ADDITIONAL_SOURCE_NODE_INDEX} ${3}
+@{MULTIPLE_SINK_NODES_INDEXES} ${2} ${3}
+
*** Test Cases ***
Replicate_Config_Addition
Replicate_Multiple_Changes_to_Multiple_Sinks
[Documentation] CRUD configuration changes done on source node should be replicated on multiple sink nodes.
- NettyReplication.Setup_Netty_Replication source_memeber_index=${DEFAULT_NETTY_SOURCE_NODE_INDEX} sink_members_indexes=@{MULTIPLE_SINK_NODES_INDEXES}
+ NettyReplication.Setup_Netty_Replication
+ ... source_memeber_index=${DEFAULT_NETTY_SOURCE_NODE_INDEX}
+ ... sink_members_indexes=@{MULTIPLE_SINK_NODES_INDEXES}
&{mapping_1} = BuiltIn.Create_Dictionary
- Put_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/people sink_node_indexes=${MULTIPLE_SINK_NODES_INDEXES} iterations=${5} iter_j_offset=${0}
+ Put_Config_And_Verify
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... sink_node_indexes=${MULTIPLE_SINK_NODES_INDEXES}
+ ... iterations=${5}
+ ... iter_j_offset=${0}
&{mapping_2} = BuiltIn.Create_Dictionary
- Put_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/people sink_node_indexes=${MULTIPLE_SINK_NODES_INDEXES} iterations=${7} iter_j_offset=${0}
+ Put_Config_And_Verify
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... sink_node_indexes=${MULTIPLE_SINK_NODES_INDEXES}
+ ... iterations=${7}
+ ... iter_j_offset=${0}
&{mapping_2_updated} = BuiltIn.Create_Dictionary
- Put_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/people sink_node_indexes=${MULTIPLE_SINK_NODES_INDEXES} iterations=${8} iter_j_offset=${2}
+ Put_Config_And_Verify
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... sink_node_indexes=${MULTIPLE_SINK_NODES_INDEXES}
+ ... iterations=${8}
+ ... iter_j_offset=${2}
Delete_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/people
Sink_Catch_Up_To_Changes_After_Opening_Connection
NettyReplication.Open_Source_Connection
&{mapping} = BuiltIn.Create_Dictionary
Put_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/people sink_node_indexes=@{EMPTY} iterations=${5}
- ${netty_sink_session_alias} = Resolve_Http_Session_For_Member member_index=@{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
- Verify_Config_Is_Not_Present ${CARPEOPLE_DEV_FOLDER}/people session=${netty_sink_session_alias} wait_time=5s
+ ${netty_sink_session_alias} = Resolve_Http_Session_For_Member
+ ... member_index=@{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
+ Verify_Config_Is_Not_Present
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... session=${netty_sink_session_alias}
+ ... wait_time=5s
NettyReplication.Open_Sink_Connection
- Verify_Config_Is_Present ${CARPEOPLE_DEV_FOLDER}/people session=${netty_sink_session_alias} iterations=${5}
+ Verify_Config_Is_Present
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... session=${netty_sink_session_alias}
+ ... iterations=${5}
Reconnect_After_Lost_Connection
[Documentation] Test if sink sucessfuly reconnects after lost connection and if changes made during lost connection are present on reconnected sink's datastore.
ClusterManagement.Isolate_Member_From_List_Or_All @{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
&{mapping} = BuiltIn.Create_Dictionary
Put_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/people sink_node_indexes=@{EMPTY} iterations=${5}
- ${netty_sink_session_alias} = Resolve_Http_Session_For_Member member_index=@{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
- Verify_Config_Is_Not_Present ${CARPEOPLE_DEV_FOLDER}/people session=${netty_sink_session_alias} wait_time=5s
+ ${netty_sink_session_alias} = Resolve_Http_Session_For_Member
+ ... member_index=@{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
+ Verify_Config_Is_Not_Present
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... session=${netty_sink_session_alias}
+ ... wait_time=5s
ClusterManagement.Rejoin_Member_From_List_Or_All @{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
- Verify_Config_Is_Present ${CARPEOPLE_DEV_FOLDER}/people session=${netty_sink_session_alias} iterations=${5}
+ Verify_Config_Is_Present
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... session=${netty_sink_session_alias}
+ ... iterations=${5}
[Teardown] Teardown_Isolation_Test
Change_Replication_Source
Put_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/people iterations=${5}
NettyReplication.Teardown_Netty_Replication
# switch source node 1 -> 3
- NettyReplication.Setup_Netty_Replication source_memeber_index=${ADDITIONAL_SOURCE_NODE_INDEX} sink_members_indexes=${DEFAULT_NETTY_SINK_NODE_INDEXES}
+ NettyReplication.Setup_Netty_Replication
+ ... source_memeber_index=${ADDITIONAL_SOURCE_NODE_INDEX}
+ ... sink_members_indexes=${DEFAULT_NETTY_SINK_NODE_INDEXES}
&{mapping_newer} = BuiltIn.Create_Dictionary
- Put_Config_And_Verify ${CARPEOPLE_DEV_FOLDER}/cars source_node_index=${ADDITIONAL_SOURCE_NODE_INDEX} iterations=${8}
+ Put_Config_And_Verify
+ ... ${CARPEOPLE_DEV_FOLDER}/cars
+ ... source_node_index=${ADDITIONAL_SOURCE_NODE_INDEX}
+ ... iterations=${8}
# check if data from old source was forgotten (removed)
- ${netty_sink_session_alias} = Resolve_Http_Session_For_Member member_index=@{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
- Verify_Config_Is_Not_Present ${CARPEOPLE_DEV_FOLDER}/people session=${netty_sink_session_alias} removal=True
+ ${netty_sink_session_alias} = Resolve_Http_Session_For_Member
+ ... member_index=@{DEFAULT_NETTY_SINK_NODE_INDEXES}[0]
+ Verify_Config_Is_Not_Present
+ ... ${CARPEOPLE_DEV_FOLDER}/people
+ ... session=${netty_sink_session_alias}
+ ... removal=True
+
*** Keywords ***
Setup_suite
FOR ${cluster_member_index} IN @{members_index_list}
${member_ip_address} = ClusterManagement.Resolve_Ip_Address_For_Member ${cluster_member_index}
# backup old cluster configuration files
- Run_Bash_Command_On_Member command=pushd ${karaf_home} && tar -cvf /tmp/config_backup.tar ./configuration/initial/ && popd member_index=${cluster_member_index}
- Run_Bash_Command_On_Member command=pushd ${karaf_home} && ./bin/configure_cluster.sh 1 ${member_ip_address} && popd member_index=${cluster_member_index}
+ Run_Bash_Command_On_Member
+ ... command=pushd ${karaf_home} && tar -cvf /tmp/config_backup.tar ./configuration/initial/ && popd
+ ... member_index=${cluster_member_index}
+ Run_Bash_Command_On_Member
+ ... command=pushd ${karaf_home} && ./bin/configure_cluster.sh 1 ${member_ip_address} && popd
+ ... member_index=${cluster_member_index}
END
Setup_Test
ClusterManagement.Start_Members_From_List_Or_All
Put_Config_And_Verify
+ [Documentation] Request put config on netty replicate source and verify changes has been made on both source and sinks.
[Arguments] ${template_folder} ${mapping}={} ${source_node_index}=${DEFAULT_NETTY_SOURCE_NODE_INDEX} ${sink_node_indexes}=${DEFAULT_NETTY_SINK_NODE_INDEXES}
... ${iterations}=${1} ${iter_j_offset}=${0}
- [Documentation] Request put config on netty replicate source and verify changes has been made on both source and sinks.
${netty_source_session_alias} = Resolve_Http_Session_For_Member member_index=${source_node_index}
- TemplatedRequests.Put_As_Json_Templated ${template_folder} session=${netty_source_session_alias} iterations=${iterations} iter_j_offset=${iter_j_offset}
- Verify_Config_Is_Present template_folder=${template_folder} mapping=${mapping} session=${netty_source_session_alias} iterations=${iterations} iter_j_offset=${iter_j_offset}
+ TemplatedRequests.Put_As_Json_Templated
+ ... ${template_folder}
+ ... session=${netty_source_session_alias}
+ ... iterations=${iterations}
+ ... iter_j_offset=${iter_j_offset}
+ Verify_Config_Is_Present
+ ... template_folder=${template_folder}
+ ... mapping=${mapping}
+ ... session=${netty_source_session_alias}
+ ... iterations=${iterations}
+ ... iter_j_offset=${iter_j_offset}
FOR ${sink_node_index} IN @{sink_node_indexes}
${netty_sink_session_alias} = Resolve_Http_Session_For_Member member_index=${sink_node_index}
- Verify_Config_Is_Present template_folder=${template_folder} mapping=${mapping} session=${netty_sink_session_alias} iterations=${iterations} iter_j_offset=${iter_j_offset}
+ Verify_Config_Is_Present
+ ... template_folder=${template_folder}
+ ... mapping=${mapping}
+ ... session=${netty_sink_session_alias}
+ ... iterations=${iterations}
+ ... iter_j_offset=${iter_j_offset}
END
Verify_Config_Is_Present
- [Arguments] ${template_folder} ${session} ${mapping}={} ${iterations}=${1} ${iter_j_offset}=${0}
[Documentation] Verify config is present on target node datastore by using templated request.
+ [Arguments] ${template_folder} ${session} ${mapping}={} ${iterations}=${1} ${iter_j_offset}=${0}
BuiltIn.Should_Not_Be_Empty ${session} Could not verify, session to node is not opened
BuiltIn.Wait_Until_Keyword_Succeeds 10x 3s TemplatedRequests.Get_As_Json_Templated ${template_folder}
... verify=True session=${session} iterations=${iterations} iter_j_offset=${iter_j_offset}
Delete_Config_And_Verify
+ [Documentation] Request delete config on netty replicate source and verify changes has been made on both source and sink.
[Arguments] ${template_folder} ${mapping}={} ${source_node_index}=${DEFAULT_NETTY_SOURCE_NODE_INDEX} ${sink_node_indexes}=${DEFAULT_NETTY_SINK_NODE_INDEXES}
... ${iterations}=${1}
- [Documentation] Request delete config on netty replicate source and verify changes has been made on both source and sink.
${netty_source_session_alias} = Resolve_Http_Session_For_Member member_index=${source_node_index}
TemplatedRequests.Delete_Templated ${template_folder} session=${netty_source_session_alias}
- Verify_Config_Is_Not_Present template_folder=${template_folder} mapping=${mapping} session=${netty_source_session_alias} removal=True
+ Verify_Config_Is_Not_Present
+ ... template_folder=${template_folder}
+ ... mapping=${mapping}
+ ... session=${netty_source_session_alias}
+ ... removal=True
FOR ${sink_node_index} IN @{sink_node_indexes}
${netty_sink_session_alias} = Resolve_Http_Session_For_Member member_index=${sink_node_index}
- Verify_Config_Is_Not_Present template_folder=${template_folder} mapping=${mapping} session=${netty_sink_session_alias} removal=True
+ Verify_Config_Is_Not_Present
+ ... template_folder=${template_folder}
+ ... mapping=${mapping}
+ ... session=${netty_sink_session_alias}
+ ... removal=True
END
Verify_Config_Is_Not_Present
- [Arguments] ${template_folder} ${session} ${mapping}={} ${removal}=False ${wait_time}=0s
[Documentation] Verify config is not present on the target node datastore by using templated request. Should get return code 404 or 409.
... removal - Retries until config is not present (for cases of cofig deletion when config migh be present at begining, but disapears later)
... wait_time - Repeatedly checks for specific amount of time if config does not appear (for cases of config addition when config is not present, but might appear after some time)
+ [Arguments] ${template_folder} ${session} ${mapping}={} ${removal}=False ${wait_time}=0s
BuiltIn.Should_Not_Be_Empty ${session} Could not verify, session to node is not opened
- ${uri} = TemplatedRequests.Resolve_Text_From_Template_Folder folder=${template_folder} base_name=location extension=uri mapping=${mapping}
- BuiltIn.Run_Keyword_If ${removal} Until_Confg_Is_Removed ${session} ${uri}
- ... ELSE IF "${wait_time}" != "0s" Config_Does_Not_Appear_During_Time ${session} ${uri} ${wait_time}
- ... ELSE Utils.No_Content_From_URI ${session} ${uri}
+ ${uri} = TemplatedRequests.Resolve_Text_From_Template_Folder
+ ... folder=${template_folder}
+ ... base_name=location
+ ... extension=uri
+ ... mapping=${mapping}
+ IF ${removal}
+ Until_Confg_Is_Removed ${session} ${uri}
+ ELSE IF "${wait_time}" != "0s"
+ Config_Does_Not_Appear_During_Time ${session} ${uri} ${wait_time}
+ ELSE
+ Utils.No_Content_From_URI ${session} ${uri}
+ END
Until_Confg_Is_Removed
- [Arguments] ${session} ${uri}
[Documentation] Retry until config is not avaibale
+ [Arguments] ${session} ${uri}
BuiltIn.Wait_Until_Keyword_Succeeds 10x 3s Utils.No_Content_From_URI ${session} ${uri}
Config_Does_Not_Appear_During_Time
- [Arguments] ${session} ${uri} ${wait_time}
[Documentation] Repeatedly check if config does not appear during the wait time
- WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout ${wait_time} 1s Utils.No_Content_From_URI ${session} ${uri}
+ [Arguments] ${session} ${uri} ${wait_time}
+ WaitForFailure.Verify_Keyword_Does_Not_Fail_Within_Timeout
+ ... ${wait_time}
+ ... 1s
+ ... Utils.No_Content_From_URI
+ ... ${session}
+ ... ${uri}
*** Settings ***
-Documentation Test suite for nemo engine functionality
-Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
-Suite Teardown Delete All Sessions
-Library RequestsLibrary
-Library OperatingSystem
-Library ../../../libraries/Common.py
-Variables ../../../variables/Variables.py
-Resource ../../../libraries/Utils.robot
-Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
+Documentation Test suite for nemo engine functionality
+
+Library RequestsLibrary
+Library OperatingSystem
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/Utils.robot
+Resource ${CURDIR}/../../../libraries/TemplatedRequests.robot
+
+Suite Setup Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Teardown Delete All Sessions
+
*** Variables ***
-${REGISTER_TENANT_FILE} ${CURDIR}/../../../variables/nemo/register-user.json
-${STRUCTURE_HOST_FILE} ${CURDIR}/../../../variables/nemo/intent-node-host.json
-${STRUCTURE_INTENT_FILE} ${CURDIR}/../../../variables/nemo/structure-intent.json
-${PREDEFINE_ROLE_FILE} ${CURDIR}/../../../variables/nemo/predefine/role.json
-${PREDEFINE_NODE_FILE} ${CURDIR}/../../../variables/nemo/predefine/node.json
+${REGISTER_TENANT_FILE} ${CURDIR}/../../../variables/nemo/register-user.json
+${STRUCTURE_HOST_FILE} ${CURDIR}/../../../variables/nemo/intent-node-host.json
+${STRUCTURE_INTENT_FILE} ${CURDIR}/../../../variables/nemo/structure-intent.json
+${PREDEFINE_ROLE_FILE} ${CURDIR}/../../../variables/nemo/predefine/role.json
+${PREDEFINE_NODE_FILE} ${CURDIR}/../../../variables/nemo/predefine/node.json
${PREDEFINE_CONNECTION_FILE} ${CURDIR}/../../../variables/nemo/predefine/connection.json
+
*** Test Cases ***
Add Pre-define Role
[Documentation] Add Pre-define Role
- [Tags] Put
+ [Tags] put
${body} OperatingSystem.Get File ${PREDEFINE_ROLE_FILE}
- ${resp} RequestsLibrary.Put Request session ${PREDEFINE_ROLE_URI} data=${body} headers=${HEADERS_YANG_JSON}
+ ${resp} RequestsLibrary.Put Request
+ ... session
+ ... ${PREDEFINE_ROLE_URI}
+ ... data=${body}
+ ... headers=${HEADERS_YANG_JSON}
Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
Add Pre-define Node
[Documentation] Add Pre-define Node
- [Tags] Put
+ [Tags] put
${body} OperatingSystem.Get File ${PREDEFINE_NODE_FILE}
- ${resp} RequestsLibrary.Put Request session ${PREDEFINE_NODE_URI} data=${body} headers=${HEADERS_YANG_JSON}
+ ${resp} RequestsLibrary.Put Request
+ ... session
+ ... ${PREDEFINE_NODE_URI}
+ ... data=${body}
+ ... headers=${HEADERS_YANG_JSON}
Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
Add Pre-define Connection
[Documentation] Add Pre-define Connection
- [Tags] Put
+ [Tags] put
${body} OperatingSystem.Get File ${PREDEFINE_CONNECTION_FILE}
- ${resp} RequestsLibrary.Put Request session ${PREDEFINE_CONNECTION_URI} data=${body} headers=${HEADERS_YANG_JSON}
+ ${resp} RequestsLibrary.Put Request
+ ... session
+ ... ${PREDEFINE_CONNECTION_URI}
+ ... data=${body}
+ ... headers=${HEADERS_YANG_JSON}
Should Contain ${ALLOWED_STATUS_CODES} ${resp.status_code}
Register Tenant
[Documentation] Register Tenant
- [Tags] Post
+ [Tags] post
${body} OperatingSystem.Get File ${REGISTER_TENANT_FILE}
- ${resp} RequestsLibrary.Post Request session ${REGISTER_TENANT_URI} data=${body} headers=${HEADERS_YANG_JSON}
+ ${resp} RequestsLibrary.Post Request
+ ... session
+ ... ${REGISTER_TENANT_URI}
+ ... data=${body}
+ ... headers=${HEADERS_YANG_JSON}
Log ${resp.content}
Should Be Equal As Strings ${resp.status_code} 200
Add Host Intent
[Documentation] Add Host Intent
- [Tags] Post
+ [Tags] post
${body} OperatingSystem.Get File ${STRUCTURE_HOST_FILE}
- ${resp} RequestsLibrary.Post Request session ${STRUCTURE_INTENT_URI} data=${body} headers=${HEADERS_YANG_JSON}
+ ${resp} RequestsLibrary.Post Request
+ ... session
+ ... ${STRUCTURE_INTENT_URI}
+ ... data=${body}
+ ... headers=${HEADERS_YANG_JSON}
Log ${resp.content}
Should Be Equal As Strings ${resp.status_code} 200
Add Structure Intent
[Documentation] Add Structure Intent
- [Tags] Post
+ [Tags] post
${body} OperatingSystem.Get File ${STRUCTURE_INTENT_FILE}
- ${resp} RequestsLibrary.Post Request session ${STRUCTURE_INTENT_URI} data=${body} headers=${HEADERS_YANG_JSON}
+ ${resp} RequestsLibrary.Post Request
+ ... session
+ ... ${STRUCTURE_INTENT_URI}
+ ... data=${body}
+ ... headers=${HEADERS_YANG_JSON}
Should Be Equal As Strings ${resp.status_code} 200