2 Documentation Test Suite for elan interface and service recovery
3 Suite Setup Suite Setup
4 Suite Teardown OpenStackOperations.OpenStack Suite Teardown
5 Test Setup SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
6 Test Teardown OpenStackOperations.Get Test Teardown Debugs
9 Resource ../../../libraries/DevstackUtils.robot
10 Resource ../../../libraries/FlowLib.robot
11 Resource ../../../libraries/KarafKeywords.robot
12 Resource ../../../libraries/OpenStackOperations.robot
13 Resource ../../../libraries/OVSDB.robot
14 Resource ../../../libraries/SetupUtils.robot
15 Resource ../../../libraries/Utils.robot
16 Resource ../../../libraries/VpnOperations.robot
17 Resource ../../../variables/netvirt/Variables.robot
18 Resource ../../../variables/Variables.robot
21 ${REQ_NETWORK} elansr_net_1
22 ${REQ_SUBNET} elansr_sub_1
23 ${REQ_SUBNET_CIDR} 85.1.0.0/16
24 ${SECURITY_GROUP} elansr_sg
25 ${SERVICE-STATUS-CLI} srm:recover service elan
26 ${INTERFACE-STATUS-CLI} srm:recover instance elan-interface
27 ${NUM_OF_PORTS_PER_HOST} 2
28 @{NET_1_VMS} elansr_net_1_vm_1 elansr_net_1_vm_2
29 @{NET_2_VMS} elansr_net_2_vm_3 elansr_net_2_vm_4
30 @{PORT_LIST} elansr_net_1_port_1 elansr_net_1_port_2 elansr_net_1_port_3 elansr_net_1_port_4
33 To Verify ELAN Service Recovery
34 [Documentation] To Verify Elan Service recovery by deleting and recovering multiple flows
35 OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${ELAN_SMAC_TABLE} True ${EMPTY} dl_src=@{PORT_MAC_ADDR}[0] actions=goto_table:${ELAN_DMACTABLE}
36 OVSDB.Verify Dump Flows For Specific Table ${OS_CMP2_IP} ${ELAN_SMAC_TABLE} True ${EMPTY} dl_src=@{PORT_MAC_ADDR}[2] actions=goto_table:${ELAN_DMACTABLE}
37 ${flow_id} = FlowLib.Get Flow Id ${DPNID_1} ${ELAN_SMAC_TABLE} @{PORT_MAC_ADDR}[0]
38 FlowLib.Delete Flow Via Restconf ${DPNID_1} ${ELAN_SMAC_TABLE} ${flow_id}
39 ${flow_id} = FlowLib.Get Flow Id ${DPNID_2} ${ELAN_SMAC_TABLE} @{PORT_MAC_ADDR}[2]
40 FlowLib.Delete Flow Via Restconf ${DPNID_2} ${ELAN_SMAC_TABLE} ${flow_id}
41 ${mac_elements} = BuiltIn.Create List @{PORT_MAC_ADDR}[0]
42 Utils.Check For Elements Not At URI ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE} ${mac_elements}
43 ${mac_elements} = BuiltIn.Create List @{PORT_MAC_ADDR}[2]
44 Utils.Check For Elements Not At URI ${CONFIG_NODES_API}/node/openflow:${DPNID_2}/table/${ELAN_SMAC_TABLE} ${mac_elements}
45 BuiltIn.Wait Until Keyword Succeeds 10s 5s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${ELAN_SMAC_TABLE} False
46 ... ${EMPTY} dl_src=@{PORT_MAC_ADDR}[0]
47 BuiltIn.Wait Until Keyword Succeeds 10s 5s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP2_IP} ${ELAN_SMAC_TABLE} False
48 ... ${EMPTY} dl_src=@{PORT_MAC_ADDR}[2]
49 KarafKeywords.Issue Command On Karaf Console ${SERVICE-STATUS-CLI}
50 OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${ELAN_SMAC_TABLE} True ${EMPTY} dl_src=@{PORT_MAC_ADDR}[0] actions=goto_table:${ELAN_DMACTABLE}
51 OVSDB.Verify Dump Flows For Specific Table ${OS_CMP2_IP} ${ELAN_SMAC_TABLE} True ${EMPTY} dl_src=@{PORT_MAC_ADDR}[2] actions=goto_table:${ELAN_DMACTABLE}
52 ${mac_elements} = BuiltIn.Create List @{PORT_MAC_ADDR}[0]
53 Utils.Check For Elements At URI ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE} ${mac_elements}
54 ${mac_elements} = BuiltIn.Create List @{PORT_MAC_ADDR}[2]
55 Utils.Check For Elements At URI ${CONFIG_NODES_API}/node/openflow:${DPNID_2}/table/${ELAN_SMAC_TABLE} ${mac_elements}
57 To Verify Elan Interface recovery
58 [Documentation] To Verify the Elan Interface recovery by deleting single Flow
59 BuiltIn.Wait Until Keyword Succeeds 60s 15s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${ELAN_SMAC_TABLE} True
60 ... ${EMPTY} dl_src=@{PORT_MAC_ADDR}[0] actions=goto_table:${ELAN_DMACTABLE}
61 ${flow_id} = FlowLib.Get Flow Id ${DPNID_1} ${ELAN_SMAC_TABLE} @{PORT_MAC_ADDR}[0]
62 FlowLib.Delete Flow Via Restconf ${DPNID_1} ${ELAN_SMAC_TABLE} ${flow_id}
63 ${mac_elements} = BuiltIn.Create List @{PORT_MAC_ADDR}[0]
64 Utils.Check For Elements Not At URI ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE} ${mac_elements}
65 BuiltIn.Wait Until Keyword Succeeds 60s 15s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${ELAN_SMAC_TABLE} False
66 ... ${EMPTY} dl_src=@{PORT_MAC_ADDR}[0]
67 ${elan_instance_id} = Get Elan Instance ID
68 ${elan_interface_id} = Get Elan Interfaces ID ${elan_instance_id} @{PORT_MAC_ADDR}[0]
69 Recover Elan Flows ${elan_interface_id}
70 ${mac_elements} = BuiltIn.Create List @{PORT_MAC_ADDR}[0]
71 BuiltIn.Wait Until Keyword Succeeds 10s 5s Utils.Check For Elements At URI ${CONFIG_NODES_API}/node/openflow:${DPNID_1}/table/${ELAN_SMAC_TABLE} ${mac_elements}
72 OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${ELAN_SMAC_TABLE} True ${EMPTY} dl_src=@{PORT_MAC_ADDR}[0] actions=goto_table:${ELAN_DMACTABLE}
76 [Documentation] Test Suite for Elan interface and service recovery
77 OpenStackOperations.OpenStack Suite Setup
79 OpenStackOperations.Show Debugs @{NET_1_VMS} @{NET_2_VMS}
80 OpenStackOperations.Get Suite Debugs
83 [Documentation] Create required number of ports under previously created subnets
84 FOR ${index} IN RANGE 0 ${NUM_OF_PORTS_PER_HOST}
85 OpenStackOperations.Create Port ${REQ_NETWORK} @{PORT_LIST}[${index}] sg=${SECURITY_GROUP}
86 OpenStackOperations.Create Port ${REQ_NETWORK} @{PORT_LIST}[${index + 2}] sg=${SECURITY_GROUP}
88 @{PORT_MAC_ADDR} = OpenStackOperations.Get Ports MacAddr ${PORT_LIST}
89 BuiltIn.Set Suite Variable @{PORT_MAC_ADDR}
92 [Arguments] ${num_of_vms_per_dpn}
93 [Documentation] Create Vm instances on compute nodes
94 FOR ${index} IN RANGE 0 ${num_of_vms_per_dpn}
95 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORT_LIST}[${index}] @{NET_1_VMS}[${index}] ${OS_CMP1_HOSTNAME} sg=${SECURITY_GROUP}
96 OpenStackOperations.Create Vm Instance With Port On Compute Node @{PORT_LIST}[${index + 2}] @{NET_2_VMS}[${index}] ${OS_CMP2_HOSTNAME} sg=${SECURITY_GROUP}
98 @{NET_1_VM_IPS} ${NET_1_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_1_VMS}
99 @{NET_2_VM_IPS} ${NET_2_DHCP_IP} = OpenStackOperations.Get VM IPs @{NET_2_VMS}
100 BuiltIn.Should Not Contain ${NET_1_VM_IPS} None
101 BuiltIn.Should Not Contain ${NET_2_VM_IPS} None
102 BuiltIn.Should Not Contain ${NET_1_DHCP_IP} None
103 BuiltIn.Should Not Contain ${NET_2_DHCP_IP} None
106 [Documentation] Create basic topology
107 BuiltIn.Wait Until Keyword Succeeds 60s 10s VpnOperations.Verify Tunnel Status as UP
108 OpenStackOperations.Create Network ${REQ_NETWORK}
109 OpenStackOperations.Create SubNet ${REQ_NETWORK} ${REQ_SUBNET} ${REQ_SUBNET_CIDR}
110 OpenStackOperations.Create Allow All SecurityGroup ${SECURITY_GROUP}
113 ${DPNID_1} = OVSDB.Get DPID ${OS_CMP1_IP}
114 ${DPNID_2} = OVSDB.Get DPID ${OS_CMP2_IP}
115 BuiltIn.Set Suite Variable ${DPNID_1}
116 BuiltIn.Set Suite Variable ${DPNID_2}
119 [Documentation] Retrieving ELAN instance ID
120 ${output} = KarafKeywords.Issue Command On Karaf Console elaninterface:show
121 ${elan_instance} = String.Split String ${output}
122 ${elan_instance_with_tag} = BuiltIn.Set Variable ${elan_instance[5]}
123 ${elan_instance_id} = String.Split String ${elan_instance_with_tag} /
124 [Return] @{elan_instance_id}[0]
126 Get Elan Interfaces ID
127 [Arguments] ${elan_id} ${mac}
128 [Documentation] Getting the ELAN interface ID with corresponding mac address and returning interface ID list
129 ${elan_output} = KarafKeywords.Issue Command On Karaf Console elanmactable:show ${elan_id}
130 ${interface_id} = String.Get Regexp Matches ${elan_output} (${REGEX_UUID})\\s*${mac} 1
131 [Return] @{interface_id}[0]
134 [Arguments] ${interface}
135 [Documentation] Recover ELAN flows for the given interfaces
136 ${recover_msg} = KarafKeywords.Issue Command On Karaf Console ${INTERFACE-STATUS-CLI} ${interface}
137 BuiltIn.Should Contain ${recover_msg} RPC call to recover was successful