From 6ebf30ec3a45ec2461f888bfce7f7c45add77c56 Mon Sep 17 00:00:00 2001 From: Jamo Luhrsen Date: Tue, 31 May 2016 22:34:48 -0700 Subject: [PATCH] adding tempest test cases to existing openstack related jobs Change-Id: I2787316cb39eee1e3bc713eb9772d4c21be02ba1 Signed-off-by: Jamo Luhrsen --- csit/libraries/DevstackUtils.robot | 20 ++++-- csit/libraries/OpenStackOperations.robot | 25 +++++-- csit/suites/openstack/tempest/tempest.robot | 73 +++++++++++++++++++++ csit/testplans/netvirt-1node-openstack.txt | 1 + 4 files changed, 105 insertions(+), 14 deletions(-) create mode 100644 csit/suites/openstack/tempest/tempest.robot diff --git a/csit/libraries/DevstackUtils.robot b/csit/libraries/DevstackUtils.robot index 71be69da92..3762a081cb 100644 --- a/csit/libraries/DevstackUtils.robot +++ b/csit/libraries/DevstackUtils.robot @@ -8,6 +8,7 @@ Library Collections Library RequestsLibrary Library ./UtilLibrary.py Resource KarafKeywords.robot +Resource OpenStackOperations.robot Variables ../variables/Variables.py *** Variables *** @@ -23,13 +24,18 @@ ${CLEAN_DEVSTACK_HOST} False *** 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) diff --git a/csit/libraries/OpenStackOperations.robot b/csit/libraries/OpenStackOperations.robot index e867f2b4d4..0539840f39 100644 --- a/csit/libraries/OpenStackOperations.robot +++ b/csit/libraries/OpenStackOperations.robot @@ -20,6 +20,15 @@ Create Network 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. @@ -88,10 +97,12 @@ Delete Vm Instance 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 @@ -103,7 +114,7 @@ Create Vm Instances [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} @@ -131,7 +142,7 @@ Ping Vm From DHCP Namespace 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} @@ -144,7 +155,7 @@ Ping From DHCP Should Not Succeed 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 @@ -198,7 +209,7 @@ Test Operations From Vm Instance [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} @@ -299,4 +310,4 @@ Show Debugs : 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 diff --git a/csit/suites/openstack/tempest/tempest.robot b/csit/suites/openstack/tempest/tempest.robot new file mode 100644 index 0000000000..ed8bef0b78 --- /dev/null +++ b/csit/suites/openstack/tempest/tempest.robot @@ -0,0 +1,73 @@ +*** 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 diff --git a/csit/testplans/netvirt-1node-openstack.txt b/csit/testplans/netvirt-1node-openstack.txt index 1440edf3c7..99b793a7f0 100644 --- a/csit/testplans/netvirt-1node-openstack.txt +++ b/csit/testplans/netvirt-1node-openstack.txt @@ -1 +1,2 @@ +integration/test/csit/suites/openstack/tempest/ integration/test/csit/suites/openstack/connectivity/ -- 2.36.6