Upgrade RF syntax for v3.2 compatibility
[integration/test.git] / csit / libraries / Tempest.robot
1 *** Settings ***
2 Documentation     General Utils library. This library has broad scope, it can be used by any robot system tests.
3 Library           SSHLibrary
4 Resource          DevstackUtils.robot
5 Resource          OpenStackOperations.robot
6 Resource          SSHKeywords.robot
7 Resource          ../variables/Variables.robot
8
9 *** Variables ***
10 @{stable/queens_EXCLUSION_REGEXES}    ${EMPTY}
11 @{stable/rocky_EXCLUSION_REGEXES}    ${EMPTY}
12 @{master_EXCLUSION_REGEXES}    ${EMPTY}
13 ${BLACKLIST_FILE}    /tmp/blacklist.txt
14 ${TEMPEST_DIR}    /opt/stack/tempest
15 ${TEMPEST_CONFIG_FILE}    ${TEMPEST_DIR}/etc/tempest.conf
16 # Parameter values below are based on releng/builder - changing them requires updates in releng/builder as well
17 ${TEMPEST_TIMEOUT}    420s
18
19 *** Keywords ***
20 Suite Setup
21     OpenStackOperations.OpenStack Suite Setup
22     Tempest.Log In To Tempest Executor And Setup Test Environment
23
24 Run Tempest Tests
25     [Arguments]    ${tempest_regex}    ${timeout}=${TEMPEST_TIMEOUT}    ${debug}=False
26     BuiltIn.Run Keyword If    "${debug}" == "False"    Tempest.Run Tempest Tests Without Debug    ${tempest_regex}    timeout=${timeout}
27     BuiltIn.Run Keyword If    "${debug}" == "True"    Tempest.Run Tempest Tests With Debug    ${tempest_regex}    timeout=${timeout}
28     BuiltIn.Run Keyword If    "${debug}" != "True" and "${debug}" != "False"    Fail    debug argument must be True or False
29
30 Run Tempest Tests Without Debug
31     [Arguments]    ${tempest_regex}    ${TEMPEST_DIRectory}=${TEMPEST_DIR}    ${timeout}=${TEMPEST_TIMEOUT}
32     [Documentation]    Using ostestr will allow us to (by default) run tests in paralllel.
33     ...    Because of the parallel fashion, we must ensure there is no pause on teardown so that flag in tempest.conf is
34     ...    explicitly set to False.
35     BuiltIn.Return From Keyword If    "skip_if_${OPENSTACK_BRANCH}" in @{TEST_TAGS}
36     BuiltIn.Return From Keyword If    "skip_if_${SECURITY_GROUP_MODE}" in @{TEST_TAGS}
37     BuiltIn.Return From Keyword If    "skip_if_${ODL_SNAT_MODE}" in @{TEST_TAGS}
38     ${tempest_conn_id} =    SSHLibrary.Open Connection    ${OS_CNTL_IP}    prompt=${DEFAULT_LINUX_PROMPT_STRICT}
39     SSHKeywords.Flexible SSH Login    ${OS_USER}    ${DEVSTACK_SYSTEM_PASSWORD}
40     DevstackUtils.Write Commands Until Prompt    source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
41     DevstackUtils.Write Commands Until Prompt    cd ${TEMPEST_DIRectory}
42     SSHLibrary.Read
43     Tempest.Tempest Conf Modify Pause On Test Teardown    False
44     SSHLibrary.Set Client Configuration    timeout=${timeout}
45     # There are tons of deprecation error messages when we use ostestr in our CSIT environment (openstack via devstack)
46     # The robot log files are very large and one culprit is all these deprecation warnings. If we redirect stderr to
47     # /dev/null we should be able to ignore them. We will miss any other errors, however.
48     ${output} =    DevstackUtils.Write Commands Until Prompt And Log    ostestr --regex ${tempest_regex}    timeout=${timeout}
49     SSHLibrary.Close Connection
50     BuiltIn.Should Contain    ${output}    Failed: 0
51
52 Run Tempest Tests With Debug
53     [Arguments]    ${tempest_regex}    ${TEMPEST_DIRectory}=${TEMPEST_DIR}    ${timeout}=${TEMPEST_TIMEOUT}
54     [Documentation]    After setting pause_teardown=True in tempest.conf, use the python -m testtools.run module to execute
55     ...    a single tempest test case. We need to run only one tempest test case at a time as there will
56     ...    be potentional for an unkown number of debug pdb() prompts to catch and continue if we are running multiple
57     ...    test cases with a single command. Essentially, this keyword only handles one breakpoint at a single teardown.
58     BuiltIn.Return From Keyword If    "skip_if_${OPENSTACK_BRANCH}" in @{TEST_TAGS}
59     BuiltIn.Return From Keyword If    "skip_if_${SECURITY_GROUP_MODE}" in @{TEST_TAGS}
60     BuiltIn.Return From Keyword If    "skip_if_${ODL_SNAT_MODE}" in @{TEST_TAGS}
61     ${tempest_conn_id} =    SSHLibrary.Open Connection    ${OS_CNTL_IP}    prompt=${DEFAULT_LINUX_PROMPT_STRICT}
62     SSHKeywords.Flexible SSH Login    ${OS_USER}    ${DEVSTACK_SYSTEM_PASSWORD}
63     DevstackUtils.Write Commands Until Prompt    source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
64     DevstackUtils.Write Commands Until Prompt    cd ${TEMPEST_DIRectory}
65     SSHLibrary.Read
66     Tempest Conf Modify Pause On Test Teardown    True
67     SSHLibrary.Set Client Configuration    timeout=${timeout}
68     SSHLibrary.Write    python -m testtools.run ${tempest_regex}
69     ${output} =    SSHLibrary.Read Until Regexp    ${DEFAULT_LINUX_PROMPT_STRICT}|pdb.set_trace()
70     BuiltIn.Log    ${output}
71     OpenStackOperations.Show Debugs
72     OpenStackOperations.Get Test Teardown Debugs
73     SSHLibrary.Switch Connection    ${tempest_conn_id}
74     SSHLibrary.Write    continue
75     ${output} =    SSHLibrary.Read Until Regexp    ${DEFAULT_LINUX_PROMPT_STRICT}|pdb.set_trace()
76     BuiltIn.Log    ${output}
77     SSHLibrary.Write    continue
78     ${output} =    SSHLibrary.Read Until Prompt
79     BuiltIn.Log    ${output}
80     SSHLibrary.Close Connection
81     BuiltIn.Should Contain    ${output}    OK
82     BuiltIn.Should Not Contain    ${output}    FAILED
83
84 Log In To Tempest Executor And Setup Test Environment
85     [Documentation]    Initialize SetupUtils, open SSH connection to a devstack system and source the openstack
86     ...    credentials needed to run the tempest tests. The (sometimes empty) tempest blacklist file will be created
87     ...    and pushed to the tempest executor.
88     Tempest.Create Blacklist File
89     # Tempest tests need an existing external network in order to create routers.
90     OpenStackOperations.Create Network    ${EXTERNAL_NET_NAME}    --external --default --provider-network-type flat --provider-physical-network ${PUBLIC_PHYSICAL_NETWORK}
91     OpenStackOperations.Create Subnet    ${EXTERNAL_NET_NAME}    ${EXTERNAL_SUBNET_NAME}    ${EXTERNAL_SUBNET}    --gateway ${EXTERNAL_GATEWAY} --allocation-pool ${EXTERNAL_SUBNET_ALLOCATION_POOL}
92     OpenStackOperations.List Networks
93     ${control_node_conn_id} =    SSHLibrary.Open Connection    ${OS_CNTL_IP}    prompt=${DEFAULT_LINUX_PROMPT_STRICT}
94     SSHKeywords.Flexible SSH Login    ${OS_USER}
95     DevstackUtils.Write Commands Until Prompt And Log    sudo pip install -U --verbose pip    timeout=120s
96     DevstackUtils.Write Commands Until Prompt And Log    sudo pip install -U --verbose os-testr>=1.0.0    timeout=120s
97     DevstackUtils.Write Commands Until Prompt And Log    ostestr --version
98     DevstackUtils.Write Commands Until Prompt And Log    testr init
99     DevstackUtils.Write Commands Until Prompt    source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
100     DevstackUtils.Write Commands Until Prompt    sudo rm -rf /opt/stack/tempest/.testrepository
101     ${net_id} =    OpenStackOperations.Get Net Id    ${EXTERNAL_NET_NAME}
102     Tempest.Tempest Conf Add External Network And Floating Network Name    ${net_id}
103
104 Tempest Conf Add External Network And Floating Network Name
105     [Arguments]    ${external_network_id}
106     [Documentation]    Tempest will be run with a config file - this function will add the
107     ...    given external network ID to the configuration file.
108     Tempest.Modify Config In File On Existing SSH Connection    ${TEMPEST_CONFIG_FILE}    set    network    public_network_id    ${external_network_id}
109     Tempest.Modify Config In File On Existing SSH Connection    ${TEMPEST_CONFIG_FILE}    set    DEFAULT    debug    False
110     Tempest.Modify Config In File On Existing SSH Connection    ${TEMPEST_CONFIG_FILE}    set    DEFAULT    log_level    INFO
111     Tempest.Modify Config In File On Existing SSH Connection    ${TEMPEST_CONFIG_FILE}    set    network    floating_network_name    ${EXTERNAL_NET_NAME}
112     DevstackUtils.Write Commands Until Prompt    sudo cat ${TEMPEST_CONFIG_FILE}
113     DevstackUtils.Write Commands Until Prompt    sudo chmod 777 ${TEMPEST_CONFIG_FILE}
114
115 Tempest Conf Modify Pause On Test Teardown
116     [Arguments]    ${pause_flag}
117     [Documentation]    Sets the DEFAULT section flag for pausing the test teardown. If True the tempest test case
118     ...    being executed will break to a pdb() debug shell when it hits it's teardown() function.
119     Tempest.Modify Config In File On Existing SSH Connection    ${TEMPEST_CONFIG_FILE}    set    DEFAULT    pause_teardown    ${pause_flag}
120
121 Modify Config In File On Existing SSH Connection
122     [Arguments]    ${config_file}    ${modifier}    ${config_section}    ${config_key}    ${config_value}=${EMPTY}
123     [Documentation]    uses crudini to populate oslo cofg file.
124     # this keyword is only one line so seems like extra overhead, but this may be a good candidate to move
125     # to a library at some point, when/if other suites need to use it, so wanted to make it generic.
126     DevstackUtils.Write Commands Until Prompt    sudo -E crudini --${modifier} ${config_file} ${config_section} ${config_key} ${config_value}
127
128 Create Blacklist File
129     [Documentation]    For each exclusion regex in the required @{${OPENSTACK_BRANCH}_EXCLUSION_REGEXES} list a new
130     ...    line will be created in the required ${BLACKLIST_FILE} location. This file is pushed to the OS_CONTROL_NODE
131     ...    which is assumed to be the tempest executor.
132     OperatingSystem.Create File    ${BLACKLIST_FILE}
133     FOR    ${exclusion}    IN    @{${OPENSTACK_BRANCH}_EXCLUSION_REGEXES}
134         OperatingSystem.Append To File    ${BLACKLIST_FILE}    ${exclusion}\n
135     END
136     OperatingSystem.Log File    ${BLACKLIST_FILE}
137     SSHKeywords.Copy File To Remote System    ${OS_CNTL_IP}    ${BLACKLIST_FILE}    ${BLACKLIST_FILE}