55370295c3f8d5fe876f18404d83404c48b74756
[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       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
14 Library           String
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
24
25 *** Variables ***
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
33
34 *** Test Cases ***
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]}
45
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]}
59
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}
76
77 *** Keywords ***
78 Get Dump Flows Count
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]}
89     [Return]    ${count}
90
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}
98
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}
105
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}
112
113 Start Suite
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}