Port test_metadata to Python 3

* convert_password(): on Python 3, decode password from UTF-8 if it
  is a byte string
* convert_password(): don't modify password in the loop body, use an
  index increased at each iteration. This is a minor cleanup,
  unrelated to Python 3.
* ec2_md_print() now returns byte strings unchanged. On Python 3,
  str(bytes) uses "b'...'" format which is not the expected result
  (or it raises a BytesWarinng exception when using python3 -bb).
* Replace the base64 module with oslo_serialization.base64 to control
  the output type (bytes or text) on Python 2 and Python 3.
* _make_cache_key(): on Python 3, don't encode the host to UTF-8.
  Python 3 requires text.
* MetadataRequestHandler: on Python 3, encode HTTP body to UTF-8 if
  the body type is Unicode.
* test_metadata:

  - encode hmac.new() parameters using encodeutils.to_utf8()
  - use response.text rather than response.body to compare with
    Unicode string
  - use a byte strings for the instance identifier
  - fix some Unicode versus bytes issues

* tests-py3.txt: run test_metadata on Python 3

Co-Authored-By: Davanum Srinivas <davanum@gmail.com>
Co-Authored-By: ChangBo Guo(gcb) <eric.guo@easystack.cn>
Partially-Implements: blueprint goal-python35

Change-Id: Ifb43ce164d9fd80f9f85c95c762d7b010e84dfeb
This commit is contained in:
Victor Stinner
2016-06-22 11:24:27 +02:00
committed by ChangBo Guo(gcb)
parent 00b359ce14
commit 67af1eefc5
7 changed files with 65 additions and 56 deletions

View File

@@ -16,9 +16,11 @@
"""Availability zone helper functions."""
import collections
import nova.conf
import six
from nova import cache_utils
import nova.conf
from nova import objects
# NOTE(vish): azs don't change that often, so cache them for an hour to
@@ -49,7 +51,9 @@ def reset_cache():
def _make_cache_key(host):
return "azcache-%s" % host.encode('utf-8')
if six.PY2:
host = host.encode('utf-8')
return "azcache-%s" % host
def _build_metadata_by_host(aggregates, hosts=None):