summaryrefslogtreecommitdiff
path: root/openstackclient/tests/functional/image
diff options
context:
space:
mode:
authorFan Zhang <zh.f@outlook.com>2018-07-30 19:31:27 +0800
committerJens Harbott <j.harbott@x-ion.de>2018-08-07 09:32:00 +0000
commitdef83a0e94de2f98e3bd68ee412c0f0a2c316f32 (patch)
treee55ae486bd6945b3ea1ca14ec3af7e6df970046a /openstackclient/tests/functional/image
parentf77ca68d53421df867ff2ef274b0648e1abfaf9a (diff)
downloadpython-openstackclient-def83a0e94de2f98e3bd68ee412c0f0a2c316f32.tar.gz
Fix broken gate jobs
This patch aims at fixing the broken gate jobs because of cinder and glance patches [1], [2], [3] and [4]. * Remove parameter `--source-replicated` to drop volume replication v1 support * Address some timing issues with volume transfer requests * Only run Image v1 tests when the test cloud has v1 available * Get tolerant of unexpected additional attributes being returned in Image data [1].https://review.openstack.org/#/c/586293/ [2].https://review.openstack.org/#/c/532503/ [3].https://review.openstack.org/#/c/533564/ [4].https://review.openstack.org/#/c/578755/ Co-Authored-By: Dean Troyer <dtroyer@gmail.com> Co-Authored-By: Monty Taylor <mordred@inaugust.com> Depends-on: https://review.openstack.org/588664 Change-Id: I2a785750e92155185d3344e6116c7f5c6fdd3cbe Signed-off-by: Fan Zhang <zh.f@outlook.com>
Diffstat (limited to 'openstackclient/tests/functional/image')
-rw-r--r--openstackclient/tests/functional/image/base.py24
-rw-r--r--openstackclient/tests/functional/image/v1/test_image.py55
-rw-r--r--openstackclient/tests/functional/image/v2/test_image.py107
3 files changed, 101 insertions, 85 deletions
diff --git a/openstackclient/tests/functional/image/base.py b/openstackclient/tests/functional/image/base.py
new file mode 100644
index 00000000..4b2ab64b
--- /dev/null
+++ b/openstackclient/tests/functional/image/base.py
@@ -0,0 +1,24 @@
+# Licensed under the Apache License, Version 2.0 (the "License"); you may
+# not use this file except in compliance with the License. You may obtain
+# a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+
+from openstackclient.tests.functional import base
+
+
+class BaseImageTests(base.TestCase):
+ """Functional tests for Image commands"""
+
+ @classmethod
+ def setUpClass(cls):
+ super(BaseImageTests, cls).setUpClass()
+ # TODO(dtroyer): maybe do image API discovery here to determine
+ # what is available, it isn't in the service catalog
+ cls.haz_v1_api = False
diff --git a/openstackclient/tests/functional/image/v1/test_image.py b/openstackclient/tests/functional/image/v1/test_image.py
index fa073f99..30490bf5 100644
--- a/openstackclient/tests/functional/image/v1/test_image.py
+++ b/openstackclient/tests/functional/image/v1/test_image.py
@@ -15,50 +15,47 @@ import uuid
import fixtures
-from openstackclient.tests.functional import base
+from openstackclient.tests.functional.image import base
-class ImageTests(base.TestCase):
- """Functional tests for image. """
+class ImageTests(base.BaseImageTests):
+ """Functional tests for Image commands"""
- NAME = uuid.uuid4().hex
- OTHER_NAME = uuid.uuid4().hex
+ def setUp(self):
+ super(ImageTests, self).setUp()
+ if not self.haz_v1_api:
+ self.skipTest('No Image v1 API present')
- @classmethod
- def setUpClass(cls):
- super(ImageTests, cls).setUpClass()
- json_output = json.loads(cls.openstack(
+ self.name = uuid.uuid4().hex
+ json_output = json.loads(self.openstack(
'--os-image-api-version 1 '
'image create -f json ' +
- cls.NAME
+ self.name
))
- cls.image_id = json_output["id"]
- cls.assertOutput(cls.NAME, json_output['name'])
+ self.image_id = json_output["id"]
+ self.assertOutput(self.name, json_output['name'])
+
+ ver_fixture = fixtures.EnvironmentVariable(
+ 'OS_IMAGE_API_VERSION', '1'
+ )
+ self.useFixture(ver_fixture)
- @classmethod
- def tearDownClass(cls):
+ def tearDown(self):
try:
- cls.openstack(
+ self.openstack(
'--os-image-api-version 1 '
'image delete ' +
- cls.image_id
+ self.image_id
)
finally:
- super(ImageTests, cls).tearDownClass()
-
- def setUp(self):
- super(ImageTests, self).setUp()
- ver_fixture = fixtures.EnvironmentVariable(
- 'OS_IMAGE_API_VERSION', '1'
- )
- self.useFixture(ver_fixture)
+ super(ImageTests, self).tearDown()
def test_image_list(self):
json_output = json.loads(self.openstack(
'image list -f json '
))
self.assertIn(
- self.NAME,
+ self.name,
[img['Name'] for img in json_output]
)
@@ -72,11 +69,11 @@ class ImageTests(base.TestCase):
'--min-ram 5 ' +
'--disk-format qcow2 ' +
'--public ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
self.assertEqual(
4,
@@ -100,11 +97,11 @@ class ImageTests(base.TestCase):
'--property a=b ' +
'--property c=d ' +
'--public ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
self.assertEqual(
"a='b', c='d'",
diff --git a/openstackclient/tests/functional/image/v2/test_image.py b/openstackclient/tests/functional/image/v2/test_image.py
index 3037b903..3185c3bd 100644
--- a/openstackclient/tests/functional/image/v2/test_image.py
+++ b/openstackclient/tests/functional/image/v2/test_image.py
@@ -16,60 +16,55 @@ import uuid
import fixtures
# from glanceclient import exc as image_exceptions
-from openstackclient.tests.functional import base
+from openstackclient.tests.functional.image import base
-class ImageTests(base.TestCase):
- """Functional tests for image. """
+class ImageTests(base.BaseImageTests):
+ """Functional tests for Image commands"""
- NAME = uuid.uuid4().hex
- OTHER_NAME = uuid.uuid4().hex
+ def setUp(self):
+ super(ImageTests, self).setUp()
- @classmethod
- def setUpClass(cls):
- super(ImageTests, cls).setUpClass()
- cls.image_tag = 'my_tag'
- json_output = json.loads(cls.openstack(
+ self.name = uuid.uuid4().hex
+ self.image_tag = 'my_tag'
+ json_output = json.loads(self.openstack(
'--os-image-api-version 2 '
'image create -f json --tag {tag} {name}'.format(
- tag=cls.image_tag, name=cls.NAME)
+ tag=self.image_tag, name=self.name)
))
- cls.image_id = json_output["id"]
- cls.assertOutput(cls.NAME, json_output['name'])
+ self.image_id = json_output["id"]
+ self.assertOutput(self.name, json_output['name'])
+
+ ver_fixture = fixtures.EnvironmentVariable(
+ 'OS_IMAGE_API_VERSION', '2'
+ )
+ self.useFixture(ver_fixture)
- @classmethod
- def tearDownClass(cls):
+ def tearDown(self):
try:
- cls.openstack(
+ self.openstack(
'--os-image-api-version 2 '
'image delete ' +
- cls.image_id
+ self.image_id
)
finally:
- super(ImageTests, cls).tearDownClass()
-
- def setUp(self):
- super(ImageTests, self).setUp()
- ver_fixture = fixtures.EnvironmentVariable(
- 'OS_IMAGE_API_VERSION', '2'
- )
- self.useFixture(ver_fixture)
+ super(ImageTests, self).tearDown()
def test_image_list(self):
json_output = json.loads(self.openstack(
'image list -f json '
))
self.assertIn(
- self.NAME,
+ self.name,
[img['Name'] for img in json_output]
)
def test_image_list_with_name_filter(self):
json_output = json.loads(self.openstack(
- 'image list --name ' + self.NAME + ' -f json'
+ 'image list --name ' + self.name + ' -f json'
))
self.assertIn(
- self.NAME,
+ self.name,
[img['Name'] for img in json_output]
)
@@ -101,11 +96,11 @@ class ImageTests(base.TestCase):
'--min-disk 4 ' +
'--min-ram 5 ' +
'--public ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
self.assertEqual(
4,
@@ -126,31 +121,31 @@ class ImageTests(base.TestCase):
'--property a=b ' +
'--property c=d ' +
'--public ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
- self.assertEqual(
- "a='b', c='d'",
- json_output["properties"],
- )
+ # NOTE(dtroyer): Don't do a full-string compare so we are tolerant of
+ # new artributes in the returned data
+ self.assertIn("a='b'", json_output["properties"])
+ self.assertIn("c='d'", json_output["properties"])
self.openstack(
'image unset ' +
'--property a ' +
'--property c ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
- self.assertNotIn(
- 'properties',
- json_output,
- )
+ # NOTE(dtroyer): Don't do a full-string compare so we are tolerant of
+ # new artributes in the returned data
+ self.assertNotIn("a='b'", json_output["properties"])
+ self.assertNotIn("c='d'", json_output["properties"])
# Test tags
self.assertNotIn(
@@ -160,11 +155,11 @@ class ImageTests(base.TestCase):
self.openstack(
'image set ' +
'--tag 01 ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
self.assertIn(
'01',
@@ -174,11 +169,11 @@ class ImageTests(base.TestCase):
self.openstack(
'image unset ' +
'--tag 01 ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
self.assertNotIn(
'01',
@@ -222,7 +217,7 @@ class ImageTests(base.TestCase):
json_output = json.loads(self.openstack(
'image show -f json ' +
- self.NAME
+ self.name
))
# NOTE(dtroyer): Until OSC supports --shared flags in create and set
# we can not properly test membership. Sometimes the
@@ -230,47 +225,47 @@ class ImageTests(base.TestCase):
if json_output["visibility"] == 'shared':
self.openstack(
'image add project ' +
- self.NAME + ' ' +
+ self.name + ' ' +
my_project_id
)
# self.addCleanup(
# self.openstack,
# 'image remove project ' +
- # self.NAME + ' ' +
+ # self.name + ' ' +
# my_project_id
# )
self.openstack(
'image set ' +
'--accept ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image list -f json ' +
'--shared'
))
self.assertIn(
- self.NAME,
+ self.name,
[img['Name'] for img in json_output]
)
self.openstack(
'image set ' +
'--reject ' +
- self.NAME
+ self.name
)
json_output = json.loads(self.openstack(
'image list -f json ' +
'--shared'
))
# self.assertNotIn(
- # self.NAME,
+ # self.name,
# [img['Name'] for img in json_output]
# )
self.openstack(
'image remove project ' +
- self.NAME + ' ' +
+ self.name + ' ' +
my_project_id
)
@@ -280,11 +275,11 @@ class ImageTests(base.TestCase):
# image_exceptions.HTTPForbidden,
# self.openstack,
# 'image add project ' +
- # self.NAME + ' ' +
+ # self.name + ' ' +
# my_project_id
# )
# self.openstack(
# 'image set ' +
# '--share ' +
- # self.NAME
+ # self.name
# )