GENIUS-130: OF Tunnels support For ITM Direct Tunnels (of-tunnels)
[integration/test.git] / csit / suites / genius / OF_Tunnels.robot
1 *** Settings ***
2 Documentation     This test suite is to verify working of OF based Tunnels
3 Suite Setup       OF Tunnels Start Suite
4 Suite Teardown    OF Tunnels Stop Suite
5 Test Setup        Genius Test Setup
6 Test Teardown     Genius Test Teardown    ${data_models}
7 Library           Collections
8 Library           OperatingSystem
9 Library           RequestsLibrary
10 Library           SSHLibrary
11 Library           String
12 Resource          ../../libraries/ClusterManagement.robot
13 Resource          ../../libraries/DataModels.robot
14 Resource          ../../libraries/Genius.robot
15 Resource          ../../libraries/KarafKeywords.robot
16 Resource          ../../libraries/ODLTools.robot
17 Resource          ../../libraries/OVSDB.robot
18 Resource          ../../libraries/Utils.robot
19 Resource          ../../libraries/VpnOperations.robot
20 Resource          ../../variables/Variables.robot
21 Variables         ../../variables/genius/Modules.py
22 Resource          ../../variables/netvirt/Variables.robot
23
24 *** Variables ***
25 ${FLOWS_FILTER_TABLE0}    | grep table=0
26 ${FLOWS_FILTER_TABLE95}    | grep table=95
27 ${TEP_SHOW_OF_PORTS}    tep:show-ofports
28
29 *** Test Cases ***
30 Create and Verify OFT TEPs
31     [Documentation]    Create TEPs set to use OF based Tunnels and verify.
32     CompareStream.Run_Keyword_If_Less_Than_Sodium    BuiltIn.Pass Execution    Test case valid only for versions Sodium and above
33     OFT Create Vteps using Auto Tunnels    @{TOOLS_SYSTEM_ALL_IPS}
34     OFT Verify Vteps Created    ${DPN_ID_LIST}    ${TOOLS_SYSTEM_ALL_IPS}
35
36 Delete and Verify OFT TEPs
37     [Documentation]    Delete TEPs set to use OF based Tunnels and verify.
38     CompareStream.Run_Keyword_If_Less_Than_Sodium    BuiltIn.Pass Execution    Test case valid only for versions Sodium and above
39     OFT Delete Vteps using Auto Tunnels    @{TOOLS_SYSTEM_ALL_IPS}
40     OFT Verify Vteps Deleted    ${DPN_ID_LIST}    ${TOOLS_SYSTEM_ALL_IPS}
41     BuiltIn.Wait Until Keyword Succeeds    60    5    Utils.No Content From URI    session    ${OPERATIONAL_API}/itm-state:tunnels_state
42
43 Create and Verify single OFT TEPs
44     [Documentation]    Create single TEPs set to use OF based Tunnels and verify.
45     CompareStream.Run_Keyword_If_Less_Than_Sodium    BuiltIn.Pass Execution    Test case valid only for versions Sodium and above
46     ${tools_ips} =    BuiltIn.Create List    @{TOOLS_SYSTEM_ALL_IPS}
47     Collections.Remove From List    ${tools_ips}    -1
48     ${dpn_ids} =    BuiltIn.CreateList    @{DPN_ID_LIST}
49     Collections.Remove From List    ${dpn_ids}    -1
50     OFT Create Vteps using Auto Tunnels    @{tools_ips}
51     OFT Verify Vteps Created    ${dpn_ids}    ${tools_ips}
52     OFT Create Vteps using Auto Tunnels    ${TOOLS_SYSTEM_ALL_IPS}[-1]
53     OFT Verify Vteps Created    ${DPN_ID_LIST}    ${TOOLS_SYSTEM_ALL_IPS}
54
55 Delete and Verify single OFT TEPs
56     [Documentation]    Delete single TEPs set to use OF based Tunnels and verify.
57     CompareStream.Run_Keyword_If_Less_Than_Sodium    BuiltIn.Pass Execution    Test case valid only for versions Sodium and above
58     ${deleted_tools_ip_list} =    BuiltIn.Set Variable    ${TOOLS_SYSTEM_ALL_IPS}[0]
59     OFT Delete Vteps using Auto Tunnels    ${deleted_tools_ip_list}
60     ${deleted_tools_ip_list} =    BuiltIn.CreateList    ${TOOLS_SYSTEM_ALL_IPS}[0]
61     ${deleted_dpn_id_list} =    BuiltIn.CreateList    ${DPN_ID_LIST}[0]
62     OFT Verify Vteps Deleted    ${deleted_dpn_id_list}    ${deleted_tools_ip_list}
63
64 *** Keywords ***
65 OFT Create Vteps using Auto Tunnels
66     [Arguments]    @{tools_ip_list}
67     [Documentation]    Create VTEPs for selected tools systems in ODL using Auto Tunnels.
68     FOR    ${tools_ip}    IN    @{tools_ip_list}
69         Utils.Run Command On Remote System And Log    ${tools_ip}    ${SET_LOCAL_IP}${tools_ip}
70     END
71
72 OFT Verify Vteps Created
73     [Arguments]    ${dpn_id_list}    ${tools_ip_list}
74     [Documentation]    Verify if OFT VTEPs are created successfully or not for given Tools IPs and DPN-IDs.
75     ${switch_data} =    BuiltIn.Create List    @{dpn_id_list}    @{tools_ip_list}
76     BuiltIn.Wait Until Keyword Succeeds    60    5    Genius.Get ITM    ${DEFAULT_TRANSPORT_ZONE}    ${switch_data}
77     ${tep_show_output} =    BuiltIn.Wait Until Keyword Succeeds    60    5    KarafKeywords.Issue Command On Karaf Console    ${TEP_SHOW}
78     BuiltIn.Should Contain Any    ${tep_show_output}    ${DEFAULT_TRANSPORT_ZONE}    VXLAN    @{switch_data}
79     ${num_switches} =    BuiltIn.Get Length    ${dpn_id_list}
80     BuiltIn.Wait Until Keyword Succeeds    60    5    OFT Verify Tunnel Status as UP    ${num_switches}
81     BuiltIn.Wait Until Keyword Succeeds    40    10    OFT OVS Verify Tunnels Created    @{tools_ip_list}
82     ${tools_system_len} =    BuiltIn.Get Length    ${tools_ip_list}
83     FOR    ${tools_system_index}    IN RANGE    ${tools_system_len}
84         ${tun_ip_list} =    BuiltIn.CreateList    @{tools_ip_list}
85         Collections.Remove From List    ${tun_ip_list}    ${tools_system_index}
86         ${ports_output} =    Utils.Run Command On Remote System And Log    ${tools_ip_list}[${tools_system_index}]    sudo ovs-ofctl -Oopenflow13 dump-ports-desc ${Bridge}
87         ${port_numbers} =    String.Get Regexp Matches    ${ports_output}    (\\d+).of.*    ${1}
88         BuiltIn.Wait Until Keyword Succeeds    40    10    OFT OVS Verify Ingress Flows Created per Switch    ${tools_ip_list}[${tools_system_index}]    ${tun_ip_list}    ${port_numbers}
89     END
90
91 OFT OVS Verify Tunnels Created
92     [Arguments]    @{tools_ip_list}
93     [Documentation]    Verify if tunnels are created in OVS for selected tools systems.
94     FOR    ${tools_ip}    IN    @{tools_ip_list}
95         ${output} =    Utils.Run Command On Remote System And Log    ${tools_ip}    sudo ovs-vsctl show
96         BuiltIn.Should Contain X Times    ${output}    local_ip="${tools_ip}", remote_ip=flow    ${1}
97     END
98
99 OFT OVS Verify Ingress Flows Created per Switch
100     [Arguments]    ${tools_ip}    ${tun_src_list}    ${port_numbers}
101     [Documentation]    Verify if Ingress flow rules are created in OVS for a given switch.
102     ${flows_table0_output} =    Utils.Run Command On Remote System And Log    ${tools_ip}    sudo ovs-ofctl -OOpenFlow13 dump-flows ${Bridge} ${FLOWS_FILTER_TABLE0}
103     BuiltIn.Should Not Contain    ${flows_table0_output}    tun_src=${tools_ip},
104     FOR    ${port_number}    IN    @{port_numbers}
105         BuiltIn.Should Contain    ${flows_table0_output}    in_port=${port_number}
106     END
107
108 OFT OVS Verify Egress Flows Created per Switch
109     [Arguments]    ${tools_ip}    ${tun_dst_list}    ${port_numbers}
110     [Documentation]    Verify if Egress flow rules are created in OVS for a given switch.
111     ${flows_table95_output} =    Utils.Run Command On Remote System And Log    ${tools_ip}    sudo ovs-ofctl -OOpenFlow13 dump-flows ${Bridge} ${FLOWS_FILTER_TABLE95}
112     FOR    ${tun_dst}    IN    @{tun_dst_list}
113         ${tun_dst_hex} =    BuiltIn.Evaluate    hex(struct.unpack('!I',socket.inet_aton('${tun_dst}'))[0])    modules=socket,struct
114         BuiltIn.Should Contain    ${flows_table95_output}    load:${tun_dst_hex}->NXM_NX_TUN_IPV4_DST[]
115     END
116     FOR    ${port_number}    IN    @{port_numbers}
117         BuiltIn.Should Contain    ${flows_table95_output}    output:${port_number}
118     END
119
120 OFT Delete Vteps using Auto Tunnels
121     [Arguments]    @{tools_ip_list}
122     [Documentation]    Delete VTEPs for selected tools systems in ODL using Auto Tunnel.
123     FOR    ${tools_ip}    IN    @{tools_ip_list}
124         Utils.Run Command On Remote System And Log    ${tools_ip}    ${REMOVE_LOCAL_IP}
125     END
126
127 OFT Verify Vteps Deleted
128     [Arguments]    ${dpn_id_list}    ${tools_ip_list}
129     [Documentation]    Verify if OFT Vteps are created successfully or not for given Tools IPs and DPN-IDs.
130     ${deleted_tep_len} =    BuiltIn.Get Length    ${dpn_id_list}
131     ${existing_tep_len} =    BuiltIn.Evaluate    ${NUM_TOOLS_SYSTEM}-${deleted_tep_len}
132     BuiltIn.Run Keyword If    ${existing_tep_len} > 0    BuiltIn.Wait Until Keyword Succeeds    60    5    OFT Verify Tunnel status as UP    ${existing_tep_len}
133     ${tep_show_output} =    KarafKeywords.Issue Command On Karaf Console    ${TEP_SHOW}
134     ${tep_show_state_output} =    KarafKeywords.Issue Command On Karaf Console    ${TEP_SHOW_STATE}
135     FOR    ${tools_system_index}    IN RANGE    ${deleted_tep_len}
136         ${tep_show_state_output_1} =    KarafKeywords.Issue Command On Karaf Console    ${TEP_SHOW_STATE}
137         BuiltIn.Log    ${tools_ip_list}[${tools_system_index}]
138         BuiltIn.Should Not Contain    ${tep_show_output}    ${tools_ip_list}[${tools_system_index}]
139         BuiltIn.Should Not Contain    ${tep_show_state_output}    ${tools_ip_list}[${tools_system_index}]
140         BuiltIn.Wait Until Keyword Succeeds    60    5    Utils.No Content From URI    session    ${CONFIG_API}/itm-state:dpn-endpoints/DPN-TEPs-info/${dpn_id_list}[${tools_system_index}]/
141         ${dst_dpn_id_list} =    BuiltIn.Create List    @{DPN_ID_LIST}
142         Collections.Remove From List    ${dst_dpn_id_list}    ${tools_system_index}
143         BuiltIn.Wait Until Keyword Succeeds    60    5    OFT Verify Vteps Deleted at Dpn Teps State per Interface    ${dpn_id_list}[${tools_system_index}]    ${dst_dpn_id_list}
144         ${ovs_vsctl_output} =    BuiltIn.Wait Until Keyword Succeeds    40    10    Utils.Run Command On Remote System And Log    ${tools_ip_list}[${tools_system_index}]    sudo ovs-vsctl show
145         BuiltIn.Should Not Contain    ${ovs_vsctl_output}    remote_ip=flow
146         BuiltIn.Wait Until Keyword Succeeds    40    10    OFT OVS Verify Ingress Flows Deleted per Switch    ${tools_ip_list}[${tools_system_index}]
147         BuiltIn.Wait Until Keyword Succeeds    40    10    OFT OVS Verify Egress Flows Deleted per Switch    ${tools_ip_list}[${tools_system_index}]
148     END
149
150 OFT Verify Vteps Deleted at Dpn Teps State per Interface
151     [Arguments]    ${src_dpn_id}    ${dst_dpn_id_list}
152     [Documentation]    Verify if vteps are deleted for all src-dst intf pair at dpn-teps-state in ODL for a given src intf.
153     FOR    ${dst_dpn_id}    IN    @{dst_dpn_id_list}
154         ${status} =    BuiltIn.Run Keyword And Return Status    Genius.Get Tunnel    ${src_dpn_id}    ${dst_dpn_id}    odl-interface:tunnel-type-vxlan    dpn-teps-state
155         BuiltIn.Should Be True    ${status} == ${False}
156     END
157
158 OFT OVS Verify Ingress Flows Deleted per Switch
159     [Arguments]    ${tools_ip}
160     [Documentation]    Verify if Ingress flow rules are deleted in OVS for a given switch.
161     ${flows_table0_output} =    Utils.Run Command On Remote System And Log    ${tools_ip}    sudo ovs-ofctl -OOpenFlow13 dump-flows ${Bridge} ${FLOWS_FILTER_TABLE0}
162     BuiltIn.Should Not Contain    ${flows_table0_output}    tun_src=
163
164 OFT OVS Verify Egress Flows Deleted per Switch
165     [Arguments]    ${tools_ip}
166     [Documentation]    Verify if Egress flow rules are deleted in OVS for a given switch.
167     ${flows_table95_output} =    Utils.Run Command On Remote System And Log    ${tools_ip}    sudo ovs-ofctl -OOpenFlow13 dump-flows ${Bridge} ${FLOWS_FILTER_TABLE95}
168     BuiltIn.Should Not Contain    ${flows_table95_output}    output:
169
170 OF Tunnels Start Suite
171     [Documentation]    Start suite for OF Tunnels.
172     ClusterManagement.ClusterManagement_Setup
173     ClusterManagement.Stop_Members_From_List_Or_All
174     FOR    ${controller_index}    IN RANGE    ${NUM_ODL_SYSTEM}
175         Run Command On Remote System And Log    ${ODL_SYSTEM_${controller_index+1}_IP}    sed -i -- 's/<itm-direct-tunnels>false/<itm-direct-tunnels>true/g' ${GENIUS_IFM_CONFIG_FLAG}
176         Run Command On Remote System And Log    ${ODL_SYSTEM_${controller_index+1}_IP}    sed -i -- 's/<itm-of-tunnels>false/<itm-of-tunnels>true/g' ${GENIUS_IFM_CONFIG_FLAG}
177     END
178     ClusterManagement.Start_Members_From_List_Or_All
179     Genius Suite Setup
180
181 OF Tunnels Stop Suite
182     [Documentation]    Stop suite for OF Tunnels.
183     FOR    ${controller_index}    IN RANGE    ${NUM_ODL_SYSTEM}
184         Run Command On Remote System And Log    ${ODL_SYSTEM_${controller_index+1}_IP}    sed -i -- 's/<itm-direct-tunnels>true/<itm-direct-tunnels>false/g' ${GENIUS_IFM_CONFIG_FLAG}
185         Run Command On Remote System And Log    ${ODL_SYSTEM_${controller_index+1}_IP}    sed -i -- 's/<itm-of-tunnels>true/<itm-of-tunnels>false/g' ${GENIUS_IFM_CONFIG_FLAG}
186     END
187     ClusterManagement.Stop_Members_From_List_Or_All
188     ClusterManagement.Start_Members_From_List_Or_All
189     Genius Suite Teardown
190
191 OFT Verify Tunnel status as UP
192     [Arguments]    ${no_of_switches}=${NUM_TOOLS_SYSTEM}
193     ${no_of_tunnels} =    KarafKeywords.Issue Command On Karaf Console    ${TEP_SHOW_OF_PORTS}
194     ${lines_of_state_up} =    String.Get Lines Containing String    ${no_of_tunnels}    Up
195     ${actual_tunnel_count} =    String.Get Line Count    ${lines_of_state_up}
196     BuiltIn.Should Be Equal As Strings    ${actual_tunnel_count}    ${no_of_switches}