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