2 Documentation Test Suite for ACL Service Recovery:
3 ... The Service Recovery Manager provides
4 ... common interface to recover services in ODL.
5 ... This feature will register ACL service for recovery
6 ... and implement the mechanism to recover ACL service.
7 Suite Setup Start Suite
8 Suite Teardown OpenStackOperations.OpenStack Suite Teardown
9 Test Setup Run Keywords SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
10 ... AND OpenStackOperations.Get DumpFlows And Ovsconfig ${OS_CMP1_CONN_ID}
11 Test Teardown OpenStackOperations.Get Test Teardown Debugs
12 Library OperatingSystem
13 Library RequestsLibrary
15 Resource ../../../libraries/DevstackUtils.robot
16 Resource ../../../libraries/Genius.robot
17 Resource ../../../libraries/KarafKeywords.robot
18 Resource ../../../variables/netvirt/Variables.robot
19 Resource ../../../libraries/OVSDB.robot
20 Resource ../../../libraries/OpenStackOperations.robot
21 Resource ../../../libraries/SetupUtils.robot
22 Resource ../../../libraries/Utils.robot
23 Resource ../../../variables/Variables.robot
26 ${acl_sr_security_group} acl_sr_sg
27 @{acl_sr_networks} acl_sr_net_1 acl_sr_net_2 acl_sr_net_3
28 @{acl_sr_subnets} acl_sr_sub_1 acl_sr_sub_2 acl_sr_sub_3
29 @{acl_sr_subnet_cidrs} 81.1.1.0/24 82.1.1.0/24 83.1.1.0/24
30 @{acl_sr_net_1_ports} acl_sr_net_1_port_1 acl_sr_net_1_port_2
31 @{acl_sr_net_1_vms} acl_sr_net_1_vm_1 acl_sr_net_1_vm_2
32 @{table_ids} 211 244 240
35 ACL Service Recovery CLI
36 [Documentation] This test case covers ACL service recovery.
37 ${count_before} = Get Dump Flows Count ${OS_CMP1_CONN_ID} ${table_ids[0]}
38 ${node_id} = OVSDB.Get DPID ${OS_COMPUTE_1_IP}
39 ${resp} = RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${node_id}/flow-node-inventory:table/${table_ids[0]}
40 Should Be Equal As Strings ${resp.status_code} 200
41 Wait Until Keyword Succeeds 30s 5s Verify ACL Flows Should Not Contain ${OS_CMP1_CONN_ID} ${table_ids[0]}
42 ${output} = Issue_Command_On_Karaf_Console srm:recover service acl
43 Should Contain ${output} RPC call to recover was successful
44 Wait Until Keyword Succeeds 30s 5s Verify Dump Flows Count ${count_before} ${table_ids[0]}
46 ACL Instance Recovery CLI
47 [Documentation] This test case covers ACL instance recovery.
48 ${count_before} = Get Dump Flows Count ${OS_CMP1_CONN_ID} ${table_ids[1]}
49 ${node_id} = OVSDB.Get DPID ${OS_COMPUTE_1_IP}
50 Write Commands Until Expected Prompt sudo ovs-ofctl del-flows br-int -OOpenflow13 "table=${table_ids[1]},icmp" ${DEFAULT_LINUX_PROMPT_STRICT}
51 Wait Until Keyword Succeeds 30s 5s Verify ACL Flows Should Not Contain ${OS_CMP1_CONN_ID} ${table_ids[1]} icmp
52 ${output} = OpenStack CLI openstack security group show ${acl_sr_security_group} | awk '/ id / {print $4}'
53 ${splitted_output} = String.Split String ${output} ${EMPTY}
54 ${instance_id} = Collections.Get from List ${splitted_output} 0
55 ${output} = Issue_Command_On_Karaf_Console srm:recover instance acl-instance ${instance_id}
56 Should Contain ${output} RPC call to recover was successful
57 Wait Until Keyword Succeeds 30s 5s Verify ACL Flows Should Contain ${OS_CMP1_CONN_ID} ${table_ids[1]} icmp
58 Wait Until Keyword Succeeds 30s 5s Verify Dump Flows Count ${count_before} ${table_ids[1]}
60 ACL Interface Recovery CLI
61 [Documentation] This test case covers ACL interface recovery.
62 ${output} = OpenStack CLI openstack port show ${acl_sr_net_1_ports[0]} |awk '/ mac_address / {print$4}'
63 @{list} = Split String ${output}
64 ${port_mac} Set Variable ${list[0]}
65 ${count_before} = Get Dump Flows Count ${OS_CMP1_CONN_ID} ${table_ids[2]} port_mac=${port_mac}
66 ${node_id} OVSDB.Get DPID ${OS_COMPUTE_1_IP}
67 Write Commands Until Expected Prompt sudo ovs-ofctl del-flows br-int -OOpenflow13 "table=${table_ids[2]},dl_dst=${port_mac}" ${DEFAULT_LINUX_PROMPT_STRICT}
68 Wait Until Keyword Succeeds 30s 5s Verify ACL Flows Should Not Contain ${OS_CMP1_CONN_ID} ${table_ids[2]} ${port_mac}
69 ${output} = OpenStack CLI openstack port show ${acl_sr_net_1_ports[0]} |awk '/ id / {print$4}'
70 ${splitted_output} = String.Split String ${output} ${EMPTY}
71 ${interface_id} = Collections.Get from List ${splitted_output} 0
72 ${output} = Issue_Command_On_Karaf_Console srm:recover instance acl-interface ${interface_id}
73 Should Contain ${output} RPC call to recover was successful
74 Wait Until Keyword Succeeds 30s 5s Verify ACL Flows Should Contain ${OS_CMP1_CONN_ID} ${table_ids[2]} ${port_mac}
75 Wait Until Keyword Succeeds 30s 5s Verify Dump Flows Count ${count_before} ${table_ids[2]} port_mac=${port_mac}
79 [Arguments] ${conn_id} ${acl_sr_table_id} &{Kwargs}
80 BuiltIn.Run Keyword If ${Kwargs} BuiltIn.Log ${Kwargs}
81 ${port_mac} BuiltIn.Run Keyword If ${Kwargs} Collections.Pop From Dictionary ${Kwargs} port_mac default=${None}
82 ${cmd} = BuiltIn.Set Variable sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${acl_sr_table_id}
83 ${cmd} = BuiltIn.Run Keyword If '${port_mac}'!='None' BuiltIn.Catenate ${cmd} | grep ${port_mac} | wc -l
84 ... ELSE BuiltIn.Catenate ${cmd} | wc -l
85 SSHLibrary.Switch Connection ${conn_id}
86 ${output} = Write Commands Until Expected Prompt ${cmd} ${DEFAULT_LINUX_PROMPT_STRICT}
87 @{list} = Split String ${output}
88 ${count} = Set Variable ${list[0]}
91 Verify Dump Flows Count
92 [Arguments] ${count_before} ${table_id} &{Kwargs}
93 BuiltIn.Run Keyword If ${Kwargs} BuiltIn.Log ${Kwargs}
94 ${port_mac} = BuiltIn.Run Keyword If ${Kwargs} Collections.Pop From Dictionary ${Kwargs} port_mac default=${None}
95 ${count_after} = BuiltIn.Run Keyword If '${port_mac}'!='None' Get Dump Flows Count ${OS_CMP1_CONN_ID} ${table_id} port_mac=${port_mac}
96 ... ELSE Get Dump Flows Count ${OS_CMP1_CONN_ID} ${table_id}
97 Should Be Equal As Numbers ${count_before} ${count_after}
99 Verify ACL Flows Should Not Contain
100 [Arguments] ${conn_id} ${table_id} ${acl_var}=${None}
101 SSHLibrary.Switch Connection ${conn_id}
102 ${output} = Write Commands Until Expected Prompt sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} ${DEFAULT_LINUX_PROMPT_STRICT}
103 BuiltIn.Run Keyword If '${acl_var}'=='None' Should Not Contain ${output} table=${table_id}
104 ... ELSE Should Not Contain ${output} ${acl_var}
106 Verify ACL Flows Should Contain
107 [Arguments] ${conn_id} ${table_id} ${acl_var}=${None}
108 SSHLibrary.Switch Connection ${conn_id}
109 ${output} = Write Commands Until Expected Prompt sudo ovs-ofctl dump-flows br-int -OOpenFlow13 | grep table=${table_id} ${DEFAULT_LINUX_PROMPT_STRICT}
110 BuiltIn.Run Keyword If '${acl_var}'=='None' Should Contain ${output} table=${table_id}
111 ... ELSE Should Contain ${output} ${acl_var}
114 [Documentation] Basic setup.
115 OpenStackOperations.OpenStack Suite Setup
116 OpenStackOperations.Create Allow All SecurityGroup ${acl_sr_security_group}
117 OpenStackOperations.Create Network @{acl_sr_networks}[0]
118 OpenStackOperations.Create SubNet @{acl_sr_networks}[0] @{acl_sr_subnets}[0] ${acl_sr_subnet_cidrs[0]}
119 OpenStackOperations.Create Port @{acl_sr_networks}[0] ${acl_sr_net_1_ports[0]} sg=${acl_sr_security_group}
120 OpenStackOperations.Create Port @{acl_sr_networks}[0] ${acl_sr_net_1_ports[1]} sg=${acl_sr_security_group}
121 BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${acl_sr_net_1_ports}
122 OpenStackOperations.Create Vm Instance With Port On Compute Node ${acl_sr_net_1_ports[0]} ${acl_sr_net_1_vms[0]} ${OS_CMP1_HOSTNAME} sg=${acl_sr_security_group}
123 OpenStackOperations.Create Vm Instance With Port On Compute Node ${acl_sr_net_1_ports[1]} ${acl_sr_net_1_vms[1]} ${OS_CMP2_HOSTNAME} sg=${acl_sr_security_group}