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 Suite Setup
8 Suite Teardown Run Keywords OpenStackOperations.OpenStack Suite Teardown
9 ... AND SetupUtils.Setup_Logging_For_Debug_Purposes_On_List_Or_All INFO ${TEST_LOG_COMPONENTS}
10 Test Setup Run Keywords SetupUtils.Setup_Test_With_Logging_And_Without_Fast_Failing
11 ... AND OpenStackOperations.Get DumpFlows And Ovsconfig ${OS_CMP1_CONN_ID}
12 Test Teardown OpenStackOperations.Get Test Teardown Debugs
13 Library OperatingSystem
14 Library RequestsLibrary
16 Resource ../../../libraries/DevstackUtils.robot
17 Resource ../../../libraries/Genius.robot
18 Resource ../../../libraries/KarafKeywords.robot
19 Resource ../../../libraries/OVSDB.robot
20 Resource ../../../libraries/OvsManager.robot
21 Resource ../../../libraries/OpenStackOperations.robot
22 Resource ../../../libraries/SetupUtils.robot
23 Resource ../../../libraries/Utils.robot
24 Resource ../../../variables/netvirt/Variables.robot
25 Resource ../../../variables/Variables.robot
28 ${acl_sr_security_group} acl_sr_sg
29 @{acl_sr_networks} acl_sr_net_1 acl_sr_net_2 acl_sr_net_3
30 @{acl_sr_subnets} acl_sr_sub_1 acl_sr_sub_2 acl_sr_sub_3
31 @{acl_sr_subnet_cidrs} 81.1.1.0/24 82.1.1.0/24 83.1.1.0/24
32 @{acl_sr_net_1_ports} acl_sr_net_1_port_1 acl_sr_net_1_port_2
33 @{acl_sr_net_1_vms} acl_sr_net_1_vm_1 acl_sr_net_1_vm_2
34 ${TEST_LOG_LEVEL} trace
35 @{TEST_LOG_COMPONENTS} org.opendaylight.netvirt.aclservice org.opendaylight.genius.interfacemanager org.opendaylight.genius.srm
38 ACL Service Recovery CLI
39 [Documentation] This test case covers ACL service recovery.
40 ${count_before} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${INGRESS_ACL_REMOTE_ACL_TABLE}
41 ${node_id} = OVSDB.Get DPID ${OS_CMP1_IP}
42 ${resp} = RequestsLibrary.Delete Request session ${CONFIG_NODES_API}/node/openflow:${node_id}/flow-node-inventory:table/${INGRESS_ACL_REMOTE_ACL_TABLE}
43 BuiltIn.Should Be Equal As Strings ${resp.status_code} 200
44 OpenStackOperations.Ping From DHCP Should Not Succeed @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[0]
45 ${flow_after_delete} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${INGRESS_ACL_REMOTE_ACL_TABLE}
46 BuiltIn.Should Be Equal As Strings ${flow_after_delete} 0
47 ${output} = Issue_Command_On_Karaf_Console srm:recover service acl
48 BuiltIn.Should Contain ${output} RPC call to recover was successful
49 OpenStackOperations.Ping Vm From DHCP Namespace @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[0]
50 BuiltIn.Wait Until Keyword Succeeds 30s 5s Verify Flow Counts Are Same ${count_before} ${INGRESS_ACL_REMOTE_ACL_TABLE}
52 ACL Instance Recovery CLI
53 [Documentation] This test case covers ACL instance recovery.
54 ${count_before} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${EGRESS_LEARN_ACL_FILTER_TABLE}
55 ${node_id} = OVSDB.Get DPID ${OS_CMP1_IP}
56 Write Commands Until Expected Prompt sudo ovs-ofctl del-flows br-int -OOpenflow13 "table=${EGRESS_LEARN_ACL_FILTER_TABLE},icmp" ${DEFAULT_LINUX_PROMPT_STRICT}
57 Wait Until Keyword Succeeds 30s 5s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${EGRESS_LEARN_ACL_FILTER_TABLE} False
59 OpenStackOperations.Ping From DHCP Should Not Succeed @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[0]
60 ${output} = OpenStack CLI openstack security group show ${acl_sr_security_group} | awk '/ id / {print $4}'
61 ${splitted_output} = String.Split String ${output} ${EMPTY}
62 ${instance_id} = Collections.Get from List ${splitted_output} 0
63 ${output} = Issue_Command_On_Karaf_Console srm:recover instance acl-instance ${instance_id}
64 BuiltIn.Should Contain ${output} RPC call to recover was successful
65 OpenStackOperations.Ping Vm From DHCP Namespace @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[0]
66 Wait Until Keyword Succeeds 30s 5s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${EGRESS_LEARN_ACL_FILTER_TABLE} True
68 Wait Until Keyword Succeeds 30s 5s Verify Flow Counts Are Same ${count_before} ${EGRESS_LEARN_ACL_FILTER_TABLE}
70 ACL Interface Recovery CLI
71 [Documentation] This test case covers ACL interface recovery.
72 ${output} = OpenStack CLI openstack port show ${acl_sr_net_1_ports[0]} |awk '/ mac_address / {print$4}'
73 @{list} = Split String ${output}
74 ${port_mac} Set Variable ${list[0]}
75 ${count_before} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${EGRESS_ACL_TABLE} port_mac=${port_mac}
76 ${node_id} OVSDB.Get DPID ${OS_CMP1_IP}
77 Write Commands Until Expected Prompt sudo ovs-ofctl del-flows br-int -OOpenflow13 "table=${EGRESS_ACL_TABLE},dl_dst=${port_mac}" ${DEFAULT_LINUX_PROMPT_STRICT}
78 OpenStackOperations.Ping From DHCP Should Not Succeed @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[0]
79 Wait Until Keyword Succeeds 30s 5s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${EGRESS_LEARN_ACL_FILTER_TABLE} False
81 ${output} = OpenStack CLI openstack port show ${acl_sr_net_1_ports[0]} |awk '/ id / {print$4}'
82 ${splitted_output} = String.Split String ${output} ${EMPTY}
83 ${interface_id} = Collections.Get from List ${splitted_output} 0
84 ${output} = Issue_Command_On_Karaf_Console srm:recover instance acl-interface ${interface_id}
85 BuiltIn.Should Contain ${output} RPC call to recover was successful
86 OpenStackOperations.Ping Vm From DHCP Namespace @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[0]
87 Wait Until Keyword Succeeds 30s 5s OVSDB.Verify Dump Flows For Specific Table ${OS_CMP1_IP} ${EGRESS_ACL_TABLE} True
88 ... ${EMPTY} ${port_mac}
89 Wait Until Keyword Succeeds 30s 5s Verify Flow Counts Are Same ${count_before} ${EGRESS_ACL_TABLE} port_mac=${port_mac}
92 Verify Flow Counts Are Same
93 [Arguments] ${count_before} ${table_id} ${port_mac}=""
94 [Documentation] Verify flows count should be same as before and after for a table id with a given port mac.
95 ${count_after} = OvsManager.Get Dump Flows Count ${OS_CMP1_CONN_ID} ${table_id} port_mac=${port_mac}
96 BuiltIn.Should Be Equal As Numbers ${count_before} ${count_after}
99 [Documentation] Create Basic setup for the feature. Creates single network, subnet, two ports and two VMs.
100 OpenStackOperations.OpenStack Suite Setup
101 SetupUtils.Setup_Logging_For_Debug_Purposes_On_List_Or_All ${TEST_LOG_LEVEL} ${TEST_LOG_COMPONENTS}
102 OpenStackOperations.Create Allow All SecurityGroup ${acl_sr_security_group}
103 OpenStackOperations.Create Network @{acl_sr_networks}[0]
104 OpenStackOperations.Create SubNet @{acl_sr_networks}[0] @{acl_sr_subnets}[0] ${acl_sr_subnet_cidrs[0]}
105 OpenStackOperations.Create Port @{acl_sr_networks}[0] ${acl_sr_net_1_ports[0]} sg=${acl_sr_security_group}
106 OpenStackOperations.Create Port @{acl_sr_networks}[0] ${acl_sr_net_1_ports[1]} sg=${acl_sr_security_group}
107 BuiltIn.Wait Until Keyword Succeeds 3s 1s Utils.Check For Elements At URI ${PORT_URL} ${acl_sr_net_1_ports}
108 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}
109 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}
110 @{ACL_SR_NET_1_VM_IPS} ${net1_dhcp_ip} = OpenStackOperations.Get VM IPs @{acl_sr_net_1_vms}
111 BuiltIn.Set Suite Variable @{ACL_SR_NET_1_VM_IPS}
112 BuiltIn.Should Not Contain ${ACL_SR_NET_1_VM_IPS} None
113 BuiltIn.Should Not Contain ${net1_dhcp_ip} None
114 OpenStackOperations.Ping Vm From DHCP Namespace @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[0]
115 OpenStackOperations.Ping Vm From DHCP Namespace @{acl_sr_networks}[0] @{ACL_SR_NET_1_VM_IPS}[1]