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