Step 1: Move vm scripts to the right place
[integration/test.git] / csit / libraries / KillPythonTool.robot
1 *** Settings ***
2 Documentation     Robot keyword library (Resource) for killing possibly left-over Python utilities.
3 ...
4 ...               Copyright (c) 2015 Cisco Systems, Inc. and others. All rights reserved.
5 ...
6 ...               This program and the accompanying materials are made available under the
7 ...               terms of the Eclipse Public License v1.0 which accompanies this distribution,
8 ...               and is available at http://www.eclipse.org/legal/epl-v10.html
9 ...
10 ...
11 ...               This library assumes that a SSH connections exists (and is switched to)
12 ...               to a Linux machine (usualy MININET) where the Python process should be killed.
13 ...               TODO: The Utils.robot library has a "Run Command On Remote System" if we didn't want to make the assumption that an SSH connection was already open.
14 ...               alternative TODO: Explain that it is not worth to perform separate SSH logins.
15 ...
16 ...               The argument ${filter} should hold what you would type to grep command in bash:
17 ...               enclosed in single quotes, dots escaped by backslash and so on.
18 ...               Note that single quote inside cannot be escaped, but may be typed as this: '"'"'
19
20 *** Keywords ***
21 Search_And_Kill_Remote_Python
22     [Arguments]    ${filter}
23     [Documentation]    The main keyword. Search for processes, Log the list of them, kill them.
24     ${processes}=    Search_For_Remote_Python_Processes    ${filter}
25     BuiltIn.Log    ${processes}
26     Kill_Remote_Processes    ${processes}
27
28 Search_For_Remote_Python_Processes
29     [Arguments]    ${filter}
30     [Documentation]    Only searches for the list of processes, in case something else than kill has to be done with them.
31     ${processes}=    SSHLibrary.Execute_Command    ps -elf | egrep python | egrep ${filter} | egrep -v grep
32     # TODO: Is "python" worth such a special treatment to have it mentioned in keyword name?
33     [Return]    ${processes}
34
35 Kill_Remote_Processes
36     [Arguments]    ${pself_lines}    ${signal}=9
37     [Documentation]    Kill processes by PIDs from given list (no-op if the list is empty), using specified signal. Log the kill commands used.
38     ${arg_length}=    BuiltIn.Get_Length    ${pself_lines}
39     Return_From_Keyword_If    ${arg_length} == 0    # nothing to kill here
40     ${commands}=    SSHLibrary.Execute_Command    echo '${pself_lines}' | awk '{print "kill -${signal}",$4}'
41     BuiltIn.Log    ${commands}
42     ${stdout}    ${stderr}=    SSHLibrary.Execute_Command    echo 'set -exu; ${commands}' | sudo sh    return_stderr=True
43     # TODO: Is -exu needed? Should we Log ${std*}?