Port API v1 unit tests to Python 3

* Replace len(MultiDict.keys()) with len(MultiDict). On Python 3,
  MultiDict.keys() now returns a generator which has no length.
* Replace json with jsonutils to fix Unicode vs bytes issues.
* Use a bytes strings for the HTTP body, not Unicode strings.
* Replace LOG.exception() with LOG.error() when the argument is a
  string, not an exception object.
* Only declare PackageException.__str__() on Python 2. The default
  implementation of __str__() is fine on Python 3. Moreover, the
  'message' attribute has been removed from Exception on Python 3.
* tox.ini: run the following API v1 unit tests on Python 3.4

  - test_actions
  - test_catalog
  - test_env_templates
  - test_environments
  - test_sessions

Blueprint: murano-python-3-support
Change-Id: I4c8bedef019495477ae668769595ac4abc1ac0f4
This commit is contained in:
Victor Stinner 2016-06-20 11:48:19 +02:00
parent b2eef6e31e
commit bcd838a38d
11 changed files with 148 additions and 129 deletions

View File

@ -100,7 +100,7 @@ def _validate_body(body):
'Uploading file is too large. '
'The limit is {0} Mb').format(mb_limit))
if len(body.keys()) > 2:
if len(body) > 2:
msg = _("'multipart/form-data' request body should contain 1 or 2 "
"parts: json string and zip archive. Current body consists "
"of {amount} part(s)").format(amount=len(body.keys()))

View File

@ -66,7 +66,7 @@ class Controller(object):
if not('name' in body and body['name'].strip()):
msg = _('Please, specify a name of the environment to create')
LOG.exception(msg)
LOG.error(msg)
raise exc.HTTPBadRequest(explanation=msg)
name = six.text_type(body['name'])

View File

@ -280,14 +280,14 @@ class Controller(object):
if not('name' in body and body['name'].strip()):
msg = _('Please, specify a name of the environment template.')
LOG.exception(msg)
LOG.error(msg)
raise exc.HTTPBadRequest(explanation=msg)
name = six.text_type(body['name'])
if len(name) > 255:
msg = _('Environment template name should be 255 characters '
'maximum')
LOG.exception(msg)
LOG.error(msg)
raise exc.HTTPBadRequest(explanation=msg)

View File

@ -538,8 +538,8 @@ class JSONDictSerializer(DictSerializer):
return _dtime.isoformat()
return six.text_type(obj)
if result:
data.body = jsonutils.dumps(result)
return jsonutils.dumps(data, default=sanitizer)
data.body = jsonutils.dump_as_bytes(result)
return jsonutils.dump_as_bytes(data, default=sanitizer)
class XMLDictSerializer(DictSerializer):

View File

@ -19,8 +19,9 @@ import murano.common.exceptions as e
class PackageException(e.Error):
def __str__(self):
return six.text_type(self.message).encode('UTF-8')
if six.PY2:
def __str__(self):
return six.text_type(self.message).encode('UTF-8')
class PackageClassLoadError(PackageException):

View File

@ -87,7 +87,7 @@ class TestActionsApi(tb.ControllerTest, tb.MuranoApiTestCase):
'id': '12345'
}
req = self._post('/environments/12345/actions/actionID_action', '{}')
req = self._post('/environments/12345/actions/actionID_action', b'{}')
result = self.controller.execute(req, '12345', 'actionsID_action',
'{}')

View File

