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