adding tempest test cases to existing openstack related jobs 83/39683/61
authorJamo Luhrsen <jluhrsen@redhat.com>
Wed, 1 Jun 2016 05:34:48 +0000 (22:34 -0700)
committerLuis Gomez <ecelgp@gmail.com>
Tue, 5 Jul 2016 18:46:55 +0000 (18:46 +0000)
Change-Id: I2787316cb39eee1e3bc713eb9772d4c21be02ba1
Signed-off-by: Jamo Luhrsen <jluhrsen@redhat.com>
csit/libraries/DevstackUtils.robot
csit/libraries/OpenStackOperations.robot
csit/suites/openstack/tempest/tempest.robot [new file with mode: 0644]
csit/testplans/netvirt-1node-openstack.txt

index 71be69da92a7dea938d9903daa9399b485f9b767..3762a081cbabe2f87f376239845f0627dd1b4bb8 100644 (file)
@@ -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)
 
index e867f2b4d4f6558fb08d11bd168068b1ffc45f7f..0539840f3941e416c9fbdba8ab8bc422fad2f73a 100644 (file)
@@ -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 (file)
index 0000000..ed8bef0
--- /dev/null
@@ -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
index 1440edf3c7dc162f2a395ed5b4fabc33df6b2f77..99b793a7f09db6fd9f5dd37bfa57d34ebb2cc595 100644 (file)
@@ -1 +1,2 @@
+integration/test/csit/suites/openstack/tempest/
 integration/test/csit/suites/openstack/connectivity/