X-Git-Url: https://git.opendaylight.org/gerrit/gitweb?a=blobdiff_plain;f=csit%2Flibraries%2FClusterOvsdb.robot;h=41b95eed9fc052a77e7e439b71f36610782c638b;hb=HEAD;hp=ff7ecae896881d797bee000090e3e73469bea3fb;hpb=c8f4b9659d33c5f71d386a6c23852fa02ec92b01;p=integration%2Ftest.git diff --git a/csit/libraries/ClusterOvsdb.robot b/csit/libraries/ClusterOvsdb.robot index ff7ecae896..ed9999d370 100644 --- a/csit/libraries/ClusterOvsdb.robot +++ b/csit/libraries/ClusterOvsdb.robot @@ -1,81 +1,266 @@ *** 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 -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 *** +@{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} Wait Until Keyword Succeeds 10s 1s Get Cluster Shard Status ${controller_index_list} - ... config topology - ${topo_oper_leader} ${topo_oper_followers_list} Wait Until Keyword Succeeds 10s 1s Get Cluster Shard Status ${controller_index_list} - ... operational topology - 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} + [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 + [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} - [Documentation] Check Entity Owner Status and identify owner and candidate. - ${owner} ${candidates_list} Wait Until Keyword Succeeds 10s 1s Get Cluster Entity Owner For Ovsdb ${controller_index_list} - ... ovsdb ovsdb:1 - [Return] ${owner} ${candidates_list} - -Get Cluster Entity Owner For Ovsdb - [Arguments] ${controller_index_list} ${device_type} ${device} - [Documentation] Checks Entity Owner status for a ${device} and returns owner index and list of candidates from a ${controller_index_list}. - ... ${device_type} is openflow, ovsdb, etc... - ${length}= Get Length ${controller_index_list} - ${candidates_list}= Create List - ${data}= Get Data From URI controller@{controller_index_list}[0] /restconf/operational/entity-owners:entity-owners - Log ${data} - ${data}= Replace String ${data} /network-topology:network-topology/network-topology:topology[network-topology:topology-id=' ${EMPTY} - # the UUID will not always be the same so need to use regexp to remove this string - ${data}= Replace String Using Regexp ${data} \/network-topology:node\\[network-topology:node-id='ovsdb://uuid/........-....-....-....-............ ${EMPTY} - Log ${data} - ${clear_data}= Replace String ${data} '] ${EMPTY} - Log ${clear_data} - ${json}= To Json ${clear_data} - ${entity_type_list}= Get From Dictionary &{json}[entity-owners] entity-type - ${entity_type_index}= Get Index From List Of Dictionaries ${entity_type_list} type ${device_type} - Should Not Be Equal ${entity_type_index} -1 No Entity Owner found for ${device_type} - ${entity_list}= Get From Dictionary @{entity_type_list}[${entity_type_index}] entity - ${entity_index}= Get Index From List Of Dictionaries ${entity_list} id ${device} - Should Not Be Equal ${entity_index} -1 Device ${device} not found in Entity Owner ${device_type} - ${entity_owner}= Get From Dictionary @{entity_list}[${entity_index}] owner - Should Not Be Empty ${entity_owner} No owner found for ${device} - ${owner}= Replace String ${entity_owner} member- ${EMPTY} - ${owner}= Convert To Integer ${owner} - List Should Contain Value ${controller_index_list} ${owner} Owner ${owner} not exisiting in ${controller_index_list} - ${entity_candidates_list}= Get From Dictionary @{entity_list}[${entity_index}] candidate - ${list_length}= Get Length ${entity_candidates_list} - : FOR ${entity_candidate} IN @{entity_candidates_list} - \ ${candidate}= Replace String &{entity_candidate}[name] member- ${EMPTY} - \ ${candidate}= Convert To Integer ${candidate} - \ List Should Contain Value ${controller_index_list} ${candidate} Candidate ${candidate} not exisiting in ${controller_index_list} - \ Run Keyword If '${candidate}' != '${owner}' Append To List ${candidates_list} ${candidate} - [Return] ${owner} ${candidates_list} - -Create Bridge And Verify - [Arguments] ${controller_index_list} ${controller_index} - [Documentation] Create bridge in ${controller_index} and verify it gets applied in all instances in ${controller_index_list}. - ${sample}= OperatingSystem.Get File ${CURDIR}/../variables/ovsdb/create_bridge_3node.json - Log ${sample} - ${sample1} Replace String ${sample} tcp:controller1:6633 tcp:${ODL_SYSTEM_1_IP}:6640 - Log ${sample1} - ${sample2} Replace String ${sample1} tcp:controller2:6633 tcp:${ODL_SYSTEM_2_IP}:6640 - Log ${sample2} - ${sample3} Replace String ${sample2} tcp:controller3:6633 tcp:${ODL_SYSTEM_3_IP}:6640 - Log ${sample3} - ${sample4} Replace String ${sample3} 127.0.0.1 ${MININET} - Log ${sample4} - ${sample5} Replace String ${sample4} br01 ${BRIDGE} - Log ${sample5} - ${body} Replace String ${sample5} 61644 ${OVSDB_PORT} + [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 + [Documentation] Create bridge br-s1 using OVS command and verify it gets created 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-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 + [Documentation] Add Port vx1 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 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 + [Documentation] Delete bridge br-s1 using OVS command and verify it gets applied 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 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 + [Documentation] Create bridge ${BRIDGE} in controller ${controller_index} and verify it gets created in all instances in ${controller_index_list}. + [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} tcp:controller3:6633 tcp:${ODL_SYSTEM_3_IP}:6633 + ${body} Replace String ${body} 127.0.0.1 ${TOOLS_SYSTEM_IP} + ${body} Replace String ${body} br01 ${BRIDGE} + ${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 + ... 5s + ... 1s + ... ClusterManagement.Put_As_Json_And_Check_Member_List_Or_All + ... ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE} + ... ${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}?${RFC8040_OPERATIONAL_CONTENT} + ... dictionary=${dictionary} + ... member_index_list=${controller_index_list} + +Create Sample Port And Verify + [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 ${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 + [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 ${RFC8040_SOUTHBOUND_NODE_API}uuid%2F${ovsdb_uuid}%2Fbridge%2F${BRIDGE}/termination-point=vx2 Log ${body} - ${dictionary}= Create Dictionary ${MININET}=1 ${OVSDBPORT}=4 ${BRIDGE}=1 - Put And Check At URI In Cluster ${controller_index_list} ${controller_index} ${SOUTHBOUND_CONFIG_API}%2Fbridge%2F${BRIDGE} ${body} ${HEADERS} - Wait Until Keyword Succeeds 5s 1s Check Item Occurrence At URI In Cluster ${controller_index_list} ${dictionary} ${OPERATIONAL_TOPO_API} + 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 + [Documentation] Verify dst ip of port vx2 in bridge ${BRIDGE} gets modified in all instances in ${controller_index_list}. + [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 + [Documentation] Delete port vx2 from bridge ${BRIDGE} in controller ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}. + [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 + [Documentation] Delete bridge ${BRIDGE} in ${controller_index} and verify it gets deleted in all instances in ${controller_index_list}. + [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 + [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 + ... ClusterManagement.Check_Item_Occurrence_Member_List_Or_All + ... uri=${RFC8040_OPERATIONAL_TOPO_API} + ... dictionary=${dictionary} + ... member_index_list=${controller_index_list}