Add ping test in aclrecovery suite
[integration/test.git] / csit / suites / netvirt / aclservicerecovery / aclservicerecovery.robot
1 *** Settings ***
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
15 Library           String
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
26
27 *** Variables ***
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
36
37 *** Test Cases ***
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}
51
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
58     ...    |grep icmp
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
67     ...    ${EMPTY}    icmp
68     Wait Until Keyword Succeeds    30s    5s    Verify Flow Counts Are Same    ${count_before}    ${EGRESS_LEARN_ACL_FILTER_TABLE}
69
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
80     ...    |grep ${port_mac}
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}
90
91 *** Keywords ***
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}
97
98 Suite Setup
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]