
Prepare for the Image API v1 to be removed from glance during Rocky by splitting the functional tests that hit v1 from the tests that hit v2. Introduce a new job that runs the functional-v1 tests against a devstack running glance stable/queens, and configure this job for both check and gate for the glanceclient. The v2 functional tests continue to be run for both check and gate against a devstack running glance master. Change-Id: Ifa98ada26a84e4cca3ea8c98173f61a6174cca27
62 lines
2.6 KiB
Python
62 lines
2.6 KiB
Python
# 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 glanceclient.tests.functional import base
|
|
import time
|
|
|
|
|
|
IMAGE = {"protected": False,
|
|
"disk_format": "qcow2",
|
|
"name": "glance_functional_test_image.img",
|
|
"visibility": "private",
|
|
"container_format": "bare"}
|
|
|
|
|
|
class HttpHeadersTest(base.ClientTestBase):
|
|
def test_encode_headers_python(self):
|
|
"""Test proper handling of Content-Type headers.
|
|
|
|
encode_headers() must be called as late as possible before a
|
|
request is sent. If this principle is violated, and if any
|
|
changes are made to the headers between encode_headers() and the
|
|
actual request (for instance a call to
|
|
_set_common_request_kwargs()), and if you're trying to set a
|
|
Content-Type that is not equal to application/octet-stream (the
|
|
default), it is entirely possible that you'll end up with two
|
|
Content-Type headers defined (yours plus
|
|
application/octet-stream). The request will go out the door with
|
|
only one of them chosen seemingly at random.
|
|
|
|
This test uses a call to update() because it sets a header such
|
|
as the following (this example may be subject to change):
|
|
Content-Type: application/openstack-images-v2.1-json-patch
|
|
|
|
This situation only occurs in python3. This test will never fail
|
|
in python2.
|
|
|
|
There is no test against the CLI because it swallows the error.
|
|
"""
|
|
# the failure is intermittent - try up to 6 times
|
|
for attempt in range(0, 6):
|
|
glanceclient = self.glance_pyclient()
|
|
image = glanceclient.find(IMAGE["name"])
|
|
if image:
|
|
glanceclient.glance.images.delete(image.id)
|
|
image = glanceclient.glance.images.create(name=IMAGE["name"])
|
|
self.assertTrue(image.status == "queued")
|
|
try:
|
|
image = glanceclient.glance.images.update(image.id,
|
|
disk_format="qcow2")
|
|
except Exception as e:
|
|
self.assertFalse("415 Unsupported Media Type" in e.details)
|
|
time.sleep(5)
|