Add tempest_heat (heat-tempest-plugin) 26/69926/1
authorCédric Ollivier <cedric.ollivier@orange.com>
Thu, 2 Apr 2020 16:37:30 +0000 (18:37 +0200)
committerCédric Ollivier <cedric.ollivier@orange.com>
Sat, 11 Apr 2020 07:33:37 +0000 (09:33 +0200)
It asks for the Fedora-Cloud-Base image and a second user account.
It should be noted that heat-tempest-plugin duplicates all configs from
tempest.

Minimal image is still Cirros and the first account is the admin one.
Then it conforms with the TempestCommon logic.

AodhAlarmTest is skipped by default because pre conditions are missing.
SoftwareConfigIntegrationTest is skipped as in gates because it
requires a custom image [1]

[1] https://github.com/openstack/heat/blob/master/devstack/lib/heat#L444

Change-Id: I8b39dc65ef3714411cd828e17b95e124f2e90f34
Signed-off-by: Cédric Ollivier <cedric.ollivier@orange.com>
ansible/site.yml
docker/smoke/Dockerfile
docker/smoke/testcases.yaml
docs/release/release-notes/functest-release.rst
functest/ci/download_images.sh
functest/ci/testcases.yaml
functest/opnfv_tests/openstack/tempest/custom_tests/tempest_conf.yaml
functest/opnfv_tests/openstack/tempest/tempest.py
setup.cfg

index 11287c0..780d3ef 100644 (file)
@@ -62,6 +62,7 @@
             - neutron-tempest-plugin-api
             - tempest_cinder
             - tempest_keystone
+            - tempest_heat
             - rally_sanity
             - refstack_defcore
             - tempest_full
index c02e57a..5d769c3 100644 (file)
@@ -9,6 +9,7 @@ ARG NEUTRON_TEMPEST_TAG=0.3.0
 ARG CINDER_TEMPEST_TAG=0.2.0
 ARG KEYSTONE_TEMPEST_TAG=0.1.0
 ARG BARBICAN_TAG=0.1.0
+ARG HEAT_TEMPEST_TAG=37a8df97277b42693ead3f5709f23544788f5a9f
 
 RUN apk --no-cache add --update libxml2 libxslt libpcre16 libpcre32 && \
     apk --no-cache add --virtual .build-deps --update \
@@ -45,12 +46,18 @@ RUN apk --no-cache add --update libxml2 libxslt libpcre16 libpcre32 && \
         git fetch --tags https://opendev.org/openstack/barbican-tempest-plugin.git $BARBICAN_TAG && \
         git checkout FETCH_HEAD) && \
     update-requirements -s --source /src/openstack-requirements /src/barbican-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) && \
     pip install --no-cache-dir --src /src -cupper-constraints.txt -cupper-constraints.opnfv.txt \
         /src/patrole /src/barbican-tempest-plugin /src/neutron-tempest-plugin \
-        networking-bgpvpn networking-sfc /src/cinder-tempest-plugin /src/keystone-tempest-plugin && \
+        networking-bgpvpn networking-sfc /src/cinder-tempest-plugin /src/keystone-tempest-plugin \
+        /src/heat-tempest-plugin && \
     rm -r 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/cinder-tempest-plugin /src/keystone-tempest-plugin \
+        /src/heat-tempest-plugin && \
     mkdir -p /home/opnfv/functest/data/refstack && \
     mkdir -p /etc/neutron /etc/glance && \
     wget -q -O /etc/neutron/policy.json https://opendev.org/openstack/neutron/raw/branch/$OPENSTACK_TAG/etc/policy.json && \
index 6431b55..67b6b54 100644 (file)
@@ -54,6 +54,21 @@ tiers:
                         option:
                             - '--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
index c8d7cb6..b0a804c 100644 (file)
@@ -37,6 +37,7 @@ The internal test cases are:
  * neutron-tempest-plugin-api
  * tempest_cinder
  * tempest_keystone
+ * tempest_heat
  * rally_sanity
  * refstack_defcore
  * patrole
index 219bcbb..808f258 100644 (file)
@@ -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
index 88ea476..7489a1c 100644 (file)
@@ -217,6 +217,21 @@ tiers:
                         option:
                             - '--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
index cbcbe10..8e616ef 100644 (file)
@@ -79,3 +79,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
index f6b912a..125d191 100644 (file)
@@ -662,3 +662,69 @@ class TempestScenario(TempestCommon):
             instances=self.quota_instances,
             cores=self.quota_cores)
         return super(TempestScenario, self).run(**kwargs)
+
+
+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)
index 7a7c41d..f4f74c9 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -27,6 +27,7 @@ xtesting.testcase =
     odl = functest.opnfv_tests.sdn.odl.odl:ODLTests
     tempest_common = functest.opnfv_tests.openstack.tempest.tempest:TempestCommon
     tempest_scenario = functest.opnfv_tests.openstack.tempest.tempest:TempestScenario
+    tempest_heat = functest.opnfv_tests.openstack.tempest.tempest:TempestHeat
     rally_sanity = functest.opnfv_tests.openstack.rally.rally:RallySanity
     refstack_defcore = functest.opnfv_tests.openstack.refstack.refstack:Refstack
     patrole = functest.opnfv_tests.openstack.patrole.patrole:Patrole