# 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)