summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--dovetail/compliance/debug.yml1
-rw-r--r--dovetail/conf/dovetail_config.yml16
-rw-r--r--dovetail/container.py15
-rw-r--r--dovetail/report.py5
-rwxr-xr-xdovetail/run.py4
-rw-r--r--dovetail/test_runner.py5
-rw-r--r--dovetail/testcase.py25
-rw-r--r--dovetail/testcase/defcore.tc001.yml266
-rwxr-xr-xutils/launch_db.sh17
9 files changed, 338 insertions, 16 deletions
diff --git a/dovetail/compliance/debug.yml b/dovetail/compliance/debug.yml
index 87003c47..847251bd 100644
--- a/dovetail/compliance/debug.yml
+++ b/dovetail/compliance/debug.yml
@@ -6,6 +6,7 @@ debug:
name: debug
testcases_list:
- dovetail.example.tc002
+ - dovetail.defcore.tc001
- dovetail.ipv6.tc008
- dovetail.ipv6.tc009
- dovetail.ipv6.tc018
diff --git a/dovetail/conf/dovetail_config.yml b/dovetail/conf/dovetail_config.yml
index ea8ecedc..b8174bdb 100644
--- a/dovetail/conf/dovetail_config.yml
+++ b/dovetail/conf/dovetail_config.yml
@@ -20,24 +20,29 @@ testsuite_supported:
- debug
# testarea supported, should adjust accordingly
testarea_supported:
- - vimops
- - nfvi
- - ipv6
+ - defcore
- example
+ - ipv6
+ - nfvi
+ - vimops
functest_testsuite:
+ - refstack_defcore
- tempest_smoke_serial
- tempest_full_parallel
- rally_sanity
- promise
functest_testcase:
- - healthcheck
+ - connection_check
+ - api_check
+ - snaps_health_check
- vping_ssh
- vping_userdata
- doctor
- copper
- cloudify_ims
+ - odl
# used for testcase cmd template in jinja2 format
# we have two variables available now
@@ -61,9 +66,6 @@ validate_input:
valid_docker_tag:
- 'stable'
- 'latest'
- - 'colorado.1.0'
- - 'colorado.2.0'
- - 'colorado.3.0'
- 'danube.1.0'
- 'danube.2.0'
- 'danube.3.0'
diff --git a/dovetail/container.py b/dovetail/container.py
index 71fa346f..583f2e0c 100644
--- a/dovetail/container.py
+++ b/dovetail/container.py
@@ -66,8 +66,7 @@ class Container(object):
ins_type = " -e INSTALLER_TYPE=vendor-specific"
scenario = " -e DEPLOY_SCENARIO=default"
node = " -e NODE_NAME=master"
- tag = " -e BUILD_TAG=daily-master-001"
- envs = "%s %s %s %s" % (ins_type, scenario, node, tag)
+ envs = "%s %s %s" % (ins_type, scenario, node)
dovetail_config = dt_cfg.dovetail_config
if dovetail_config['report_dest'].startswith("http"):
@@ -111,8 +110,10 @@ class Container(object):
if not openrc:
return None
- # This is used for showing the debug logs of the upstream projects
+ # CI_DEBUG is used for showing the debug logs of the upstream projects
+ # BUILD_TAG is the unique id for this test
envs = ' -e CI_DEBUG=true'
+ envs = envs + ' -e BUILD_TAG=%s' % dovetail_config['build_tag']
config = ""
if type.lower() == "functest":
@@ -214,3 +215,11 @@ class Container(object):
return (1, 'sub_cmd is empty')
cmd = 'sudo docker exec %s /bin/bash -c "%s"' % (container_id, sub_cmd)
return dt_utils.exec_cmd(cmd, cls.logger, exit_on_error)
+
+ @classmethod
+ def pre_copy(cls, container_id, src_path, dest_path, exit_on_error=False):
+ if src_path == "" or dest_path == "":
+ return (1, 'src_path or dest_path is empty')
+ cmd = 'sudo docker cp %s %s:%s' % (src_path, container_id, dest_path)
+ cls.logger.debug('execute cmd %s', cmd)
+ return dt_utils.exec_cmd(cmd, cls.logger, exit_on_error)
diff --git a/dovetail/report.py b/dovetail/report.py
index f2210cb7..deabbdd2 100644
--- a/dovetail/report.py
+++ b/dovetail/report.py
@@ -13,7 +13,6 @@ import urllib2
import re
import os
import datetime
-import uuid
from pbr import version
@@ -47,7 +46,7 @@ class Report(object):
report_obj['testsuite'] = testsuite_yaml['name']
# TO DO: once dashboard url settled, adjust accordingly
report_obj['dashboard'] = None
- report_obj['validation_ID'] = str(uuid.uuid4())
+ report_obj['build_tag'] = dt_cfg.dovetail_config['build_tag']
report_obj['upload_date'] =\
datetime.datetime.utcnow().strftime("%Y-%m-%d %H:%M:%S UTC")
report_obj['duration'] = duration
@@ -89,7 +88,7 @@ class Report(object):
report_txt += 'Version: %s\n' % report_data['version']
report_txt += 'TestSuite: %s\n' % report_data['testsuite']
report_txt += 'Result Dashboard: %s\n' % report_data['dashboard']
- report_txt += 'Validation ID: %s\n' % report_data['validation_ID']
+ report_txt += 'Build Tag: %s\n' % report_data['build_tag']
report_txt += 'Upload Date: %s\n' % report_data['upload_date']
if report_data['duration'] == 0:
report_txt += 'Duration: %s\n\n' % 'N/A'
diff --git a/dovetail/run.py b/dovetail/run.py
index 2a2c5677..828a2b70 100755
--- a/dovetail/run.py
+++ b/dovetail/run.py
@@ -12,6 +12,7 @@ import click
import os
import copy
import time
+import uuid
import utils.dovetail_logger as dt_logger
import utils.dovetail_utils as dt_utils
@@ -154,6 +155,8 @@ def clean_results_dir():
def main(*args, **kwargs):
"""Dovetail compliance test entry!"""
+ build_tag = "daily-master-%s" % str(uuid.uuid4())
+ dt_cfg.dovetail_config['build_tag'] = build_tag
clean_results_dir()
if kwargs['debug']:
os.environ['DEBUG'] = 'true'
@@ -162,6 +165,7 @@ def main(*args, **kwargs):
logger.info('================================================')
logger.info('Dovetail compliance: %s!', (kwargs['testsuite']))
logger.info('================================================')
+ logger.info('Build tag: %s', dt_cfg.dovetail_config['build_tag'])
validate_input(kwargs, dt_cfg.dovetail_config['validate_input'], logger)
configs = filter_config(kwargs, logger)
diff --git a/dovetail/test_runner.py b/dovetail/test_runner.py
index 1ac9f196..32a18743 100644
--- a/dovetail/test_runner.py
+++ b/dovetail/test_runner.py
@@ -46,6 +46,11 @@ class DockerRunner(object):
self.logger.debug('container id:%s', container_id)
+ dest_path = self.testcase.pre_copy_dest_path()
+ if dest_path:
+ src_path = self.testcase.mk_src_file()
+ ret, msg = Container.pre_copy(container_id, src_path, dest_path)
+
if not self.testcase.prepared():
prepare_failed = False
cmds = self.testcase.pre_condition()
diff --git a/dovetail/testcase.py b/dovetail/testcase.py
index aeeeee68..7f218c47 100644
--- a/dovetail/testcase.py
+++ b/dovetail/testcase.py
@@ -115,6 +115,14 @@ class Testcase(object):
self.name())
return pre_condition
+ def pre_copy_dest_path(self):
+ try:
+ pre_copy_dest_path = \
+ self.testcase['validate']['pre_copy']['dest_path']
+ except KeyError:
+ pre_copy_dest_path = ''
+ return pre_copy_dest_path
+
def post_condition(self):
try:
post_condition = self.testcase['validate']['post_condition']
@@ -128,6 +136,23 @@ class Testcase(object):
self.name())
return post_condition
+ def mk_src_file(self):
+ testcase_src_file = self.testcase['validate']['pre_copy']['src_file']
+ try:
+ with open(os.path.join(dt_cfg.dovetail_config['result_dir'],
+ testcase_src_file), 'w+') as src_file:
+ if self.sub_testcase() is not None:
+ for sub_test in self.sub_testcase():
+ self.logger.info('save testcases %s', sub_test)
+ src_file.write(sub_test + '\n')
+ self.logger.info('save testcases to %s', src_file)
+ except Exception:
+ self.logger.error('Failed to save: %s', src_file)
+
+ src_file_path = os.path.join(dt_cfg.dovetail_config['result_dir'],
+ testcase_src_file)
+ return src_file_path
+
def run(self):
runner = TestRunnerFactory.create(self)
try:
diff --git a/dovetail/testcase/defcore.tc001.yml b/dovetail/testcase/defcore.tc001.yml
new file mode 100644
index 00000000..bbd2c313
--- /dev/null
+++ b/dovetail/testcase/defcore.tc001.yml
@@ -0,0 +1,266 @@
+---
+dovetail.defcore.tc001:
+ name: dovetail.defcore.tc001
+ objective: > # Set of DefCore tempest test cases not flagged and required. It only contains OpenStack core (no object storage)
+ # The approved guidelines (2016.08) are valid for Kilo, Liberty, Mitaka and Newton releases of OpenStack
+ # The list can be generated using the Rest API from RefStack project:
+ # https://refstack.openstack.org/api/v1/guidelines/2016.08/tests?target=compute&type=required&alias=true&flag=false
+ validate:
+ type: functest
+ testcase: refstack_defcore
+ pre_condition:
+ - 'echo test for precondition in testcase'
+ pre_copy:
+ src_file: defcore.txt
+ dest_path: /home/opnfv/repos/functest/functest/opnfv_tests/openstack/refstack_client
+ cmds:
+ - 'functest env prepare'
+ - 'functest testcase run refstack_defcore -r'
+ post_condition:
+ - 'echo test for postcondition in testcase'
+ report:
+ sub_testcase_list:
+ - tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_delete_image
+ - tempest.api.compute.images.test_images_oneserver.ImagesOneServerTestJSON.test_create_image_specify_multibyte_character_image_name
+ - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_host_name_is_same_as_server_name
+ - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers
+ - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_list_servers_with_detail
+ - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_created_server_vcpus
+ - tempest.api.compute.servers.test_create_server.ServersTestJSON.test_verify_server_details
+ - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_host_name_is_same_as_server_name
+ - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers
+ - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_list_servers_with_detail
+ - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_created_server_vcpus
+ - tempest.api.compute.servers.test_create_server.ServersTestManualDisk.test_verify_server_details
+ - tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_get_instance_action
+ - tempest.api.compute.servers.test_instance_actions.InstanceActionsTestJSON.test_list_instance_actions
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_flavor
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_image
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_name
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_filter_by_server_status
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_detailed_limit_results
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_active_status
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_flavor
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_image
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_limit
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_server_name
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filter_by_server_status
+ - tempest.api.compute.servers.test_list_server_filters.ListServerFiltersTestJSON.test_list_servers_filtered_by_name_wildcard
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_future_date
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_changes_since_invalid_date
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_greater_than_actual_count
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_negative_value
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_limits_pass_string
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_flavor
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_image
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_by_non_existing_server_name
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_detail_server_is_deleted
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_status_non_existing
+ - tempest.api.compute.servers.test_list_servers_negative.ListServersNegativeTestJSON.test_list_servers_with_a_deleted_server
+ - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_lock_unlock_server
+ - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_reboot_server_hard
+ - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_rebuild_server
+ - tempest.api.compute.servers.test_server_actions.ServerActionsTestJSON.test_stop_start_server
+ - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_delete_server_metadata_item
+ - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_get_server_metadata_item
+ - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_list_server_metadata
+ - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata
+ - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_set_server_metadata_item
+ - tempest.api.compute.servers.test_server_metadata.ServerMetadataTestJSON.test_update_server_metadata
+ - tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_server_with_admin_password
+ - tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_specify_keypair
+ - tempest.api.compute.servers.test_servers.ServersTestJSON.test_create_with_existing_server_name
+ - tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_access_server_address
+ - tempest.api.compute.servers.test_servers.ServersTestJSON.test_update_server_name
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_numeric_server_name
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_metadata_exceeds_length_limit
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_server_name_length_exceeds_256
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_flavor
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_image
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_create_with_invalid_network_uuid
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_id_exceeding_length_limit
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_delete_server_pass_negative_id
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_get_non_existent_server
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_invalid_ip_v6_address
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_reboot_non_existent_server
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_deleted_server
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_non_existent_server
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_rebuild_reboot_deleted_server
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_server_name_blank
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_stop_non_existent_server
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_name_of_non_existent_server
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_name_length_exceeds_256
+ - tempest.api.compute.servers.test_servers_negative.ServersNegativeTestJSON.test_update_server_set_empty_name
+ - tempest.api.compute.test_quotas.QuotasTestJSON.test_get_default_quotas
+ - tempest.api.compute.test_quotas.QuotasTestJSON.test_get_quotas
+ - tempest.api.compute.test_versions.TestVersions.test_list_api_versions
+ - tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_attach_detach_volume
+ - tempest.api.compute.volumes.test_attach_volume.AttachVolumeTestJSON.test_list_get_volume_attachments
+ - tempest.api.identity.v3.TestApiDiscovery.test_api_media_types
+ - tempest.api.identity.v3.TestApiDiscovery.test_api_version_resources
+ - tempest.api.identity.v3.TestApiDiscovery.test_api_version_statuses
+ - tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_media_types
+ - tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_resources
+ - tempest.api.identity.v3.test_api_discovery.TestApiDiscovery.test_api_version_statuses
+ - tempest.api.identity.v3.test_tokens.TokensV3Test.test_create_token
+ - tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_delete_image
+ - tempest.api.image.v2.test_images.BasicOperationsImagesTest.test_update_image
+ - tempest.api.image.v2.test_images.ListImagesTest.test_get_image_schema
+ - tempest.api.image.v2.test_images.ListImagesTest.test_get_images_schema
+ - tempest.api.image.v2.test_images.ListImagesTest.test_index_no_params
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_container_format
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_disk_format
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_limit
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_min_max_size
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_size
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_status
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_images_param_visibility
+ - tempest.api.image.v2.test_images.ListImagesTest.test_list_no_params
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_get_image_schema
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_get_images_schema
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_container_format
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_disk_format
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_limit
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_min_max_size
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_size
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_status
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_images_param_visibility
+ - tempest.api.image.v2.test_images.ListUserImagesTest.test_list_no_params
+ - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_image_null_id
+ - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_delete_non_existing_image
+ - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_delete_deleted_image
+ - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_image_null_id
+ - tempest.api.image.v2.test_images_negative.ImagesNegativeTest.test_get_non_existent_image
+ - tempest.api.image.v2.test_images_tags.ImagesTagsTest.test_update_delete_tags_for_image
+ - tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_delete_non_existing_tag
+ - tempest.api.image.v2.test_images_tags_negative.ImagesTagsNegativeTest.test_update_tags_for_non_existing_image
+ - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_all_attributes
+ - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_allocation_pools
+ - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_dhcp_enabled
+ - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw
+ - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_gw_and_allocation_pools
+ - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_with_host_routes_and_dns_nameservers
+ - tempest.api.network.test_networks.NetworksTest.test_create_delete_subnet_without_gateway
+ - tempest.api.network.test_networks.NetworksTest.test_create_update_delete_network_subnet
+ - tempest.api.network.test_networks.NetworksTest.test_delete_network_with_subnet
+ - tempest.api.network.test_networks.NetworksTest.test_list_networks
+ - tempest.api.network.test_networks.NetworksTest.test_list_networks_fields
+ - tempest.api.network.test_networks.NetworksTest.test_list_subnets
+ - tempest.api.network.test_networks.NetworksTest.test_list_subnets_fields
+ - tempest.api.network.test_networks.NetworksTest.test_show_network
+ - tempest.api.network.test_networks.NetworksTest.test_show_network_fields
+ - tempest.api.network.test_networks.NetworksTest.test_show_subnet
+ - tempest.api.network.test_networks.NetworksTest.test_show_subnet_fields
+ - tempest.api.network.test_networks.NetworksTest.test_update_subnet_gw_dns_host_routes_dhcp
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_delete_subnet_all_attributes
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_delete_subnet_with_allocation_pools
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_delete_subnet_with_dhcp_enabled
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_delete_subnet_with_gw
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_delete_subnet_with_gw_and_allocation_pools
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_delete_subnet_with_host_routes_and_dns_nameservers
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_delete_subnet_without_gateway
+ - tempest.api.network.test_networks.NetworksTestJSON.test_create_update_delete_network_subnet
+ - tempest.api.network.test_networks.NetworksTestJSON.test_delete_network_with_subnet
+ - tempest.api.network.test_networks.NetworksTestJSON.test_list_networks
+ - tempest.api.network.test_networks.NetworksTestJSON.test_list_networks_fields
+ - tempest.api.network.test_networks.NetworksTestJSON.test_list_subnets
+ - tempest.api.network.test_networks.NetworksTestJSON.test_list_subnets_fields
+ - tempest.api.network.test_networks.NetworksTestJSON.test_show_network
+ - tempest.api.network.test_networks.NetworksTestJSON.test_show_network_fields
+ - tempest.api.network.test_networks.NetworksTestJSON.test_show_subnet
+ - tempest.api.network.test_networks.NetworksTestJSON.test_show_subnet_fields
+ - tempest.api.network.test_networks.NetworksTestJSON.test_update_subnet_gw_dns_host_routes_dhcp
+ - tempest.api.network.test_ports.PortsTestJSON.test_create_bulk_port
+ - tempest.api.network.test_ports.PortsTestJSON.test_create_port_in_allowed_allocation_pools
+ - tempest.api.network.test_ports.PortsTestJSON.test_create_update_delete_port
+ - tempest.api.network.test_ports.PortsTestJSON.test_list_ports
+ - tempest.api.network.test_ports.PortsTestJSON.test_list_ports_fields
+ - tempest.api.network.test_ports.PortsTestJSON.test_show_port
+ - tempest.api.network.test_ports.PortsTestJSON.test_show_port_fields
+ - tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_security_group_and_extra_attributes
+ - tempest.api.network.test_ports.PortsTestJSON.test_update_port_with_two_security_groups_and_extra_attributes
+ - tempest.api.network.test_security_groups.SecGroupTest.test_create_list_update_show_delete_security_group
+ - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_additional_args
+ - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_icmp_type_code
+ - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_protocol_integer_value
+ - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_group_id
+ - tempest.api.network.test_security_groups.SecGroupTest.test_create_security_group_rule_with_remote_ip_prefix
+ - tempest.api.network.test_security_groups.SecGroupTest.test_create_show_delete_security_group_rule
+ - tempest.api.network.test_security_groups.SecGroupTest.test_list_security_groups
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_additional_default_security_group_fails
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_duplicate_security_group_rule_fails
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_ethertype
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_protocol
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_bad_remote_ip_prefix
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_invalid_ports
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_remote_groupid
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_create_security_group_rule_with_non_existent_security_group
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_delete_non_existent_security_group
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group
+ - tempest.api.network.test_security_groups_negative.NegativeSecGroupTest.test_show_non_existent_security_group_rule
+ - tempest.api.volume.test_availability_zone.AvailabilityZoneV2TestJSON.test_get_availability_zone_list
+ - tempest.api.volume.test_extensions.ExtensionsV2TestJSON.test_list_extensions
+ - tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_create_get_delete_snapshot_metadata
+ - tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_crud_snapshot_metadata
+ - tempest.api.volume.test_snapshot_metadata.SnapshotV2MetadataTestJSON.test_update_snapshot_metadata_item
+ - tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_create_get_delete_volume_metadata
+ - tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_crud_volume_metadata
+ - tempest.api.volume.test_volume_metadata.VolumesV2MetadataTest.test_update_volume_metadata_item
+ - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_attach_detach_volume_to_instance
+ - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_get_volume_attachment
+ - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_reserve_unreserve_volume
+ - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_bootable
+ - tempest.api.volume.test_volumes_actions.VolumesV2ActionsTest.test_volume_readonly_update
+ - tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete
+ - tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_as_clone
+ - tempest.api.volume.test_volumes_get.VolumesV2GetTest.test_volume_create_get_update_delete_from_image
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_by_name
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_by_name
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_param_display_name_and_status
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_display_name_and_status
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_detail_param_metadata
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_details
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_with_param_metadata
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_availability_zone
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_by_status
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_availability_zone
+ - tempest.api.volume.test_volumes_list.VolumesV2ListTestJSON.test_volumes_list_details_by_status
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_attach_volumes_with_nonexistent_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_invalid_size
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_snapshot_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_source_volid
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_nonexistent_volume_type
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_out_passing_size
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_negative
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_with_size_zero
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_create_volume_without_passing_size
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_invalid_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_delete_volume_without_passing_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_detach_volumes_with_invalid_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_invalid_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_get_volume_without_passing_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_invalid_status
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_detail_with_nonexistent_name
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_invalid_status
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_list_volumes_with_nonexistent_name
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_negative_volume_status
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_reserve_volume_with_nonexistent_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_unreserve_volume_with_nonexistent_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_empty_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_invalid_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_update_volume_with_nonexistent_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_delete_nonexistent_volume_id
+ - tempest.api.volume.test_volumes_negative.VolumesV2NegativeTest.test_volume_get_nonexistent_volume_id
+ - tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshot_create_get_list_update_delete
+ - tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_details_with_params
+ - tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_snapshots_list_with_params
+ - tempest.api.volume.test_volumes_snapshots.VolumesV2SnapshotTestJSON.test_volume_from_snapshot
+ - tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_details_with_params
+ - tempest.api.volume.test_volumes_snapshots_list.VolumesV2SnapshotListTestJSON.test_snapshots_list_with_params
+ - tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_with_nonexistent_volume_id
+ - tempest.api.volume.test_volumes_snapshots_negative.VolumesV2SnapshotNegativeTestJSON.test_create_snapshot_without_passing_volume_id
+ - tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_pagination
+ - tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_details_with_multiple_params
+ - tempest.api.volume.v2.test_volumes_list.VolumesV2ListTestJSON.test_volume_list_pagination
diff --git a/utils/launch_db.sh b/utils/launch_db.sh
index 008c9600..f3681665 100755
--- a/utils/launch_db.sh
+++ b/utils/launch_db.sh
@@ -82,9 +82,20 @@ echo "================================="
echo "Upload default project info to DB"
echo "================================="
-# install python packages
-sudo apt-get update > /dev/null
-sudo apt-get install -y python-pip > /dev/null
+# For Ubuntu, there is file /etc/lsb-release
+# For Centos and redhat, there is file /etc/redhat-release
+if [ -f /etc/lsb-release ]; then
+ sudo apt-get update > /dev/null
+ sudo apt-get install -y python-pip > /dev/null
+elif [ -f /etc/redhat-release ]; then
+ sudo yum -y update > /dev/null
+ sudo yum -y install epel-release > /dev/null
+ sudo yum -y install python-pip > /dev/null
+else
+ echo "This operating system is not currently supported."
+ exit 1
+fi
+
pip install requests > /dev/null
echo "Init DB info..."