Library RequestsLibrary
Library ./UtilLibrary.py
Resource KarafKeywords.robot
+Resource OpenStackOperations.robot
Variables ../variables/Variables.py
*** Variables ***
*** Keywords ***
Run Tempest Tests
- [Arguments] ${tempest_regex} ${timeout}=600s
- [Documentation] Execute the tempest tests
- Write Commands Until Prompt cd /opt/stack/new/tempest
- Write Commands Until Prompt sudo rm -rf /opt/stack/new/tempest/.testrepository
- Write Commands Until Prompt sudo testr init
- ${results}= Write Commands Until Prompt sudo -E testr run ${tempest_regex} --subunit | subunit-trace --no-failure-debug -f timeout=${timeout}
- Create File ${WORKSPACE}/tempest_output.log data=${results}
+ [Arguments] ${tempest_regex} ${tempest_exclusion_regex}="" ${tempest_conf}="" ${tempest_directory}=/opt/stack/tempest ${timeout}=600s
+ [Documentation] Execute the tempest tests.
+ Write Commands Until Prompt source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
+ Write Commands Until Prompt cd ${tempest_directory}
+ Write Commands Until Prompt sudo rm -rf ${tempest_directory}/.testrepository
+ Write Commands Until Prompt sudo testr list-tests | egrep ${tempest_regex} | egrep -v ${tempest_exclusion_regex} > tests_to_execute.txt
+ ${tests_to_execute}= Write Commands Until Prompt sudo cat tests_to_execute.txt
+ Log ${tests_to_execute}
+ # run_tempests.sh is a wrapper to testr, and we are providing the config file
+ ${results}= Write Commands Until Prompt sudo -E ./run_tempest.sh -C ${tempest_conf} -N ${tempest_regex} -- --load-list tests_to_execute.txt timeout=${timeout}
+ Log ${results}
+ Create File tempest_output_${tempest_regex}.log data=${results}
Should Contain ${results} Failed: 0
# TODO: also need to verify some non-zero pass count as well as other results are ok (e.g. skipped, etc)
Log ${output}
Should Contain ${output} Created a new network
+List Networks
+ [Documentation] List networks and return output with neutron client.
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
+ ${output}= Write Commands Until Prompt neutron net-list 30s
+ Close Connection
+ Log ${output}
+ [Return] ${output}
+
Delete Network
[Arguments] ${network_name}
[Documentation] Delete Network with neutron request.
Close Connection
Get Net Id
- [Arguments] ${network_name} ${connection_id}
+ [Arguments] ${network_name}
[Documentation] Retrieve the net id for the given network name to create specific vm instance
- Switch Connection ${connection_id}
+ ${devstack_conn_id}= Get ControlNode Connection
+ Switch Connection ${devstack_conn_id}
${output}= Write Commands Until Prompt neutron net-list | grep "${network_name}" | get_field 1 30s
+ Close Connection
Log ${output}
${splitted_output}= Split String ${output} ${EMPTY}
${net_id}= Get from List ${splitted_output} 0
[Documentation] Create X Vm Instance with the net id of the Netowrk.
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
+ ${net_id}= Get Net Id ${net_name}
: FOR ${VmElement} IN @{vm_instance_names}
\ ${output}= Write Commands Until Prompt nova boot --image ${image} --flavor ${flavor} --nic net-id=${net_id} ${VmElement} 30s
\ Log ${output}
Log ${vm_ip}
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
+ ${net_id}= Get Net Id ${net_name}
Log ${net_id}
${output}= Write Commands Until Prompt sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip} 20s
Log ${output}
Log ${vm_ip}
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
+ ${net_id}= Get Net Id ${net_name}
Log ${net_id}
${output}= Write Commands Until Prompt sudo ip netns exec qdhcp-${net_id} ping -c 3 ${vm_ip} 20s
Close Connection
[Documentation] Login to the vm instance using ssh in the network.
${devstack_conn_id}= Get ControlNode Connection
Switch Connection ${devstack_conn_id}
- ${net_id}= Get Net Id ${net_name} ${devstack_conn_id}
+ ${net_id}= Get Net Id ${net_name}
${output}= Write Commands Until Expected Prompt sudo ip netns exec qdhcp-${net_id} ssh ${user}@${src_ip} -o ConnectTimeout=10 -o StrictHostKeyChecking=no d:
Log ${output}
${output}= Write Commands Until Expected Prompt ${password} ${OS_SYSTEM_PROMPT}
: FOR ${index} IN @{vm_indices}
\ ${output}= Write Commands Until Prompt nova show ${index} 30s
\ Log ${output}
- Close Connection
+ Close Connection
\ No newline at end of file
--- /dev/null
+*** Settings ***
+Documentation Test suite for running tempest tests. It is assumed that the test environment
+... is already deployed and ready.
+Suite Setup Log In To Tempest Executor And Setup Test Environment
+Suite Teardown Close All Connections
+Library SSHLibrary
+Resource ../../../libraries/Utils.robot
+Resource ../../../libraries/DevstackUtils.robot
+Variables ../../../variables/Variables.py
+
+*** Variables ***
+${exclusion_regex} 'metering|test_l3_agent_scheduler.L3AgentSchedulerTestJSON|test_extensions.ExtensionsTestJSON.test_list_show_extensions'
+${tempest_config_file} ./tempest.conf
+
+*** Test Cases ***
+tempest.api.network
+ Run Tempest Tests ${TEST_NAME} ${exclusion_regex} ${tempest_config_file}
+
+tempest.scenario.test_minimum_basic
+ [Tags] exclude
+ Run Tempest Tests ${TEST_NAME}
+
+*** Keywords ***
+Log In To Tempest Executor And Setup Test Environment
+ [Documentation] Open SSH connection to a devstack system and source the openstack
+ ... credentials needed to run the tempest tests
+ # source_pwd is expected to exist in the below Create Network, Create Subnet keywords. Might be a bug.
+ ${source_pwd} Set Variable yes
+ Set Suite Variable ${source_pwd}
+ # Tempest network.api tests need an existing external network in order to create
+ # routers against. Creating that here.
+ Create Network external --router:external=True
+ Create Subnet external external-subnet 10.0.0.0/24
+ List Networks
+ ${net_id}= Get Net Id external
+ SSHLibrary.Open Connection ${OS_CONTROL_NODE_IP} prompt=${DEFAULT_LINUX_PROMPT_STRICT}
+ Utils.Flexible SSH Login ${OS_USER}
+ Generate Tempest Conf File ${net_id}
+
+
+Generate Tempest Conf File
+ [Arguments] ${external_network_id}
+ [Documentation] Tempest will be run with a config file ./tempest.conf. That file needs to be auto
+ ... generated first, then updated with the current openstack info, including the specific external
+ ... network id. There was trouble with permissions in upstream CI, so everything is done with sudo
+ ... and even the tempest.conf is changed to 777 permissions.
+ Write Commands Until Prompt source ${DEVSTACK_DEPLOY_PATH}/openrc admin admin
+ Write Commands Until Prompt cd /opt/stack/tempest
+ Write Commands Until Prompt sudo -E oslo-config-generator --config-file $(find . -name config-generator.tempest.conf) --output-file ${tempest_config_file}
+ # TODO: the below set of configs may not all be neccessary, so we could try to trim out what's not needed.
+ Add Config To File On Existing SSH Connection ${tempest_config_file} service_available neutron true
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity catalog_type identity
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity uri http://localhost:5000/v2.0
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity uri_v3 http://localhost:8774/v3
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity auth_version v2
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity v2_admin_endpoint_type adminURL
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity username $OS_USERNAME
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity admin_role admin
+ Add Config To File On Existing SSH Connection ${tempest_config_file} identity password $OS_PASSWORD
+ Add Config To File On Existing SSH Connection ${tempest_config_file} auth admin_username $OS_USERNAME
+ Add Config To File On Existing SSH Connection ${tempest_config_file} auth admin_project_name $OS_TENANT_NAME
+ Add Config To File On Existing SSH Connection ${tempest_config_file} auth admin_password $OS_PASSWORD
+ Add Config To File On Existing SSH Connection ${tempest_config_file} network public_network_id ${external_network_id}
+ Add Config To File On Existing SSH Connection ${tempest_config_file} DEFAULT verbose true
+ Write Commands Until Prompt sudo cat ./tempest.conf
+ Write Commands Until Prompt sudo chmod 777 ./tempest.conf
+
+Add Config To File On Existing SSH Connection
+ [Arguments] ${config_file} ${config_section} ${config_key} ${config_value}
+ [Documentation] uses crudini to populate oslo cofg file.
+ # this keyword is only one line so seems like extra overhead, but this may be a good candidate to move
+ # to a library at some point, when/if other suites need to use it, so wanted to make it generic.
+ Write Commands Until Prompt sudo -E crudini --set ${config_file} ${config_section} ${config_key} ${config_value}
\ No newline at end of file
+integration/test/csit/suites/openstack/tempest/
integration/test/csit/suites/openstack/connectivity/