Remove variables.py
[integration/test.git] / csit / libraries / BgpOperations.robot
1 *** Settings ***
2 Documentation     This library contains keywords related to the BGP functionality.
3 Library           SSHLibrary
4 Resource          Utils.robot
5 Resource          ../variables/Variables.robot
6 Resource          TemplatedRequests.robot
7 Resource          KillPythonTool.robot
8
9 *** Variables ***
10 ${BGP_BMP_DIR}    ${CURDIR}/../variables/bgpfunctional/bmp_basic/filled_structure
11 ${BGP_BMP_FEAT_DIR}    ${CURDIR}/../variables/bgpfunctional/bmp_basic/empty_structure
12 ${BGP_RIB_URI}    ${OPERATIONAL_API}/bgp-rib:bgp-rib/rib/example-bgp-rib
13 ${BGP_TOPOLOGY_URI}    ${OPERATIONAL_TOPO_API}/topology/example-ipv4-topology
14 ${VAR_BASE_BGP}    ${CURDIR}/../variables/bgpfunctional
15
16 *** Keywords ***
17 Start Quagga Processes On ODL
18     [Arguments]    ${odl_ip}
19     [Documentation]    To start the zrpcd processes on ODL VM
20     ${conn_id}=    Open_Connection_To_ODL_System    ip_address=${odl_ip}
21     Switch Connection    ${conn_id}
22     Write Commands Until Expected Prompt    cd /opt/quagga/etc/    ${DEFAULT_LINUX_PROMPT_STRICT}
23     Write Commands Until Expected Prompt    sudo cp zebra.conf.sample zebra.conf    ${DEFAULT_LINUX_PROMPT_STRICT}
24     Write Commands Until Expected Prompt    sudo /opt/quagga/etc/init.d/zrpcd start    ${DEFAULT_LINUX_PROMPT_STRICT}
25     Write Commands Until Expected Prompt    ps -ef | grep zrpcd    ${DEFAULT_LINUX_PROMPT_STRICT}
26     Write Commands Until Expected Prompt    netstat -nap | grep 7644    ${DEFAULT_LINUX_PROMPT_STRICT}
27     Close Connection
28
29 Start Quagga Processes On DCGW
30     [Arguments]    ${dcgw_ip}
31     [Documentation]    To start the zrpcd, bgpd,and zebra processes on DCGW
32     ${dcgw_conn_id} =    Open_Connection_To_Tools_System    ip_address=${dcgw_ip}
33     Switch Connection    ${dcgw_conn_id}
34     Write Commands Until Expected Prompt    cd /opt/quagga/etc/    ${DEFAULT_LINUX_PROMPT_STRICT}
35     Write Commands Until Expected Prompt    sudo cp zebra.conf.sample zebra.conf    ${DEFAULT_LINUX_PROMPT_STRICT}
36     Write Commands Until Expected Prompt    sudo /opt/quagga/etc/init.d/zrpcd start    ${DEFAULT_LINUX_PROMPT_STRICT}
37     Write Commands Until Expected Prompt    ps -ef | grep zrpcd    ${DEFAULT_LINUX_PROMPT_STRICT}
38     Write Commands Until Expected Prompt    cd /opt/quagga/sbin/    ${DEFAULT_LINUX_PROMPT_STRICT}
39     ${output} =    Write    sudo ./bgpd &
40     ${output} =    Read Until    pid
41     Log    ${output}
42     ${output} =    Write    sudo ./zebra &
43     ${output} =    Read
44     Log    ${output}
45     Write Commands Until Expected Prompt    ps -ef | grep bgpd    ${DEFAULT_LINUX_PROMPT_STRICT}
46     Write Commands Until Expected Prompt    ps -ef | grep zebra    ${DEFAULT_LINUX_PROMPT_STRICT}
47     Write Commands Until Expected Prompt    netstat -nap | grep 7644    ${DEFAULT_LINUX_PROMPT_STRICT}
48
49 Show Quagga Configuration On ODL
50     [Arguments]    ${odl_ip}    ${rd}
51     [Documentation]    Show quagga config from ODL
52     Create Quagga Telnet Session    ${odl_ip}    bgpd    sdncbgpc
53     Execute Command On Quagga Telnet Session    show running-config
54     Execute Command On Quagga Telnet Session    show bgp neighbors
55     Execute Command On Quagga Telnet Session    show ip bgp vrf ${rd}
56     Execute Command On Quagga Telnet Session    exit
57     Close Connection
58
59 Create Quagga Telnet Session
60     [Arguments]    ${ip}    ${user}    ${password}
61     [Documentation]    Create telnet session for Quagga
62     ${conn_id}=    Open_Connection_To_Tools_System    ip_address=${ip}
63     Switch Connection    ${conn_id}
64     ${output} =    Write    telnet localhost ${user}
65     ${output} =    Read Until    Password:
66     ${output} =    Write    ${password}
67     ${output} =    Read
68     ${output} =    Write    terminal length 512
69     ${output} =    Read
70
71 Execute Command On Quagga Telnet Session
72     [Arguments]    ${command}
73     [Documentation]    Execute command on Quagga telnet session(session should exist) and returns the output.
74     SSHLibrary.Write    ${command}
75     ${output} =    SSHLibrary.Read
76     Log    ${output}
77     [Return]    ${output}
78
79 Configure BGP And Add Neighbor On DCGW
80     [Arguments]    ${dcgw_ip}    ${as_id}    ${router_id}    ${neighbor_ip}    ${vrf_name}    ${rd}
81     ...    ${loopback_ip}
82     [Documentation]    Configure BGP and add neighbor on the dcgw
83     Create Quagga Telnet Session    ${dcgw_ip}    bgpd    sdncbgpc
84     Execute Command On Quagga Telnet Session    configure terminal
85     Execute Command On Quagga Telnet Session    router bgp ${as_id}
86     Execute Command On Quagga Telnet Session    bgp router-id ${router_id}
87     Execute Command On Quagga Telnet Session    redistribute static
88     Execute Command On Quagga Telnet Session    redistribute connected
89     Execute Command On Quagga Telnet Session    neighbor ${neighbor_ip} send-remote-as ${as_id}
90     Execute Command On Quagga Telnet Session    vrf ${vrf_name}
91     Execute Command On Quagga Telnet Session    rd ${rd}
92     Execute Command On Quagga Telnet Session    rt import ${rd}
93     Execute Command On Quagga Telnet Session    rt export ${rd}
94     Execute Command On Quagga Telnet Session    exit
95     Execute Command On Quagga Telnet Session    address-family vpnv4 unicast
96     Execute Command On Quagga Telnet Session    network ${loopback_ip}/32 rd ${rd} tag ${as_id}
97     Execute Command On Quagga Telnet Session    neighbor ${neighbor_ip} activate
98     Execute Command On Quagga Telnet Session    end
99     Execute Command On Quagga Telnet Session    show running-config
100     Execute Command On Quagga Telnet Session    exit
101
102 Add Loopback Interface On DCGW
103     [Arguments]    ${dcgw_ip}    ${loopback_name}    ${loopback_ip}    ${user}=zebra    ${password}=zebra
104     [Documentation]    Add loopback interface on DCGW
105     Create Quagga Telnet Session    ${dcgw_ip}    ${user}    ${password}
106     Execute Command On Quagga Telnet Session    enable
107     Execute Command On Quagga Telnet Session    ${password}
108     Execute Command On Quagga Telnet Session    configure terminal
109     Execute Command On Quagga Telnet Session    interface ${loopback_name}
110     Execute Command On Quagga Telnet Session    ip address ${loopback_ip}/32
111     Execute Command On Quagga Telnet Session    exit
112     Execute Command On Quagga Telnet Session    end
113     Execute Command On Quagga Telnet Session    show running-config
114     Execute Command On Quagga Telnet Session    exit
115
116 Execute Show Command On Quagga
117     [Arguments]    ${dcgw_ip}    ${cmd}    ${user}=bgpd    ${password}=sdncbgpc
118     [Documentation]    Execute command on quagga and returns the ouput.
119     Create Quagga Telnet Session    ${dcgw_ip}    ${user}    ${password}
120     ${output} =    Execute Command On Quagga Telnet Session    ${cmd}
121     Log    ${output}
122     Execute Command On quagga Telnet Session    exit
123     [Return]    ${output}
124
125 Verify BGP Neighbor Status On Quagga
126     [Arguments]    ${dcgw_ip}    ${neighbor_ip}
127     [Documentation]    Verify bgp neighbor status on quagga
128     ${output} =    Execute Show Command On quagga    ${dcgw_ip}    show bgp neighbors ${neighbor_ip}
129     Log    ${output}
130     Should Contain    ${output}    BGP state = Established
131
132 Verify Routes On Quagga
133     [Arguments]    ${dcgw_ip}    ${rd}    ${ip_list}
134     [Documentation]    Verify routes on quagga
135     ${output} =    Execute Show Command On quagga    ${dcgw_ip}    show ip bgp vrf ${rd}
136     Log    ${output}
137     : FOR    ${ip}    IN    @{ip_list}
138     \    Should Contain    ${output}    ${ip}
139
140 Delete BGP Config On Quagga
141     [Arguments]    ${dcgw_ip}    ${bgp_id}    ${user}=bgpd    ${password}=sdncbgpc
142     [Documentation]    Delete BGP Config on Quagga
143     Create Quagga Telnet Session    ${dcgw_ip}    ${user}    ${password}
144     Execute Command On Quagga Telnet Session    configure terminal
145     Execute Command On Quagga Telnet Session    no router bgp ${bgp_id}
146     Execute Command On Quagga Telnet Session    end
147     ${output} =    Execute Command On Quagga Telnet Session    show running-config
148     Execute Command On Quagga Telnet Session    exit
149     [Return]    ${output}
150
151 Create BGP Configuration On ODL
152     [Arguments]    &{Kwargs}
153     [Documentation]    Associate the created L3VPN to a network-id received as dictionary argument
154     TemplatedRequests.Post_As_Json_Templated    folder=${VAR_BASE_BGP}/create_bgp    mapping=${Kwargs}    session=session
155
156 AddNeighbor To BGP Configuration On ODL
157     [Arguments]    &{Kwargs}
158     [Documentation]    Associate the created L3VPN to a network-id received as dictionary argument
159     TemplatedRequests.Post_As_Json_Templated    folder=${VAR_BASE_BGP}/addNeighbor_bgp    mapping=${Kwargs}    session=session
160
161 Get BGP Configuration On ODL
162     [Arguments]    ${odl_session}
163     [Documentation]    Get bgp configuration
164     ${resp} =    RequestsLibrary.Get Request    ${odl_session}    ${CONFIG_API}/ebgp:bgp/
165     Log    ${resp.content}
166     [Return]    ${resp.content}
167
168 Delete BGP Configuration On ODL
169     [Arguments]    ${odl_session}
170     [Documentation]    Delete BGP
171     ${resp} =    RequestsLibrary.Delete Request    ${odl_session}    ${CONFIG_API}/ebgp:bgp/
172     Log    ${resp.content}
173     Should Be Equal As Strings    ${resp.status_code}    200
174     [Return]    ${resp.content}
175
176 Create External Tunnel Endpoint Configuration
177     [Arguments]    &{Kwargs}
178     [Documentation]    Create Tunnel End point
179     TemplatedRequests.Post_As_Json_Templated    folder=${VAR_BASE_BGP}/create_etep    mapping=${Kwargs}    session=session
180
181 Delete External Tunnel Endpoint Configuration
182     [Arguments]    &{Kwargs}
183     [Documentation]    Delete Tunnel End point
184     TemplatedRequests.Post_As_Json_Templated    folder=${VAR_BASE_BGP}/delete_etep    mapping=${Kwargs}    session=session
185
186 Get External Tunnel Endpoint Configuration
187     [Arguments]    ${ip}
188     [Documentation]    Get bgp configuration
189     ${resp} =    RequestsLibrary.Get Request    session    ${CONFIG_API}/itm:dc-gateway-ip-list/dc-gateway-ip/${ip}/
190     Log    ${resp.content}
191     [Return]    ${resp.content}
192
193 Teardown_Everything
194     [Documentation]    Create and Log the diff between expected and actual responses, make sure Python tool was killed.
195     ...    Tear down imported Resources.
196     KillPythonTool.Search_And_Kill_Remote_Python    'play\.py'
197     RequestsLibrary.Delete_All_Sessions
198     SSHLibrary.Close_All_Connections
199
200 Check_Example_Bgp_Rib_Content
201     [Arguments]    ${session}    ${substr}    ${error_message}=${JSONKEYSTR} not found, but expected.
202     [Documentation]    Check the example-bgp-rib content for string
203     ${response}=    RequestsLibrary.Get Request    ${session}    ${BGP_RIB_URI}
204     BuiltIn.Log    ${response.status_code}
205     BuiltIn.Log    ${response.text}
206     BuiltIn.Should_Contain    ${response.text}    ${substr}    ${error_message}    values=False
207
208 Check_Example_Bgp_Rib_Does_Not_Contain
209     [Arguments]    ${session}    ${substr}    ${error_message}=${JSONKEYSTR} found, but not expected.
210     [Documentation]    Check the example-bgp-rib does not contain the string
211     ${response}=    RequestsLibrary.Get Request    ${session}    ${BGP_RIB_URI}
212     BuiltIn.Log    ${response.status_code}
213     BuiltIn.Log    ${response.text}
214     BuiltIn.Should_Not_Contain    ${response.text}    ${substr}    ${error_message}    values=False
215
216 Check_Example_IPv4_Topology_Content
217     [Arguments]    ${session}    ${string_to_check}=${EMPTY}
218     [Documentation]    Check the example-ipv4-topology content for string
219     ${response}=    RequestsLibrary.Get Request    ${session}    ${BGP_TOPOLOGY_URI}
220     BuiltIn.Log    ${response.status_code}
221     BuiltIn.Log    ${response.text}
222     BuiltIn.Should_Contain    ${response.text}    ${string_to_check}
223
224 Check_Example_IPv4_Topology_Does_Not_Contain
225     [Arguments]    ${session}    ${string_to_check}
226     [Documentation]    Check the example-ipv4-topology does not contain the string
227     ${response}=    RequestsLibrary.Get Request    ${session}    ${BGP_TOPOLOGY_URI}
228     BuiltIn.Log    ${response.status_code}
229     BuiltIn.Log    ${response.text}
230     BuiltIn.Should_Not_Contain    ${response.text}    ${string_to_check}
231
232 Bmp_Monitor_Precondition
233     [Arguments]    ${session}
234     [Documentation]    Verify example-bmp-monitor presence in bmp-monitors
235     &{mapping}    BuiltIn.Create_Dictionary    TOOL_IP=${TOOLS_SYSTEM_IP}
236     BuiltIn.Wait_Until_Keyword_Succeeds    6x    10s    TemplatedRequests.Get_As_Json_Templated    folder=${BGP_BMP_FEAT_DIR}    mapping=${mapping}    verify=True
237     ...    session=${session}
238
239 Bmp_Monitor_Postcondition
240     [Arguments]    ${session}
241     [Documentation]    Verifies if example-bmp-monitor data contains one peer.
242     &{mapping}    BuiltIn.Create_Dictionary    TOOL_IP=${TOOLS_SYSTEM_IP}
243     ${output}    BuiltIn.Wait_Until_Keyword_Succeeds    10x    5s    TemplatedRequests.Get_As_Json_Templated    folder=${BGP_BMP_DIR}    mapping=${mapping}
244     ...    session=${session}    verify=True
245     BuiltIn.Log    ${output}