Port last test (test_secrets) to Python 3

* normalize_before_encryption(): on Python 3, unencrypted is already a Unicode
  string (no need to decode).
* test_secrets: don't pass bytes string but native string (py2: bytes,
  py3: Unicode) as payload
* test_secrets: Decode HTTP bytes from UTF-8 for comparison
* test_get_secret_is_decoded_for_binary(): expect a binary string,
  not a Unicode string
* test_secrets: replace map() with a reglar loop (for) to execute
  child.delete() on Python 3. On Python 3, map() is now lazy and only
  execute the expression when the map is consumed.
* Remove tests-py3-blacklist.txt and the testenv:py34 section from
  tox.ini since all unit tests now pass on Python 3.4

Partially implements: blueprint barbican-py3
Change-Id: Ief8531c3b7201f884d5d4ca7a47a381d0bb9cb2c
This commit is contained in:
Victor Stinner 2016-06-14 12:21:47 +02:00
parent b113f6364f
commit c5012af5f2
5 changed files with 23 additions and 26 deletions

View File

@ -14,6 +14,7 @@
from Crypto.PublicKey import RSA
from OpenSSL import crypto
from oslo_serialization import base64
import six
from barbican import i18n as u # noqa
from barbican.plugin.interface import secret_store as s
@ -47,8 +48,11 @@ def normalize_before_encryption(unencrypted, content_type, content_encoding,
# Process plain-text type.
if normalized_media_type in mime_types.PLAIN_TEXT:
# normalize text to binary and then base64 encode it
unencrypted_bytes = unencrypted.encode('utf-8')
b64payload = base64.encode_as_bytes(unencrypted_bytes)
if six.PY3:
b64payload = base64.encode_as_bytes(unencrypted)
else:
unencrypted_bytes = unencrypted.encode('utf-8')
b64payload = base64.encode_as_bytes(unencrypted_bytes)
# Process binary type.
else:

View File

@ -34,7 +34,7 @@ class WhenTestingSecretsResource(utils.BarbicanAPIBaseTestCase):
def test_can_create_new_secret_one_step(self):
resp, secret_uuid = create_secret(
self.app,
payload=b'not-encrypted',
payload='not-encrypted',
content_type='text/plain'
)
@ -63,7 +63,7 @@ class WhenTestingSecretsResource(utils.BarbicanAPIBaseTestCase):
self.assertIsNotNone(project)
def test_can_create_new_secret_with_payload_just_under_max(self):
large_payload = b'A' * (validators.DEFAULT_MAX_SECRET_BYTES - 8)
large_payload = 'A' * (validators.DEFAULT_MAX_SECRET_BYTES - 8)
resp, _ = create_secret(
self.app,
payload=large_payload,
@ -73,7 +73,7 @@ class WhenTestingSecretsResource(utils.BarbicanAPIBaseTestCase):
self.assertEqual(201, resp.status_int)
def test_creating_new_secret_with_oversized_payload_should_fail(self):
oversized_payload = b'A' * (validators.DEFAULT_MAX_SECRET_BYTES + 10)
oversized_payload = 'A' * (validators.DEFAULT_MAX_SECRET_BYTES + 10)
resp, _ = create_secret(
self.app,
payload=oversized_payload,
@ -140,7 +140,7 @@ class WhenTestingSecretsResource(utils.BarbicanAPIBaseTestCase):
# Create a normal secret with the TransportKey
resp, secret_uuid = create_secret(
self.app,
payload=b'not-encrypted',
payload='not-encrypted',
content_type='text/plain',
transport_key_id=transport_key_id
)
@ -160,7 +160,7 @@ class WhenTestingSecretsResource(utils.BarbicanAPIBaseTestCase):
def test_new_secret_fails_with_invalid_transport_key_ref(self):
resp, _ = create_secret(
self.app,
payload=b'superdupersecret',
payload='superdupersecret',
content_type='text/plain',
transport_key_id="non_existing_transport_key_id",
transport_key_needed="true",
@ -171,7 +171,7 @@ class WhenTestingSecretsResource(utils.BarbicanAPIBaseTestCase):
def test_new_secret_w_unsupported_content_type_should_fail(self):
resp, _ = create_secret(
self.app,
payload=b'something_here',
payload='something_here',
content_type='bogus_content_type',
expect_errors=True
)
@ -186,7 +186,7 @@ class WhenTestingSecretsResource(utils.BarbicanAPIBaseTestCase):
content_type=None):
resp, _ = create_secret(
self.app,
payload=b'lOtfqHaUUpe6NqLABgquYQ==',
payload='lOtfqHaUUpe6NqLABgquYQ==',
content_type=content_type,
content_encoding=encoding,
expect_errors=True
@ -289,7 +289,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
'/secrets/{0}'.format(secret_uuid), headers=headers
)
self.assertEqual(200, get_resp.status_int)
self.assertEqual(payload, get_resp.body)
self.assertEqual(payload, get_resp.body.decode('utf-8'))
def test_get_secret_payload_with_pecan_default_accept_header(self):
payload = 'a very interesting string'
@ -306,7 +306,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
'/secrets/{0}/payload'.format(secret_uuid), headers=headers
)
self.assertEqual(200, get_resp.status_int)
self.assertEqual(payload, get_resp.body)
self.assertEqual(payload, get_resp.body.decode('utf-8'))
def test_get_secret_payload_with_blank_accept_header(self):
payload = 'a very interesting string'
@ -323,7 +323,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
'/secrets/{0}/payload'.format(secret_uuid), headers=headers
)
self.assertEqual(200, get_resp.status_int)
self.assertEqual(payload, get_resp.body)
self.assertEqual(payload, get_resp.body.decode('utf-8'))
def test_get_secret_payload_with_no_accept_header(self):
payload = 'a very interesting string'
@ -340,7 +340,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
'/secrets/{0}/payload'.format(secret_uuid), headers=headers
)
self.assertEqual(200, get_resp.status_int)
self.assertEqual(payload, get_resp.body)
self.assertEqual(payload, get_resp.body.decode('utf-8'))
def test_get_secret_is_decoded_for_binary(self):
payload = 'a123'
@ -356,7 +356,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
get_resp = self.app.get(
'/secrets/{0}'.format(secret_uuid), headers=headers
)
decoded = 'k]\xb7'
decoded = b'k]\xb7'
self.assertEqual(decoded, get_resp.body)
@ -428,7 +428,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
)
self.assertEqual(200, get_resp.status_int)
self.assertEqual(message, get_resp.body)
self.assertEqual(message, get_resp.body.decode('utf-8'))
def test_put_binary_secret(self):
resp, secret_uuid = create_secret(
@ -461,7 +461,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
self.assertEqual(201, resp.status_int)
payload = base64.b64encode('I had something for this')
payload = base64.b64encode(b'I had something for this')
put_resp = self.app.put(
'/secrets/{0}'.format(secret_uuid),
payload,
@ -491,7 +491,7 @@ class WhenGettingPuttingOrDeletingSecret(utils.BarbicanAPIBaseTestCase):
self.assertEqual(201, resp.status_int)
payload = base64.b64encode('I had something for this')
payload = base64.b64encode(b'I had something for this')
put_resp = self.app.put(
'/secrets/{0}'.format(secret_uuid),
payload,

View File

@ -336,7 +336,8 @@ class WhenTestingDBCleanUpCommand(utils.RepositoryTestCase):
self.assertFalse(_entry_exists(childless_project))
container.delete()
map(lambda child: child.delete(), project_children_list)
for child in project_children_list:
child.delete()
clean.cleanup_all()
clean.cleanup_unassociated_projects()
self.assertFalse(_entry_exists(project_with_children))

View File

@ -1,3 +0,0 @@
barbican.tests.api.controllers.test_containers
barbican.tests.api.controllers.test_secrets
barbican.tests.cmd.test_db_cleanup

View File

@ -25,11 +25,6 @@ commands =
[testenv:releasenotes]
commands = sphinx-build -a -E -W -d releasenotes/build/doctrees -b html releasenotes/source releasenotes/build/html
[testenv:py34]
commands =
/usr/bin/find . -type f -name "*.pyc" -delete
ostestr --blacklist_file=tests-py3-blacklist.txt
[testenv:pep8]
sitepackages = False
commands =