*** Settings ***
-Documentation Cluster Ovsdb library. So far this library is only to be used by Ovsdb cluster test as it is very specific for this test.
-Library RequestsLibrary
-Resource ClusterKeywords.robot
-Resource MininetKeywords.robot
-Resource Utils.robot
-Resource OVSDB.robot
-Variables ../variables/Variables.py
+Documentation Cluster Ovsdb library. So far this library is only to be used by Ovsdb cluster test as it is very specific for this test.
+
+Library Collections
+Library RequestsLibrary
+Resource ClusterManagement.robot
+Resource CompareStream.robot
+Resource MininetKeywords.robot
+Resource Utils.robot
+Resource OVSDB.robot
+Resource ../variables/ovsdb/Variables.robot
+Variables ../variables/Variables.py
+
*** Variables ***
-${BRIDGE} br01
-${OVSDB_CONFIG_DIR} ${CURDIR}/../variables/ovsdb
+@{SHARD_OPER_LIST} topology default entity-ownership
+@{SHARD_CONF_LIST} topology default
+${BRIDGE} br01
+${OVSDB_CONFIG_DIR} ${CURDIR}/../variables/ovsdb
+
*** Keywords ***
Check Ovsdb Shards Status
- [Arguments] ${controller_index_list}
[Documentation] Check Status for all shards in Ovsdb application.
- ${topo_conf_leader} ${topo_conf_followers_list} ClusterKeywords.Get Cluster Shard Status ${controller_index_list} config topology
- ${topo_oper_leader} ${topo_oper_followers_list} ClusterKeywords.Get Cluster Shard Status ${controller_index_list} operational topology
- ${owner_oper_leader} ${owner_oper_followers_list} ClusterKeywords.Get Cluster Shard Status ${controller_index_list} operational entity-ownership
- Log config topology Leader is ${topo_conf_leader} and followers are ${topo_conf_followers_list}
- Log operational topology Leader is ${topo_oper_leader} and followers are ${topo_oper_followers_list}
- Log operational entity-ownership Leader is ${owner_oper_leader} and followers are ${owner_oper_followers_list}
+ [Arguments] ${controller_index_list}=${EMPTY}
+ CompareStream.Run_Keyword_If_At_Least_Phosphorus
+ ... Collections.Remove Values From List
+ ... ${SHARD_OPER_LIST}
+ ... entity-ownership
+ Log ${SHARD_OPER_LIST}
+ ClusterManagement.Verify_Leader_Exists_For_Each_Shard
+ ... shard_name_list=${SHARD_OPER_LIST}
+ ... shard_type=operational
+ ... member_index_list=${controller_index_list}
+ ClusterManagement.Verify_Leader_Exists_For_Each_Shard
+ ... shard_name_list=${SHARD_CONF_LIST}
+ ... shard_type=config
+ ... member_index_list=${controller_index_list}
Check Ovsdb Shards Status After Cluster Event
- [Arguments] ${controller_index_list}
[Documentation] Check Shard Status after some cluster event.
+ [Arguments] ${controller_index_list}=${EMPTY}
Wait Until Keyword Succeeds 90s 1s Check Ovsdb Shards Status ${controller_index_list}
Get Ovsdb Entity Owner Status For One Device
- [Arguments] ${controller_index_list} ${device}
- [Documentation] Check Entity Owner Status and identify owner and candidate for an ovs device ${device}.
- ${owner} ${candidates_list} Wait Until Keyword Succeeds 20s 1s ClusterKeywords.Get Cluster Entity Owner ${controller_index_list}
- ... ovsdb ${device}
- [Return] ${owner} ${candidates_list}
+ [Documentation] Check Entity Owner Status and identify owner and successors for an ovs device ${device}. Request is sent to controller ${controller_index}.
+ [Arguments] ${device} ${controller_index} ${controller_index_list}=${EMPTY}
+ ${owner} ${successor_list} Wait Until Keyword Succeeds
+ ... 20s
+ ... 1s
+ ... ClusterManagement.Verify_Owner_And_Successors_For_Device
+ ... device_name=${device}
+ ... device_type=ovsdb
+ ... member_index=${controller_index}
+ ... candidate_list=${controller_index_list}
+ RETURN ${owner} ${successor_list}
Create Sample Bridge Manually And Verify
- [Arguments] ${controller_index_list}
[Documentation] Create bridge br-s1 using OVS command and verify it gets created in all instances in ${controller_index_list}.
- Utils.Run Command On Mininet ${TOOLS_SYSTEM_IP} sudo ovs-vsctl add-br br-s1
- ${dictionary_operational}= Create Dictionary br-s1=5
- ${dictionary_config}= Create Dictionary br-s1=0
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary_config} ${CONFIG_TOPO_API}
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary_operational} ${OPERATIONAL_TOPO_API}
+ [Arguments] ${ovs_system_ip}=${TOOLS_SYSTEM_IP} ${controller_index_list}=${EMPTY}
+ Utils.Run Command On Mininet ${ovs_system_ip} sudo ovs-vsctl add-br br-s1
+ ${dictionary_operational} Create Dictionary br-s1=5
+ ${dictionary_config} Create Dictionary br-s1=0
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_CONFIG_TOPO_API}
+ ... dictionary=${dictionary_config}
+ ... member_index_list=${controller_index_list}
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_OPERATIONAL_TOPO_API}
+ ... dictionary=${dictionary_operational}
+ ... member_index_list=${controller_index_list}
Add Sample Port To The Manual Bridge And Verify
- [Arguments] ${controller_index_list}
[Documentation] Add Port vx1 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.
- Utils.Run Command On Mininet ${TOOLS_SYSTEM_IP} sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan
- ${dictionary_operational}= Create Dictionary vx1=2
- ${dictionary_config}= Create Dictionary vx1=0
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary_config} ${CONFIG_TOPO_API}
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary_operational} ${OPERATIONAL_TOPO_API}
+ [Arguments] ${ovs_system_ip}=${TOOLS_SYSTEM_IP} ${controller_index_list}=${EMPTY}
+ Utils.Run Command On Mininet
+ ... ${ovs_system_ip}
+ ... sudo ovs-vsctl add-port br-s1 vx1 -- set Interface vx1 type=vxlan
+ ${dictionary_operational} Create Dictionary vx1=2
+ ${dictionary_config} Create Dictionary vx1=0
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_CONFIG_TOPO_API}
+ ... dictionary=${dictionary_config}
+ ... member_index_list=${controller_index_list}
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_OPERATIONAL_TOPO_API}
+ ... dictionary=${dictionary_operational}
+ ... member_index_list=${controller_index_list}
+
+Create Sample Tap Device
+ [Documentation] Create Tap Device vport1 and vport2 to add to the bridge br-s1 using OVS command.
+ [Arguments] ${ovs_system_ip}=${TOOLS_SYSTEM_IP}
+ Utils.Run Command On Mininet ${ovs_system_ip} ip tuntap add mode tap vport1
+ Utils.Run Command On Mininet ${ovs_system_ip} ip tuntap add mode tap vport2
+ Utils.Run Command On Mininet ${ovs_system_ip} ifconfig vport1 up
+ Utils.Run Command On Mininet ${ovs_system_ip} ifconfig vport2 up
+
+Add Sample Tap Device To The Manual Bridge And Verify
+ [Documentation] Add Tap Device vport1 and vport2 to br-s1 using OVS command and verify it gets added in all instances in ${controller_index_list}.
+ [Arguments] ${ovs_system_ip}=${TOOLS_SYSTEM_IP} ${controller_index_list}=${EMPTY}
+ Utils.Run Command On Mininet ${ovs_system_ip} sudo ovs-vsctl add-port br-s1 vport1 -- add-port br-s1 vport2
+ ${dictionary_operational} Create Dictionary vport1=2 vport2=2
+ ${dictionary_config} Create Dictionary vport1=0 vport2=0
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_CONFIG_TOPO_API}
+ ... dictionary=${dictionary_config}
+ ... member_index_list=${controller_index_list}
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_OPERATIONAL_TOPO_API}
+ ... dictionary=${dictionary_operational}
+ ... member_index_list=${controller_index_list}
Delete Sample Bridge Manually And Verify
- [Arguments] ${controller_index_list}
[Documentation] Delete bridge br-s1 using OVS command and verify it gets applied in all instances in ${controller_index_list}.
- Utils.Run Command On Mininet ${TOOLS_SYSTEM_IP} sudo ovs-vsctl del-br br-s1
- ${dictionary}= Create Dictionary br-s1=0
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary} ${OPERATIONAL_TOPO_API}
+ [Arguments] ${ovs_system_ip}=${TOOLS_SYSTEM_IP} ${controller_index_list}=${EMPTY}
+ Utils.Run Command On Mininet ${ovs_system_ip} sudo ovs-vsctl del-br br-s1
+ ${dictionary} Create Dictionary br-s1=0
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_OPERATIONAL_TOPO_API}
+ ... dictionary=${dictionary}
+ ... member_index_list=${controller_index_list}
Create Sample Bridge And Verify
- [Arguments] ${controller_index_list} ${controller_index}
[Documentation] Create bridge ${BRIDGE} in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}.
- ${body}= OperatingSystem.Get File ${CURDIR}/../variables/ovsdb/create_bridge_3node.json
+ [Arguments] ${controller_index} ${controller_index_list}=${EMPTY}
+ ${body} OperatingSystem.Get File ${CURDIR}/../variables/ovsdb/create_bridge_3node.json
${body} Replace String ${body} ovsdb://127.0.0.1:61644 ovsdb://uuid/${ovsdb_uuid}
${body} Replace String ${body} tcp:controller1:6633 tcp:${ODL_SYSTEM_1_IP}:6633
${body} Replace String ${body} tcp:controller2:6633 tcp:${ODL_SYSTEM_2_IP}:6633
${body} Replace String ${body} 61644 ${OVSDB_PORT}
Log ${body}
${TOOLS_SYSTEM_IP1} Replace String ${TOOLS_SYSTEM_IP} ${TOOLS_SYSTEM_IP} "${TOOLS_SYSTEM_IP}"
- ${dictionary}= Create Dictionary ${TOOLS_SYSTEM_IP1}=1 ${OVSDBPORT}=4 ${BRIDGE}=1
- Wait Until Keyword Succeeds 20s 1s ClusterKeywords.Put And Check At URI In Cluster ${controller_index_list} ${controller_index} ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}
+ ${dictionary} Create Dictionary ${TOOLS_SYSTEM_IP1}=1 ${OVSDBPORT}=4 ${BRIDGE}=1
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Put_As_Json_And_Check_Member_List_Or_All
+ ... ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}
... ${body}
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary} ${OPERATIONAL_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}
+ ... ${controller_index}
+ ... ${controller_index_list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}?${RFC8040_OPERATIONAL_CONTENT}
+ ... dictionary=${dictionary}
+ ... member_index_list=${controller_index_list}
Create Sample Port And Verify
- [Arguments] ${controller_index_list} ${controller_index}
[Documentation] Add Port vx2 to bridge ${BRIDGE} in controller ${controller_index} and verify it gets added in all instances in ${controller_index_list}.
+ [Arguments] ${controller_index} ${controller_index_list}=${EMPTY}
${sample} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/create_port_3node.json
${body} Replace String ${sample} 192.168.1.10 ${TOOLS_SYSTEM_IP}
Log ${body}
- Log URL is ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point/vx2/
- ${port_dictionary}= Create Dictionary ${BRIDGE}=7 vx2=3
- ClusterKeywords.Put And Check At URI In Cluster ${controller_index_list} ${controller_index} ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point/vx2/ ${body}
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${port_dictionary} ${OPERATIONAL_TOPO_API}
+ Log URL is ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point=vx2
+ ${port_dictionary} Create Dictionary ${BRIDGE}=1 vx2=3
+ ClusterManagement.Put_As_Json_And_Check_Member_List_Or_All
+ ... ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point=vx2
+ ... ${body}
+ ... ${controller_index}
+ ... ${controller_index_list}
+ Wait Until Keyword Succeeds
+ ... 10s
+ ... 2s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point=vx2?${RFC8040_OPERATIONAL_CONTENT}
+ ... dictionary=${port_dictionary}
+ ... member_index_list=${controller_index_list}
Modify the destination IP of Sample Port
- [Arguments] ${controller_index_list} ${controller_index}
[Documentation] Modify the dst ip of port vx2 in bridge ${BRIDGE} in controller ${controller_index}.
+ [Arguments] ${controller_index} ${controller_index_list}=${EMPTY}
${sample} OperatingSystem.Get File ${OVSDB_CONFIG_DIR}/create_port_3node.json
${body} Replace String ${sample} 192.168.1.10 10.0.0.19
- Log URL is ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point/vx2/
+ Log URL is ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point=vx2
Log ${body}
- ClusterKeywords.Put And Check At URI In Cluster ${controller_index_list} ${controller_index} ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point/vx2/ ${body}
+ ClusterManagement.Put_As_Json_And_Check_Member_List_Or_All
+ ... ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point=vx2
+ ... ${body}
+ ... ${controller_index}
+ ... ${controller_index_list}
Verify Sample Port Is Modified
- [Arguments] ${controller_index_list}
[Documentation] Verify dst ip of port vx2 in bridge ${BRIDGE} gets modified in all instances in ${controller_index_list}.
- ${port_dictionary} Create Dictionary br01=7 vx2=3 10.0.0.19=1
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${port_dictionary} ${OPERATIONAL_TOPO_API}
+ [Arguments] ${controller_index_list}=${EMPTY}
+ ${port_dictionary} Create Dictionary br01=6 vx2=3 10.0.0.19=1
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}?${RFC8040_OPERATIONAL_CONTENT}
+ ... dictionary=${port_dictionary}
+ ... member_index_list=${controller_index_list}
Delete Sample Port And Verify
- [Arguments] ${controller_index_list} ${controller_index}
[Documentation] Delete port vx2 from bridge ${BRIDGE} in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.
- ${dictionary}= Create Dictionary vx2=0
- ClusterKeywords.Delete And Check At URI In Cluster ${controller_index_list} ${controller_index} ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point/vx2/
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary} ${OPERATIONAL_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}
+ [Arguments] ${controller_index} ${controller_index_list}=${EMPTY}
+ ${dictionary} Create Dictionary vx2=0
+ ClusterManagement.Delete_And_Check_Member_List_Or_All
+ ... ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point=vx2
+ ... ${controller_index}
+ ... ${controller_index_list}
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}?${RFC8040_OPERATIONAL_CONTENT}
+ ... dictionary=${dictionary}
+ ... member_index_list=${controller_index_list}
Delete Sample Bridge And Verify
- [Arguments] ${controller_index_list} ${controller_index}
[Documentation] Delete bridge ${BRIDGE} in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}.
- ${dictionary}= Create Dictionary ${BRIDGE}=0
- Wait Until Keyword Succeeds 20s 1s ClusterKeywords.Delete And Check At URI In Cluster ${controller_index_list} ${controller_index} ${CONFIG_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary} ${OPERATIONAL_TOPO_API}/topology/ovsdb:1/node/ovsdb:%2F%2Fuuid%2F${ovsdb_uuid}
+ [Arguments] ${controller_index} ${controller_index_list}=${EMPTY}
+ ${dictionary} Create Dictionary ${BRIDGE}=0
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Delete_And_Check_Member_List_Or_All
+ ... ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}
+ ... ${controller_index}
+ ... ${controller_index_list}
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}?${RFC8040_OPERATIONAL_CONTENT}
+ ... dictionary=${dictionary}
+ ... member_index_list=${controller_index_list}
Configure Exit OVSDB Connection
- [Arguments] ${controller_index_list}
[Documentation] Cleans up test environment, close existing sessions.
+ [Arguments] ${controller_index_list}=${EMPTY}
OVSDB.Clean OVSDB Test Environment ${TOOLS_SYSTEM_IP}
- ${dictionary}= Create Dictionary ovsdb://uuid=0
- Wait Until Keyword Succeeds 5s 1s ClusterKeywords.Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary} ${OPERATIONAL_TOPO_API}
+ ${dictionary} Create Dictionary ovsdb://uuid=0
+ Wait Until Keyword Succeeds
+ ... 5s
+ ... 1s
+ ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All
+ ... uri=${RFC8040_OPERATIONAL_TOPO_API}
+ ... dictionary=${dictionary}
+ ... member_index_list=${controller_index_list}