blob: 86207316cf57bc311abe92f362438b6e28f18301 [file] [log] [blame]
Brianna Poulos011292a2017-03-15 16:24:38 -04001# Copyright 2012 OpenStack Foundation
2# Copyright 2013 IBM Corp.
3# All Rights Reserved.
4#
5# Licensed under the Apache License, Version 2.0 (the "License"); you may
6# not use this file except in compliance with the License. You may obtain
7# a copy of the License at
8#
9# http://www.apache.org/licenses/LICENSE-2.0
10#
11# Unless required by applicable law or agreed to in writing, software
12# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
13# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
14# License for the specific language governing permissions and limitations
15# under the License.
16
17from oslo_log import log
18
Brianna Poulos011292a2017-03-15 16:24:38 -040019from tempest.common import image as common_image
20from tempest.common import waiters
21from tempest import config
22from tempest.lib.common.utils import data_utils
Michael Polenchuk3577b812022-09-07 10:30:53 +040023from tempest.lib.common.utils import test_utils
Brianna Poulos011292a2017-03-15 16:24:38 -040024from tempest.lib import exceptions as lib_exc
Ihar Hrachyshkaecce1f62018-01-18 13:32:05 -080025from tempest.scenario import manager
Brianna Poulos011292a2017-03-15 16:24:38 -040026
27CONF = config.CONF
28
29LOG = log.getLogger(__name__)
30
31
Ihar Hrachyshka2d0cf0a2018-01-18 13:40:09 -080032# we inherit from NetworkScenarioTest since some test cases need access to
33# check_*_connectivity methods to validate instances are up and accessible
34class ScenarioTest(manager.NetworkScenarioTest):
Brianna Poulos011292a2017-03-15 16:24:38 -040035 """Base class for scenario tests. Uses tempest own clients. """
Brianna Poulos011292a2017-03-15 16:24:38 -040036 # ## Test functions library
37 #
38 # The create_[resource] functions only return body and discard the
39 # resp part which is not used in scenario tests
Brianna Poulos011292a2017-03-15 16:24:38 -040040
Brianna Poulos011292a2017-03-15 16:24:38 -040041 def _image_create(self, name, fmt, path,
42 disk_format=None, properties=None):
43 if properties is None:
44 properties = {}
45 name = data_utils.rand_name('%s-' % name)
46 params = {
47 'name': name,
48 'container_format': fmt,
49 'disk_format': disk_format or fmt,
50 }
51 if CONF.image_feature_enabled.api_v1:
52 params['is_public'] = 'False'
53 params['properties'] = properties
54 params = {'headers': common_image.image_meta_to_headers(**params)}
55 else:
56 params['visibility'] = 'private'
57 # Additional properties are flattened out in the v2 API.
58 params.update(properties)
59 body = self.image_client.create_image(**params)
60 image = body['image'] if 'image' in body else body
Michael Polenchuk3577b812022-09-07 10:30:53 +040061 self.addCleanup(self.image_client.wait_for_resource_deletion,
62 image['id'])
63 self.addCleanup(test_utils.call_and_ignore_notfound_exc,
64 self.image_client.delete_image, image['id'])
Brianna Poulos011292a2017-03-15 16:24:38 -040065 self.assertEqual("queued", image['status'])
66 with open(path, 'rb') as image_file:
67 if CONF.image_feature_enabled.api_v1:
68 self.image_client.update_image(image['id'], data=image_file)
69 else:
70 self.image_client.store_image_file(image['id'], image_file)
Marian Krcmarik1972c462020-11-20 01:33:02 +010071
72 if CONF.image_feature_enabled.import_image:
73 available_stores = []
74 try:
75 available_stores = self.image_client.info_stores()['stores']
Luigi Toscano4e9303e2022-06-24 11:37:34 +020076 except lib_exc.NotFound:
Marian Krcmarik1972c462020-11-20 01:33:02 +010077 pass
78 available_import_methods = self.image_client.info_import()[
79 'import-methods']['value']
80 if ('copy-image' in available_import_methods and
81 len(available_stores) > 1):
82 self.image_client.image_import(image['id'],
83 method='copy-image',
84 all_stores=True,
85 all_stores_must_succeed=False)
86 failed_stores = waiters.wait_for_image_copied_to_stores(
87 self.image_client, image['id'])
88 self.assertEqual(0, len(failed_stores),
89 "Failed to copy the following stores: %s" %
90 str(failed_stores))
91
Brianna Poulos011292a2017-03-15 16:24:38 -040092 return image['id']