56b34feb1b5606d5e3b1e9532efa31123d60a05a
[integration/test.git] / csit / libraries / GBP / DockerUtils.robot
1 *** Settings ***
2 Library           SSHLibrary
3 Resource          ../Utils.robot
4
5 *** Variables ***
6
7 *** Keywords ***
8
9 Ping from Docker
10     [Arguments]    ${docker_name}    ${dest_address}    ${count}=1
11     [Documentation]    Sends ICMP requests from docker container to remote address.
12     ${output}    ${rc}    SSHLibrary.Execute Command
13     ...    docker exec ${docker_name} ping ${dest_address} -c ${count} >/dev/null 2>&1 && echo success
14     ...    return_stdout=True    return_stderr=False    return_rc=True
15     Should Contain    ${output}    success
16     Should Be Equal As Numbers   ${rc}    0
17
18 Start Endless Ping from Docker
19     [Arguments]    ${docker_name}    ${dest_address}
20     [Documentation]    Starts endless ICMP pinging from docker container to remote address.
21     Ping from Docker    ${docker_name}    ${dest_address}
22
23     SSHLibrary.Execute Command    docker exec -d ${docker_name} ping ${dest_address}
24
25 Start HTTP Service on Docker
26     [Arguments]    ${docker_name}    ${service_port}=80    ${timeout}=20s
27     [Documentation]    Starts SimpleHTTPServer on docker container. Service port should be idle.
28     ${stdout}    SSHLibrary.Execute Command    docker exec ${docker_name} ps aux | grep 'SimpleHTTPServer ${service_port}'
29     ...    return_stdout=True    return_stderr=False    return_rc=False
30     Should Be Empty    ${stdout}
31     SSHLibrary.Write    docker exec ${docker_name} python -m SimpleHTTPServer ${service_port} &
32     Wait Until Keyword Succeeds  2 min  5 sec    Test Port On Docker    ${docker_name}    ${service_port}
33
34 Stop HTTP Service on Docker
35     [Arguments]    ${docker_name}    ${service_port}=80
36     [Documentation]    Stops SimpleHTTPServer on docker container. Service port should not be idle.
37     ${stdout}    SSHLibrary.Execute Command
38     ...    docker exec ${docker_name} ps aux | grep 'SimpleHTTPServer ${service_port}' | awk '{print $2}'
39     ...    return_stdout=True    return_stderr=False    return_rc=False
40     Should Not Be Empty    ${stdout}
41     ${stdout}    SSHLibrary.Execute Command    docker exec ${docker_name} kill ${stdout}
42     ...    return_stdout=True    return_stderr=False    return_rc=False
43
44 Curl from Docker
45     [Arguments]    ${docker_name}    ${dest_address}    ${service_port}=80    ${connect_timeout}=2    ${retry}=3x    ${retry_after}=1s
46     [Documentation]    Sends HTTP request to remote server. Endless curl should not be running.
47     ${output}    SSHLibrary.Execute Command    docker exec ${docker_name} ls | grep curl_running
48     ...    return_stdout=True    return_stderr=False    return_rc=False
49     Should Be Empty    ${output}
50     Wait Until Keyword Succeeds    ${retry}    ${retry_after}    Execute Curl    ${docker_name}    ${dest_address}    ${service_port}
51
52 Start Endless Curl from Docker
53     [Arguments]    ${docker_name}    ${dest_address}    ${service_port}    ${retry_after}=1s    ${retry}=5    ${timeout}=20s    ${sleep}=1
54     [Documentation]    Starts endless curl from docker container. Only one endless curl can be running on docker container.
55     ${output}    SSHLibrary.Execute Command    docker exec ${docker_name} ls | grep curl_running
56     ...    return_stdout=True    return_stderr=False    return_rc=False
57     Should Be Empty    ${output}
58     ${output}    SSHLibrary.Execute Command    docker exec ${docker_name} touch curl_running && echo success
59     ...    return_stdout=True    return_stderr=False    return_rc=False
60     Should Contain    ${output}    success
61     Wait Until Keyword Succeeds    ${retry}    ${retry_after}    Execute Curl
62     ...    ${docker_name}    ${dest_address}    ${service_port}    endless="TRUE"    sleep=${sleep}
63
64 Stop Endless Curl from Docker
65     [Arguments]    ${docker_name}
66     [Documentation]    Stops endless curl from docker container. Endless curl should be running before stopping it.
67     ${output}    SSHLibrary.Execute Command    docker exec ${docker_name} ls | grep curl_running
68     ...    return_stdout=True    return_stderr=False    return_rc=False
69     Should Not Be Empty    ${output}
70     ${output}    SSHLibrary.Execute Command    docker exec ${docker_name} rm curl_running && echo success
71     ...    return_stdout=True    return_stderr=False    return_rc=False
72     Should Contain    ${output}    success
73
74 Stop Endless Ping from Docker to Address
75     [Arguments]    ${docker_name}    ${dest_address}
76     [Documentation]    Stops endless ping from docker to remote address. Endless ping session should be running before stopping it.
77
78     ${output}    SSHLibrary.Execute Command    docker exec ${docker_name} ps aux | grep 'ping ${dest_address}' | grep -v grep | awk '{print $2}'
79     ...    return_stdout=True    return_stderr=False    return_rc=False
80     Should Not Be Empty    ${output}
81     SSHLibrary.Execute Command    docker exec ${docker_name} kill ${output}
82     ${output}  SSHLibrary.Execute Command    docker exec ${docker_name} ps aux | grep 'ping ${dest_address}' | grep -v grep | awk '{print $2}'
83     Should Be Empty    ${output}
84
85 Test Port On Docker
86     [Arguments]    ${docker_name}    ${service_port}
87     [Documentation]    Tests if a service is running on service port.
88     ${out}    SSHLibrary.Execute Command    docker exec ${docker_name} nc -z -w 5 127.0.0.1 ${service_port} && echo 'opened'
89     Should Not Be Empty    ${out}
90
91 Execute Curl
92     [Arguments]    ${docker_name}    ${dest_address}    ${service_port}    ${endless}="FALSE"    ${sleep}=1
93     [Documentation]    Executes curl or curl loop for caller methods based on given parameters.
94     ${output}    SSHLibrary.Execute Command    docker exec ${docker_name} curl ${dest_address}:${service_port} >/dev/null 2>&1 && echo success
95     Should Contain    ${output}    success
96     Run Keyword If    ${endless} == "TRUE"
97     ...    SSHLibrary.Execute Command
98     ...    docker exec -d ${docker_name} /bin/sh -c "while [ -f curl_running ]; do curl ${dest_address}:${service_port} ; sleep ${sleep}; done"
99     Log    ${output}
100
101
102