@ -15,12 +15,13 @@
import cgi
import imghdr
import json
import os
import uuid
import mock
from oslo_serialization import jsonutils
from oslo_utils import timeutils
import six
from six.moves import cStringIO
from six.moves import range
@ -427,7 +428,7 @@ class TestCatalogApi(test_base.ControllerTest, test_base.MuranoApiTestCase):
result = req.get_response(self.api)
self.assertEqual(406, result.status_code)
self.assertTrue('Acceptable response can not be provided'
self.assertTrue(b'Acceptable response can not be provided'
in result.body)
def test_get_ui_definition(self):
@ -461,7 +462,7 @@ class TestCatalogApi(test_base.ControllerTest, test_base.MuranoApiTestCase):
result = req.get_response(self.api)
self.assertEqual(406, result.status_code)
self.assertTrue('Acceptable response can not be provided'
self.assertTrue(b'Acceptable response can not be provided'
in result.body)
def test_get_logo(self):
@ -496,7 +497,7 @@ class TestCatalogApi(test_base.ControllerTest, test_base.MuranoApiTestCase):
result = req.get_response(self.api)
self.assertEqual(406, result.status_code)
self.assertTrue('Acceptable response can not be provided'
self.assertTrue(b'Acceptable response can not be provided'
in result.body)
def test_add_public_unauthorized(self):
@ -518,7 +519,7 @@ class TestCatalogApi(test_base.ControllerTest, test_base.MuranoApiTestCase):
file_obj.file = file_obj_str
package_from_dir, _ = self._test_package()
body = '''\
body_fmt = '''\
--BOUNDARY
Content-Disposition: form-data; name="__metadata__"
@ -530,6 +531,13 @@ Content-Disposition: form-data; name="ziparchive"; filename="file.zip"
This is a fake zip archive
--BOUNDARY--'''
def format_body(content):
content = jsonutils.dumps(content)
body = body_fmt.format(content)
if six.PY3:
body = body.encode('utf-8')
return body
with mock.patch('murano.packages.load_utils.load_from_file') as lff:
ctxmgr = mock.Mock()
ctxmgr.__enter__ = mock.Mock(return_value=package_from_dir)
@ -539,14 +547,14 @@ This is a fake zip archive
# Uploading a non-public package
req = self._post(
'/catalog/packages',
body.format(json.dumps({'is_public': False})),
format_body({'is_public': False}),
content_type='multipart/form-data; ; boundary=BOUNDARY',
)
res = req.get_response(self.api)
self.assertEqual(200, res.status_code)
self.is_admin = True
app_id = json.loads(res.body)['id']
app_id = jsonutils.loads(res.body)['id']
req = self._delete('/catalog/packages/{0}'.format(app_id))
res = req.get_response(self.api)
@ -554,7 +562,7 @@ This is a fake zip archive
# Uploading a public package fails
req = self._post(
'/catalog/packages',
body.format(json.dumps({'is_public': True})),
format_body({'is_public': True}),
content_type='multipart/form-data; ; boundary=BOUNDARY',
)
res = req.get_response(self.api)
@ -564,7 +572,7 @@ This is a fake zip archive
self.is_admin = True
req = self._post(
'/catalog/packages',
body.format(json.dumps({'is_public': True})),
format_body({'is_public': True}),
content_type='multipart/form-data; ; boundary=BOUNDARY',
)
res = req.get_response(self.api)
@ -587,9 +595,9 @@ This is a fake zip archive
}
body = {'name': 'new_category'}
req = self._post('/catalog/categories', json.dumps(body))
req = self._post('/catalog/categories', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
processed_result = json.loads(result.body)
processed_result = jsonutils.loads(result.body)
self.assertIn('id', processed_result.keys())
expected['id'] = processed_result['id']
self.assertDictEqual(expected, processed_result)
@ -612,7 +620,7 @@ This is a fake zip archive
req = self._delete('/catalog/categories/12345')
processed_result = req.get_response(self.api)
self.assertEqual('', processed_result.body)
self.assertEqual(b'', processed_result.body)
self.assertEqual(200, processed_result.status_code)
def test_add_category_failed_for_non_admin(self):
@ -626,7 +634,7 @@ This is a fake zip archive
timeutils.utcnow.override_time = fake_now
body = {'name': 'new_category'}
req = self._post('/catalog/categories', json.dumps(body))
req = self._post('/catalog/categories', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(403, result.status_code)
@ -644,7 +652,7 @@ This is a fake zip archive
timeutils.utcnow.override_time = fake_now
body = {'name': 'cat' * 80}
req = self._post('/catalog/categories', json.dumps(body))
req = self._post('/catalog/categories', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
result_message = result.text.replace('\n', '')
@ -662,7 +670,7 @@ This is a fake zip archive
req = self._get('/catalog/categories')
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
result_categories = json.loads(result.body)['categories']
result_categories = jsonutils.loads(result.body)['categories']
self.assertEqual(2, len(result_categories))
self.assertEqual(names, [c['name'] for c in result_categories])
@ -671,7 +679,7 @@ This is a fake zip archive
self.expect_policy_check('get_category')
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
result_categories = json.loads(result.body)['categories']
result_categories = jsonutils.loads(result.body)['categories']
self.assertEqual(names, [c['name'] for c in result_categories])
names.reverse()
@ -681,7 +689,7 @@ This is a fake zip archive
self.expect_policy_check('get_category')
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
result_categories = json.loads(result.body)['categories']
result_categories = jsonutils.loads(result.body)['categories']
self.assertEqual(names, [c['name'] for c in result_categories])
def test_list_category_negative(self):

View File

@ -13,9 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import json
from oslo_config import fixture as config_fixture
from oslo_serialization import jsonutils
from oslo_utils import timeutils
from murano.api.v1 import templates
@ -41,7 +40,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
req = self._get('/templates')
result = req.get_response(self.api)
self.assertEqual({'templates': []}, json.loads(result.body))
self.assertEqual({'templates': []}, jsonutils.loads(result.body))
def test_create_env_templates(self):
"""Create an template, test template.show()."""
@ -64,10 +63,10 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
'updated': timeutils.isotime(fake_now)[:-1]}
body = {'name': 'mytemp'}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
# Reset the policy expectation
self.expect_policy_check('list_env_templates')
@ -75,7 +74,8 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
req = self._get('/templates')
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual({'templates': [expected]}, json.loads(result.body))
self.assertEqual({'templates': [expected]},
jsonutils.loads(result.body))
expected['services'] = []
@ -83,7 +83,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
{'env_template_id': self.uuids[0]})
req = self._get('/templates/%s' % self.uuids[0])
result = req.get_response(self.api)
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
def test_list_public_env_templates(self):
"""Create an template, test templates.public()."""
@ -95,16 +95,17 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp2', 'is_public': True}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertTrue(json.loads(result.body)['is_public'])
self.assertTrue(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('list_env_templates')
req = self._get('/templates', {'is_public': True})
result = req.get_response(self.api)
self.assertEqual(1, len(json.loads(result.body)))
self.assertTrue(json.loads(result.body)['templates'][0]['is_public'])
data = jsonutils.loads(result.body)
self.assertEqual(1, len(data))
self.assertTrue(data['templates'][0]['is_public'])
def test_clone_env_templates(self):
"""Create an template, test templates.public()."""
@ -115,18 +116,18 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp2', 'is_public': True}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
env_template_id = json.loads(result.body)['id']
self.assertTrue(json.loads(result.body)['is_public'])
env_template_id = jsonutils.loads(result.body)['id']
self.assertTrue(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('clone_env_template')
body = {'name': 'clone', 'is_public': False}
req = self._post('/templates/%s/clone' % env_template_id,
json.dumps(body))
jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertFalse(json.loads(result.body)['is_public'])
self.assertEqual('clone', json.loads(result.body)['name'])
self.assertFalse(jsonutils.loads(result.body)['is_public'])
self.assertEqual('clone', jsonutils.loads(result.body)['name'])
def test_clone_env_templates_private(self):
"""Create an template, test templates.public()."""
@ -137,15 +138,15 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp2', 'is_public': False}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
env_template_id = json.loads(result.body)['id']
self.assertFalse(json.loads(result.body)['is_public'])
env_template_id = jsonutils.loads(result.body)['id']
self.assertFalse(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('clone_env_template')
body = {'name': 'clone', 'is_public': False}
req = self._post('/templates/%s/clone' % env_template_id,
json.dumps(body))
jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(result.status_code, 403)
@ -162,15 +163,15 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp'}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertFalse(json.loads(result.body)['is_public'])
self.assertFalse(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('list_env_templates')
req = self._get('/templates', {'is_public': True})
result = req.get_response(self.api)
self.assertFalse(0, len(json.loads(result.body)))
self.assertFalse(0, len(jsonutils.loads(result.body)))
def test_list_private_env_templates(self):
"""Test listing private templates
@ -185,20 +186,20 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp', 'is_public': False}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertFalse(json.loads(result.body)['is_public'])
self.assertFalse(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp1', 'is_public': True}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertTrue(json.loads(result.body)['is_public'])
self.assertTrue(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('list_env_templates')
req = self._get('/templates', {'is_public': False})
result = req.get_response(self.api)
self.assertEqual(1, len(json.loads(result.body)['templates']))
self.assertEqual(1, len(jsonutils.loads(result.body)['templates']))
def test_list_env_templates(self):
"""Test listing public templates when there aren't any
@ -213,21 +214,21 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp', 'is_public': False}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertFalse(json.loads(result.body)['is_public'])
self.assertFalse(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp1', 'is_public': True}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertTrue(json.loads(result.body)['is_public'])
self.assertTrue(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('list_env_templates')
req = self._get('/templates')
result = req.get_response(self.api)
self.assertEqual(2, len(json.loads(result.body)['templates']))
self.assertEqual(2, len(jsonutils.loads(result.body)['templates']))
def test_list_env_templates_with_different_tenant(self):
"""Test listing public template from another tenant
@ -242,22 +243,23 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp', 'is_public': False}
req = self._post('/templates', json.dumps(body), tenant='first_tenant')
req = self._post('/templates', jsonutils.dump_as_bytes(body),
tenant='first_tenant')
result = req.get_response(self.api)
self.assertFalse(json.loads(result.body)['is_public'])
self.assertFalse(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('create_env_template')
body = {'name': 'mytemp1', 'is_public': True}
req = self._post('/templates', json.dumps(body),
req = self._post('/templates', jsonutils.dump_as_bytes(body),
tenant='second_tenant')
result = req.get_response(self.api)
self.assertTrue(json.loads(result.body)['is_public'])
self.assertTrue(jsonutils.loads(result.body)['is_public'])
self.expect_policy_check('list_env_templates')
req = self._get('/templates', tenant='first_tenant')
result = req.get_response(self.api)
self.assertEqual(2, len(json.loads(result.body)['templates']))
self.assertEqual(2, len(jsonutils.loads(result.body)['templates']))
def test_illegal_template_name_create(self):
"""Check that an illegal temp name results in an HTTPClientError."""
@ -269,7 +271,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': ' '}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
@ -283,7 +285,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'name': 'a' * 256}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
result_msg = result.text.replace('\n', '')
@ -299,7 +301,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_env_template')
body = {'invalid': 'test'}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
@ -354,7 +356,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
body = {
'name': 'renamed_temp'
}
req = self._put('/templates/12345', json.dumps(body))
req = self._put('/templates/12345', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
@ -367,7 +369,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
expected['created'] = timeutils.isotime(expected['created'])[:-1]
expected['updated'] = timeutils.isotime(expected['updated'])[:-1]
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
def test_delete_env_templates(self):
"""Test that environment deletion results in the correct rpc call."""
@ -398,7 +400,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
result = req.get_response(self.api)
# Should this be expected behavior?
self.assertEqual('', result.body)
self.assertEqual(b'', result.body)
self.assertEqual(200, result.status_code)
def test_create_env_templates_with_applications(self):
@ -466,9 +468,9 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
]
}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
# Reset the policy expectation
self.expect_policy_check('list_env_templates')
@ -477,7 +479,8 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
result = req.get_response(self.api)
del expected['services']
self.assertEqual(200, result.status_code)
self.assertEqual({'templates': [expected]}, json.loads(result.body))
self.assertEqual({'templates': [expected]},
jsonutils.loads(result.body))
# Reset the policy expectation
self.expect_policy_check('show_env_template',
@ -485,7 +488,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
expected['services'] = services
req = self._get('/templates/%s' % self.uuids[0])
result = req.get_response(self.api)
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
def test_add_application_to_template(self):
"""Create an template, test template.show()."""
@ -522,21 +525,21 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
"name": "template_name",
}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
body = services
req = self._post('/templates/%s/services' % self.uuids[0],
json.dumps(body))
jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual(services, json.loads(result.body))
self.assertEqual(services, jsonutils.loads(result.body))
req = self._get('/templates/%s/services' % self.uuids[0])
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual(1, len(json.loads(result.body)))
self.assertEqual(1, len(jsonutils.loads(result.body)))
service_no_instance = [
{
@ -551,14 +554,14 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
]
req = self._post('/templates/%s/services' % self.uuids[0],
json.dumps(service_no_instance))
jsonutils.dump_as_bytes(service_no_instance))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
req = self._get('/templates/%s/services' % self.uuids[0])
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual(2, len(json.loads(result.body)))
self.assertEqual(2, len(jsonutils.loads(result.body)))
def test_delete_application_in_template(self):
"""Create an template, test template.show()."""
@ -585,15 +588,15 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
]
}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual(1, len(json.loads(result.body)['services']))
self.assertEqual(1, len(jsonutils.loads(result.body)['services']))
req = self._get('/templates/%s/services' % self.uuids[0])
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual(1, len(json.loads(result.body)))
self.assertEqual(1, len(jsonutils.loads(result.body)))
service_id = '54cea43d-5970-4c73-b9ac-fea656f3c722'
req = self._get('/templates/' + self.uuids[0] +
@ -606,7 +609,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual(0, len(json.loads(result.body)['services']))
self.assertEqual(0, len(jsonutils.loads(result.body)['services']))
req = self._get('/templates/' + self.uuids[0] +
'/services/' + service_id)
@ -630,11 +633,11 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_environment',
{'env_template_id': self.uuids[0]})
req = self._post('/templates/%s/create-environment' %
self.uuids[0], json.dumps(body_env))
self.uuids[0], jsonutils.dump_as_bytes(body_env))
session_result = req.get_response(self.api)
self.assertEqual(200, session_result.status_code)
self.assertIsNotNone(session_result)
body_returned = json.loads(session_result.body)
body_returned = jsonutils.loads(session_result.body)
self.assertEqual(self.uuids[4], body_returned['session_id'])
self.assertEqual(self.uuids[3], body_returned['environment_id'])
@ -657,11 +660,11 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
body = {'name': 'my_template'}
req = self._post('/templates/%s/create-environment' %
self.uuids[0], json.dumps(body))
self.uuids[0], jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertIsNotNone(result)
self.assertEqual(200, result.status_code)
body_returned = json.loads(result.body)
body_returned = jsonutils.loads(result.body)
self.assertEqual(self.uuids[4], body_returned['session_id'])
self.assertEqual(self.uuids[3], body_returned['environment_id'])
@ -677,7 +680,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
{'env_template_id': self.uuids[0]})
body = {'invalid': 'test'}
req = self._post('/templates/%s/create-environment' %
self.uuids[0], json.dumps(body))
self.uuids[0], jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
@ -706,10 +709,10 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
]
}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual(1, len(json.loads(result.body)['services']))
self.assertEqual(1, len(jsonutils.loads(result.body)['services']))
req = self._delete('/templates/{0}/services/{1}'.format(self.uuids[0],
"NO_EXIST"))
@ -727,7 +730,7 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
body = {'name': 'test'}
req = self._post('/templates/%s/create-environment'
% env_template_id, json.dumps(body))
% env_template_id, jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(404, result.status_code)
@ -736,7 +739,8 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
fake_now = timeutils.utcnow()
timeutils.utcnow.override_time = fake_now
req = self._post('/templates', json.dumps({'name': 'name'}))
req = self._post('/templates',
jsonutils.dump_as_bytes({'name': 'name'}))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
@ -772,5 +776,5 @@ class TestEnvTemplateApi(tb.ControllerTest, tb.MuranoApiTestCase):
]
}
req = self._post('/templates', json.dumps(body))
req = self._post('/templates', jsonutils.dump_as_bytes(body))
req.get_response(self.api)

View File

@ -14,9 +14,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import json
from oslo_config import fixture as config_fixture
from oslo_serialization import jsonutils
from oslo_utils import timeutils
from murano.api.v1 import environments
@ -42,7 +41,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
req = self._get('/environments')
result = req.get_response(self.api)
self.assertEqual({'environments': []}, json.loads(result.body))
self.assertEqual({'environments': []}, jsonutils.loads(result.body))
def test_list_all_tenants(self):
"""Check whether all_tenants param is taken into account."""
@ -55,7 +54,8 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_environment')
body = {'name': 'my_env'}
req = self._post('/environments', json.dumps(body), tenant="other")
req = self._post('/environments', jsonutils.dump_as_bytes(body),
tenant="other")
req.get_response(self.api)
self._check_listing(False, 'list_environments', 0)
@ -65,7 +65,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check(expected_check)
req = self._get('/environments', {'all_tenants': all_tenants})
response = req.get_response(self.api)
body = json.loads(response.body)
body = jsonutils.loads(response.body)
self.assertEqual(200, response.status_code)
self.assertEqual(expected_count, len(body['environments']))
@ -93,9 +93,9 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
}
body = {'name': 'my_env'}
req = self._post('/environments', json.dumps(body))
req = self._post('/environments', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
expected['status'] = 'ready'
@ -105,7 +105,8 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
req = self._get('/environments')
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
self.assertEqual({'environments': [expected]}, json.loads(result.body))
self.assertEqual({'environments': [expected]},
jsonutils.loads(result.body))
expected['services'] = []
expected['acquired_by'] = None
@ -117,7 +118,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
req = self._get('/environments/%s' % uuids[-1])
result = req.get_response(self.api)
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
self.assertEqual(3, mock_uuid.call_count)
def test_illegal_environment_name_create(self):
@ -130,7 +131,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_environment')
body = {'name': ' '}
req = self._post('/environments', json.dumps(body))
req = self._post('/environments', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
@ -144,7 +145,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_environment')
body = {'name': u'$yaql \u2665 unicode'}
req = self._post('/environments', json.dumps(body))
req = self._post('/environments', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
@ -158,7 +159,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_environment')
body = {'no_name': 'fake'}
req = self._post('/environments', json.dumps(body))
req = self._post('/environments', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
result_msg = result.text.replace('\n', '')
@ -175,7 +176,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
self.expect_policy_check('create_environment')
body = {'name': 'a' * 256}
req = self._post('/environments', json.dumps(body))
req = self._post('/environments', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
result_msg = result.text.replace('\n', '')
@ -184,7 +185,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
def test_create_environment_with_empty_body(self):
"""Check that empty request body results in an HTTPBadResquest."""
body = ''
body = b''
req = self._post('/environments', body)
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
@ -244,7 +245,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
body = {
'name': 'renamed_env'
}
req = self._put('/environments/12345', json.dumps(body))
req = self._put('/environments/12345', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(200, result.status_code)
@ -258,7 +259,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
expected['updated'] = timeutils.isotime(expected['updated'])[:-1]
expected['acquired_by'] = None
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
def test_update_environment_with_invalid_name(self):
"""Test that invalid env name returns HTTPBadRequest
@ -278,7 +279,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
body = {
'name': ' '
}
req = self._put('/environments/111', json.dumps(body))
req = self._put('/environments/111', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
result_msg = result.text.replace('\n', '')
@ -300,7 +301,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
body = {
'name': 'env2'
}
req = self._put('/environments/111', json.dumps(body))
req = self._put('/environments/111', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(409, result.status_code)
@ -323,7 +324,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
body = {
'name': new_name
}
req = self._put('/environments/111', json.dumps(body))
req = self._put('/environments/111', jsonutils.dump_as_bytes(body))
result = req.get_response(self.api)
self.assertEqual(400, result.status_code)
result_msg = result.text.replace('\n', '')
@ -333,21 +334,21 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
def test_delete_environment(self):
"""Test that environment deletion results in the correct rpc call."""
result = self._test_delete_or_abandon(abandon=False)
self.assertEqual('', result.body)
self.assertEqual(b'', result.body)
self.assertEqual(200, result.status_code)
def test_abandon_environment(self):
"""Check that abandon feature works"""
result = self._test_delete_or_abandon(abandon=True)
self.assertEqual('', result.body)
self.assertEqual(b'', result.body)
self.assertEqual(200, result.status_code)
def test_abandon_environment_of_different_tenant(self):
"""Test abandon environment belongs to another tenant."""
result = self._test_delete_or_abandon(abandon=True, tenant='not_match')
self.assertEqual(403, result.status_code)
self.assertTrue(('User is not authorized to access these'
' tenant resources') in result.body)
self.assertTrue((b'User is not authorized to access these'
b' tenant resources') in result.body)
def test_get_last_status_of_different_tenant(self):
"""Test get last services status of env belongs to another tenant."""
@ -355,8 +356,8 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
req = self._get('/environments/111/lastStatus', tenant='not_match')
result = req.get_response(self.api)
self.assertEqual(403, result.status_code)
self.assertTrue(('User is not authorized to access these'
' tenant resources') in result.body)
self.assertTrue((b'User is not authorized to access these'
b' tenant resources') in result.body)
def test_get_environment(self):
"""Test GET request of an environment in ready status"""
@ -384,7 +385,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
'services': [],
'status': 'ready',
}
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
def test_get_environment_acquired(self):
"""Test GET request of an environment in deploying status"""
@ -430,7 +431,7 @@ class TestEnvironmentApi(tb.ControllerTest, tb.MuranoApiTestCase):
'services': [],
'status': states.EnvironmentStatus.DEPLOYING,
}
self.assertEqual(expected, json.loads(result.body))
self.assertEqual(expected, jsonutils.loads(result.body))
def _create_fake_environment(self, env_name='my-env', env_id='123'):
fake_now = timeutils.utcnow()

View File

@ -13,9 +13,8 @@
# See the License for the specific language governing permissions and
# limitations under the License.
import json
from oslo_config import fixture as config_fixture
from oslo_serialization import jsonutils
from murano.api.v1 import environments
from murano.api.v1 import sessions
@ -49,10 +48,11 @@ class TestSessionsApi(tb.ControllerTest, tb.MuranoApiTestCase):
# Create environment for user #1
request = self._post(
'/environments', json.dumps({'name': 'test_environment_1'}),
'/environments',
jsonutils.dump_as_bytes({'name': 'test_environment_1'}),
**CREDENTIALS_1
)
response_body = json.loads(request.get_response(self.api).body)
response_body = jsonutils.loads(request.get_response(self.api).body)
self.assertEqual(CREDENTIALS_1['tenant'],
response_body['tenant_id'])
@ -62,10 +62,10 @@ class TestSessionsApi(tb.ControllerTest, tb.MuranoApiTestCase):
request = self._post(
'/environments/{environment_id}/configure'
.format(environment_id=ENVIRONMENT_ID),
'',
b'',
**CREDENTIALS_1
)
response_body = json.loads(request.get_response(self.api).body)
response_body = jsonutils.loads(request.get_response(self.api).body)
SESSION_ID = response_body['id']
@ -75,7 +75,7 @@ class TestSessionsApi(tb.ControllerTest, tb.MuranoApiTestCase):
'/environments/{environment_id}/sessions/'
'{session_id}/deploy'
.format(environment_id=ENVIRONMENT_ID, session_id=SESSION_ID),
'',
b'',
**CREDENTIALS_2
)
response = request.get_response(self.api)

View File

@ -19,6 +19,11 @@ whitelist_externals = bash
commands = python -m testtools.run \
murano/tests/unit/api/middleware/test_ssl.py \
murano/tests/unit/api/v1/cloudfoundry/test_cfapi.py \
murano/tests/unit/api/v1/test_actions.py \
murano/tests/unit/api/v1/test_catalog.py \
murano/tests/unit/api/v1/test_env_templates.py \
murano/tests/unit/api/v1/test_environments.py \
murano/tests/unit/api/v1/test_sessions.py \
murano/tests/unit/cmd/test_engine_workers.py \
murano/tests/unit/common/helpers/test_token_sanitizer.py \
murano/tests/unit/common/test_is_different.py \