Cluster Library consolidation 3
[integration/test.git] / csit / libraries / DevstackUtils.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 Library           String
5 Library           DateTime
6 Library           Process
7 Library           Collections
8 Library           RequestsLibrary
9 Library           ./UtilLibrary.py
10 Resource          KarafKeywords.robot
11 Resource          OpenStackOperations.robot
12 Variables         ../variables/Variables.py
13
14 *** Variables ***
15 ${ODL_VERSION}    lithium-SR3
16 ${OPENSTACK_BRANCH}    stable/liberty
17 ${NETWORKING-ODL_BRANCH}    ${OPENSTACK_BRANCH}
18 ${TEMPEST_REGEX}    tempest.api.network
19 ${ODL_BOOT_WAIT_URL}    restconf/operational/network-topology:network-topology/topology/netvirt:1
20 ${default_devstack_prompt_timeout}    10s
21 ${devstack_workspace}    ~/ds_workspace
22 ${DEVSTACK_SYSTEM_PASSWORD}    \    # set to empty, but provide for others to override if desired
23 ${CLEAN_DEVSTACK_HOST}    False
24
25 *** Keywords ***
26 Run Tempest Tests
27     [Arguments]    ${tempest_regex}    ${tempest_exclusion_regex}=""    ${tempest_conf}=""    ${tempest_directory}=/opt/stack/tempest    ${timeout}=600s
28     [Documentation]    Execute the tempest tests.
29     Write Commands Until Prompt    source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
30     Write Commands Until Prompt    cd ${tempest_directory}
31     Write Commands Until Prompt    sudo rm -rf ${tempest_directory}/.testrepository
32     Write Commands Until Prompt    sudo testr list-tests | egrep ${tempest_regex} | egrep -v ${tempest_exclusion_regex} > tests_to_execute.txt
33     ${tests_to_execute}=    Write Commands Until Prompt    sudo cat tests_to_execute.txt
34     Log    ${tests_to_execute}
35     # run_tempests.sh is a wrapper to testr, and we are providing the config file
36     ${results}=    Write Commands Until Prompt    sudo -E ./run_tempest.sh -C ${tempest_conf} -N ${tempest_regex} -- --load-list tests_to_execute.txt    timeout=${timeout}
37     Log    ${results}
38     Create File    tempest_output_${tempest_regex}.log    data=${results}
39     Should Contain    ${results}    Failed: 0
40     # TODO: also need to verify some non-zero pass count as well as other results are ok (e.g. skipped, etc)
41
42 Devstack Suite Setup Tests
43     [Arguments]    ${source_pwd}=no    ${odl_ip}=${ODL_SYSTEM_IP}
44     [Documentation]    Login to the Openstack Control Node to run tempest suite
45     Create Session    session    http://${odl_ip}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS}
46     ${devstack_conn_id}=    SSHLibrary.Open Connection    ${OS_CONTROL_NODE_IP}    prompt=${DEFAULT_LINUX_PROMPT}
47     Set Suite Variable    ${devstack_conn_id}
48     Set Suite Variable    ${source_pwd}
49     Log    ${devstack_conn_id}
50     Utils.Flexible SSH Login    ${OS_USER}    ${DEVSTACK_SYSTEM_PASSWORD}
51     SSHLibrary.Set Client Configuration    timeout=${default_devstack_prompt_timeout}
52
53 Devstack Suite Setup
54     [Arguments]    ${source_pwd}=no
55     [Documentation]    Login to the Openstack Control Node to run tempest suite
56     ${devstack_conn_id}=    SSHLibrary.Open Connection    ${DEVSTACK_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}
57     Set Suite Variable    ${devstack_conn_id}
58     Set Suite Variable    ${source_pwd}
59     Log    ${devstack_conn_id}
60     Utils.Flexible SSH Login    ${DEVSTACK_SYSTEM_USER}    ${DEVSTACK_SYSTEM_PASSWORD}
61     SSHLibrary.Set Client Configuration    timeout=${default_devstack_prompt_timeout}
62     Run Keyword If    ${CLEAN_DEVSTACK_HOST}    Clean DevStack Host In Case It Is Not Sterile
63     Write Commands Until Prompt    export PATH=$PATH:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/local/sbin
64     Write Commands Until Prompt    export ODL_VERSION=${ODL_VERSION}
65     Write Commands Until Prompt    export OPENSTACK_BRANCH=${OPENSTACK_BRANCH}
66     Write Commands Until Prompt    export TEMPEST_REGEX=${TEMPEST_REGEX}
67     Write Commands Until Prompt    export ODL_BOOT_WAIT_URL=${ODL_BOOT_WAIT_URL}
68     ${odl_version_to_install}=    Get Networking ODL Version Of Release    ${ODL_VERSION}
69     Write Commands Until Prompt    export DEVSTACK_LOCAL_CONFIG="enable_plugin networking-odl https://git.openstack.org/openstack/networking-odl ${NETWORKING-ODL_BRANCH};"
70     Write Commands Until Prompt    export DEVSTACK_LOCAL_CONFIG+="ODL_NETVIRT_DEBUG_LOGS=True;ODL_RELEASE=${odl_version_to_install};"
71     Write Commands Until Prompt    echo $DEVSTACK_LOCAL_CONFIG
72     Write Commands Until Prompt    export OVERRIDE_ZUUL_BRANCH=${OPENSTACK_BRANCH}
73     Write Commands Until Prompt    export PYTHONUNBUFFERED=true
74     Write Commands Until Prompt    export DEVSTACK_GATE_TIMEOUT=120
75     Write Commands Until Prompt    export DEVSTACK_GATE_TEMPEST=1
76     Write Commands Until Prompt    export DEVSTACK_GATE_NEUTRON=1
77     Write Commands Until Prompt    export KEEP_LOCALRC=1
78     Write Commands Until Prompt    export PROJECTS="openstack/networking-odl $PROJECTS"
79     Write Commands Until Prompt    export DEVSTACK_GATE_TEMPEST_REGEX=tempest.api.network.test_ports.PortsTestJSON.test_show_port
80     Write Commands Until Prompt    sudo yum -y install redhat-lsb-core indent python-testrepository    timeout=120s
81     Write Commands Until Prompt    sudo /usr/sbin/groupadd ${DEVSTACK_SYSTEM_USER}
82     Write Commands Until Prompt    sudo mkdir -p /opt/stack/new
83     Write Commands Until Prompt    sudo chown -R ${DEVSTACK_SYSTEM_USER}:${DEVSTACK_SYSTEM_USER} /opt/stack/new
84     Write Commands Until Prompt    sudo bash -c 'echo "stack ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers'
85     Write Commands Until Prompt    sudo mkdir -p /usr/local/${DEVSTACK_SYSTEM_USER}/slave_scripts
86     Write Commands Until Prompt    git clone https://github.com/openstack/os-testr.git    timeout=30s
87     Write Commands Until Prompt    cd os-testr/os_testr
88     Write Commands Until Prompt    sudo cp subunit2html.py /usr/local/${DEVSTACK_SYSTEM_USER}/slave_scripts
89     Write Commands Until Prompt    mkdir -p ${devstack_workspace}
90     Write Commands Until Prompt    cd ${devstack_workspace}
91     Write Commands Until Prompt    export WORKSPACE=${devstack_workspace}
92     Write Commands Until Prompt    rm -rf devstack-gate
93     Write Commands Until Prompt    git clone https://git.openstack.org/openstack-infra/devstack-gate    timeout=30s
94
95 Clean DevStack Host In Case It Is Not Sterile
96     [Documentation]    In upstream CI, the expectation is that the devstack VM is fresh, sterile and ready
97     ...    for any version of devstack, networking-odl, and OpenDaylight. During local test development,
98     ...    it can be faster to just clean the needed packages, configurations, repos, files, etc. instead of
99     ...    spinning up a new system. This keyword serves as a living list of those items needed to prep a
100     ...    potentially non-sterile devstack system.
101     Write Commands Until Prompt    pgrep python | awk '{print "sudo kill",$1}' | sh
102     Write Commands Until Prompt    pgrep java | awk '{print "sudo kill",$1}' | sh
103     Write Commands Until Prompt    rpm -qa | grep rdo
104     Write Commands Until Prompt    sudo rpm -e $(sudo rpm -qa | grep rdo)
105     Write Commands Until Prompt    sudo yum remove -y pyOpenSSL
106     Write Commands Until Prompt    sudo -H pip uninstall -y virtualenv
107     Write Commands Until Prompt    sudo rm -rf /tmp/ansible /opt/stack
108     Write Commands Until Prompt    rm -rf ${devstack_workspace} ~/os-testr
109     Write Commands Until Prompt    sudo ovs-vsctl del-br br-ex
110     Write Commands Until Prompt    sudo ovs-vsctl del-br br-int
111     Write Commands Until Prompt    sudo ovs-vsctl del-manager
112
113 Write Commands Until Prompt
114     [Arguments]    ${cmd}    ${timeout}=${default_devstack_prompt_timeout}
115     [Documentation]    quick wrapper for Write and Read Until Prompt Keywords to make test cases more readable
116     SSHLibrary.Set Client Configuration    timeout=${timeout}
117     SSHLibrary.Write    ${cmd}
118     ${output}=    SSHLibrary.Read Until Prompt
119     [Return]    ${output}
120
121 Get Networking ODL Version Of Release
122     [Arguments]    ${version}
123     [Documentation]    Get version of ODL to be installed
124     # once Beryllium SR1 goes out, we can change beryllium-latest to use 0.4.2
125     Return From Keyword If    "${version}" == "beryllium-latest"    beryllium-snapshot-0.4.2
126     Return From Keyword If    "${version}" == "beryllium-SR1"    beryllium-snapshot-0.4.1
127     Return From Keyword If    "${version}" == "beryllium"    beryllium-snapshot-0.4.0
128     Return From Keyword If    "${version}" == "lithium-latest"    lithium-snapshot-0.3.5
129     Return From Keyword If    "${version}" == "lithium-SR4"    lithium-snapshot-0.3.4
130     Return From Keyword If    "${version}" == "lithium-SR3"    lithium-snapshot-0.3.3
131     Return From Keyword If    "${version}" == "lithium-SR2"    lithium-snapshot-0.3.2
132     Return From Keyword If    "${version}" == "lithium-SR1"    lithium-snapshot-0.3.1
133     # FYI networking-odl no longer has this for some reason.
134     Return From Keyword If    "${version}" == "lithium"    lithium-snapshot-0.3.0
135     Return From Keyword If    "${version}" == "helium"    helium
136
137 Show Devstack Debugs
138     [Documentation]    Collect the devstack logs to debug in case of failure
139     Write Commands Until Prompt    gunzip /opt/stack/logs/devstacklog.txt.gz
140     Write Commands Until Prompt    tail -n2000 /opt/stack/logs/devstacklog.txt    timeout=600s
141     Write Commands Until Prompt    grep 'distribution-karaf.*zip' /opt/stack/logs/devstacklog.txt