python-glanceclient/glanceclient/tests/functional
ckonstanski 03900522d4 v2: Content-Type: application/octet-stream header always added
The bug: any existing Content-Type header cannot be found because the
call to headers.get() fails. Therefore we end up with two Content-Type
headers because a new one (applicaion/octet-stream) gets added
unconditionally. The cause: the strings (keys and values) in the headers
dict are converted from unicode sequences of type <str> to utf-8
sequences of type <bytes>. This happens in safe_encode()
(oslo_utils/encodeutils.py:66). <str> != <bytes> even if they appear to
have the same characters.

Hence, for python 3.x, _set_common_request_kwargs() adds content-type
to header even if custom content-type is set in the request.

This results in unsupported media type exception when glance client
is used with keystoneauth and python 3.x

The fix: follow the directions in encode_headers().
It says to do this just before sending the request. Honor this principle;
do not encode headers and then perform more business logic on them.

Change-Id: Idf6079b32f70bc171f5016467048e917d42f296d
Closes-bug: #1641239
Co-Authored-By: Pushkar Umaranikar <pushkar.umaranikar@intel.com>
2017-05-19 19:02:00 +00:00
..
hooks Use clouds.yaml from devstack for functional tests 2015-10-21 05:43:26 +09:00
README.rst Fix warnings in glanceclient README 2016-02-01 13:15:01 +03:00
__init__.py Create functional test base 2015-04-18 17:43:01 +00:00
base.py v2: Content-Type: application/octet-stream header always added 2017-05-19 19:02:00 +00:00
test_http_headers.py v2: Content-Type: application/octet-stream header always added 2017-05-19 19:02:00 +00:00
test_readonly_glance.py Replace tempest_lib with tempest.lib 2016-06-27 17:26:02 +08:00

README.rst

python-glanceclient functional testing

Idea

Run real client/server requests in the gate to catch issues which are difficult to catch with a purely unit test approach.

Many projects (nova, keystone...) already have this form of testing in the gate.

Testing Theory

Since python-glanceclient has two uses, CLI and python API, we should have two sets of functional tests. CLI and python API. The python API tests should never use the CLI. But the CLI tests can use the python API where adding native support to the CLI for the required functionality would involve a non trivial amount of work.

Functional Test Guidelines

The functional tests require:

  1. A working Glance/Keystone installation (eg devstack)
  2. A yaml file containing valid credentials

If you are using devstack a yaml file will have been created for you.

If you are not using devstack you should create a yaml file with the following format:

clouds:
devstack-admin:
auth:

auth_url: http://10.0.0.1:35357/v2.0

password: example

project_name: admin

username: admin

identity_api_version: '2.0'

region_name: RegionOne

and copy it to ~/.config/openstack/clouds.yaml