diff options
-rw-r--r-- | ansible/site.yml | 1 | ||||
-rw-r--r-- | docker/smoke/Dockerfile | 10 | ||||
-rw-r--r-- | docker/smoke/testcases.yaml | 15 | ||||
-rw-r--r-- | docs/release/release-notes/functest-release.rst | 1 | ||||
-rw-r--r-- | functest/ci/download_images.sh | 1 | ||||
-rw-r--r-- | functest/ci/testcases.yaml | 15 | ||||
-rw-r--r-- | functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml | 5 | ||||
-rw-r--r-- | functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf_ovn.yaml | 5 | ||||
-rw-r--r-- | functest/opnfv_tests/openstack/tempest/tempest.py | 66 | ||||
-rw-r--r-- | setup.cfg | 1 |
10 files changed, 118 insertions, 2 deletions
diff --git a/ansible/site.yml b/ansible/site.yml index 96ff8d07d..fb5e5a966 100644 --- a/ansible/site.yml +++ b/ansible/site.yml @@ -52,6 +52,7 @@ - neutron-tempest-plugin-api - tempest_cinder - tempest_keystone + - tempest_heat - rally_sanity - refstack_compute - refstack_object diff --git a/docker/smoke/Dockerfile b/docker/smoke/Dockerfile index c0eec437f..c49cb5518 100644 --- a/docker/smoke/Dockerfile +++ b/docker/smoke/Dockerfile @@ -10,6 +10,7 @@ ARG NEUTRON_TAG=master ARG GLANCE_TAG=master ARG BARBICAN_TAG=master ARG OCTAVIA_TAG=master +ARG HEAT_TEMPEST_TAG=master RUN apk --no-cache add --update libxml2 libxslt && \ apk --no-cache add --virtual .build-deps --update \ @@ -51,10 +52,15 @@ RUN apk --no-cache add --update libxml2 libxslt && \ git fetch --tags https://git.openstack.org/openstack/octavia-tempest-plugin.git $OCTAVIA_TAG && \ git checkout FETCH_HEAD) && \ update-requirements -s --source /src/openstack-requirements /src/octavia-tempest-plugin && \ + git init /src/heat-tempest-plugin && \ + (cd /src/heat-tempest-plugin && \ + git fetch --tags https://git.openstack.org/openstack/heat-tempest-plugin.git $HEAT_TEMPEST_TAG && \ + git checkout FETCH_HEAD) && \ + update-requirements -s --source /src/openstack-requirements /src/heat-tempest-plugin && \ pip3 install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \ /src/patrole /src/barbican-tempest-plugin /src/neutron-tempest-plugin \ /src/cinder-tempest-plugin /src/keystone-tempest-plugin \ - /src/octavia-tempest-plugin && \ + /src/octavia-tempest-plugin /src/heat-tempest-plugin && \ mkdir -p /home/opnfv/functest/data/refstack && \ mkdir -p /etc/neutron /etc/glance && \ virtualenv --no-pip --no-setuptools --no-wheel oslo && . oslo/bin/activate && \ @@ -67,7 +73,7 @@ RUN apk --no-cache add --update libxml2 libxslt && \ rm -r oslo upper-constraints.txt upper-constraints.opnfv.txt \ /src/patrole /src/barbican-tempest-plugin /src/neutron-tempest-plugin \ /src/cinder-tempest-plugin /src/keystone-tempest-plugin \ - /src/octavia-tempest-plugin /src/neutron /src/glance && \ + /src/octavia-tempest-plugin /src/heat-tempest-plugin /src/neutron /src/glance && \ apk del .build-deps COPY compute.txt /home/opnfv/functest/data/refstack/compute.txt COPY object.txt /home/opnfv/functest/data/refstack/object.txt diff --git a/docker/smoke/testcases.yaml b/docker/smoke/testcases.yaml index 72ba933cb..5b918991d 100644 --- a/docker/smoke/testcases.yaml +++ b/docker/smoke/testcases.yaml @@ -55,6 +55,21 @@ tiers: - '--concurrency=3' - + case_name: tempest_heat + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Heat project. + run: + name: tempest_heat + args: + mode: '^heat_tempest_plugin.tests' + option: + - '--concurrency=4' + + - case_name: rally_sanity project_name: functest criteria: 100 diff --git a/docs/release/release-notes/functest-release.rst b/docs/release/release-notes/functest-release.rst index 162beeb29..150423b10 100644 --- a/docs/release/release-notes/functest-release.rst +++ b/docs/release/release-notes/functest-release.rst @@ -38,6 +38,7 @@ The internal test cases are: * neutron-tempest-plugin-api * tempest_cinder * tempest_keystone + * tempest_heat * rally_sanity * refstack_compute * refstack_object diff --git a/functest/ci/download_images.sh b/functest/ci/download_images.sh index 219bcbb02..808f25858 100644 --- a/functest/ci/download_images.sh +++ b/functest/ci/download_images.sh @@ -14,4 +14,5 @@ https://cloud-images.ubuntu.com/releases/14.04/release/ubuntu-14.04-server-cloud http://repository.cloudifysource.org/cloudify/19.01.24/community-release/cloudify-docker-manager-community-19.01.24.tar http://testresults.opnfv.org/functest/vyos-1.1.8-amd64.qcow2 http://testresults.opnfv.org/functest/shaker-image-1.3.0+stretch.qcow2 +https://archives.fedoraproject.org/pub/archive/fedora/linux/releases/30/Cloud/x86_64/images/Fedora-Cloud-Base-30-1.2.x86_64.qcow2 EOF diff --git a/functest/ci/testcases.yaml b/functest/ci/testcases.yaml index bcc8f4c45..a48b2c2a3 100644 --- a/functest/ci/testcases.yaml +++ b/functest/ci/testcases.yaml @@ -233,6 +233,21 @@ tiers: - '--concurrency=3' - + case_name: tempest_heat + project_name: functest + criteria: 100 + blocking: false + description: >- + This test case runs the Tempest suite proposed by the + Heat project. + run: + name: tempest_heat + args: + mode: '^heat_tempest_plugin.tests' + option: + - '--concurrency=4' + + - case_name: rally_sanity project_name: functest criteria: 100 diff --git a/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml b/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml index f5b9e38d1..b4321dbdf 100644 --- a/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml +++ b/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml @@ -81,3 +81,8 @@ object-storage-feature-enabled: tempurl,crossdomain,container_quotas,staticweb,account_quotas,slo" object_versioning: true discoverability: true +heat_plugin: + skip_scenario_test_list: AodhAlarmTest,SoftwareConfigIntegrationTest + auth_version: 3 +heat_features_enabled: + multi_cloud: false diff --git a/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf_ovn.yaml b/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf_ovn.yaml index 9d2c7015f..d5daedf4d 100644 --- a/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf_ovn.yaml +++ b/functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf_ovn.yaml @@ -81,3 +81,8 @@ object-storage-feature-enabled: tempurl,crossdomain,container_quotas,staticweb,account_quotas,slo" object_versioning: true discoverability: true +heat_plugin: + skip_scenario_test_list: AodhAlarmTest,SoftwareConfigIntegrationTest + auth_version: 3 +heat_features_enabled: + multi_cloud: false diff --git a/functest/opnfv_tests/openstack/tempest/tempest.py b/functest/opnfv_tests/openstack/tempest/tempest.py index 0bb1e6e0f..14fa9f1c7 100644 --- a/functest/opnfv_tests/openstack/tempest/tempest.py +++ b/functest/opnfv_tests/openstack/tempest/tempest.py @@ -669,3 +669,69 @@ class TempestHorizon(TempestCommon): with open(self.conf_file, 'w') as config_file: rconfig.write(config_file) self.backup_tempest_config(self.conf_file, self.res_dir) + + +class TempestHeat(TempestCommon): + """Tempest Heat testcase implementation class.""" + + filename_alt = ('/home/opnfv/functest/images/' + 'Fedora-Cloud-Base-30-1.2.x86_64.qcow2') + flavor_alt_ram = 512 + flavor_alt_vcpus = 1 + flavor_alt_disk = 4 + + def __init__(self, **kwargs): + super(TempestHeat, self).__init__(**kwargs) + self.user2 = self.orig_cloud.create_user( + name='{}-user2_{}'.format(self.case_name, self.project.guid), + password=self.project.password, + domain_id=self.project.domain.id) + if not self.orig_cloud.get_role("heat_stack_owner"): + self.role = self.orig_cloud.create_role("heat_stack_owner") + self.orig_cloud.grant_role( + "heat_stack_owner", user=self.user2.id, + project=self.project.project.id, + domain=self.project.domain.id) + + def configure(self, **kwargs): + assert self.user2 + super(TempestHeat, self).configure(**kwargs) + rconfig = configparser.RawConfigParser() + rconfig.read(self.conf_file) + if not rconfig.has_section('heat_plugin'): + rconfig.add_section('heat_plugin') + # It fails if region and domain ids are unset + rconfig.set( + 'heat_plugin', 'region', + os.environ.get('OS_REGION_NAME', 'RegionOne')) + rconfig.set('heat_plugin', 'auth_url', os.environ["OS_AUTH_URL"]) + rconfig.set('heat_plugin', 'project_domain_id', self.project.domain.id) + rconfig.set('heat_plugin', 'user_domain_id', self.project.domain.id) + rconfig.set( + 'heat_plugin', 'project_domain_name', self.project.domain.name) + rconfig.set( + 'heat_plugin', 'user_domain_name', self.project.domain.name) + rconfig.set('heat_plugin', 'username', self.user2.name) + rconfig.set('heat_plugin', 'password', self.project.password) + rconfig.set('heat_plugin', 'project_name', self.project.project.name) + rconfig.set('heat_plugin', 'admin_username', self.project.user.name) + rconfig.set('heat_plugin', 'admin_password', self.project.password) + rconfig.set( + 'heat_plugin', 'admin_project_name', self.project.project.name) + rconfig.set('heat_plugin', 'image_ref', self.image_alt.id) + rconfig.set('heat_plugin', 'instance_type', self.flavor_alt.id) + rconfig.set('heat_plugin', 'minimal_image_ref', self.image.id) + rconfig.set('heat_plugin', 'minimal_instance_type', self.flavor.id) + rconfig.set('heat_plugin', 'floating_network_name', self.ext_net.name) + rconfig.set('heat_plugin', 'fixed_network_name', self.network.name) + with open(self.conf_file, 'w') as config_file: + rconfig.write(config_file) + self.backup_tempest_config(self.conf_file, self.res_dir) + + def clean(self): + """ + Cleanup all OpenStack objects. Should be called on completion. + """ + super(TempestHeat, self).clean() + if self.user2: + self.orig_cloud.delete_user(self.user2.id) @@ -28,6 +28,7 @@ xtesting.testcase = tempest_common = functest.opnfv_tests.openstack.tempest.tempest:TempestCommon tempest_scenario = functest.opnfv_tests.openstack.tempest.tempest:TempestScenario tempest_horizon = functest.opnfv_tests.openstack.tempest.tempest:TempestHorizon + tempest_heat = functest.opnfv_tests.openstack.tempest.tempest:TempestHeat rally_sanity = functest.opnfv_tests.openstack.rally.rally:RallySanity refstack = functest.opnfv_tests.openstack.refstack.refstack:Refstack patrole = functest.opnfv_tests.openstack.patrole.patrole:Patrole |