Add tempest_heat (heat-tempest-plugin) 10/69910/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>
Mon, 6 Apr 2020 11:45:02 +0000 (13:45 +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/custom_tests/tempest_conf_ovn.yaml
functest/opnfv_tests/openstack/tempest/tempest.py
setup.cfg

index 96ff8d0..fb5e5a9 100644 (file)
@@ -52,6 +52,7 @@
             - neutron-tempest-plugin-api
             - tempest_cinder
             - tempest_keystone
+            - tempest_heat
             - rally_sanity
             - refstack_compute
             - refstack_object
index c0eec43..c49cb55 100644 (file)
@@ -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
index 72ba933..5b91899 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 162beeb..150423b 100644 (file)
@@ -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
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 bcc8f4c..a48b2c2 100644 (file)
@@ -232,6 +232,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 f5b9e38..b4321db 100644 (file)
@@ -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
index 9d2c701..d5daedf 100644 (file)
@@ -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
index 0bb1e6e..14fa9f1 100644 (file)
@@ -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)
index fb25965..9121930 100644 (file)
--- a/setup.cfg
+++ b/setup.cfg
@@ -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