Skip to content

Commit

Permalink
Fixes to get all functional tests working on py35
Browse files Browse the repository at this point in the history
tests-functional-py3.txt:
* Remove all tests except snowman from blacklist
* snowman seems to be a gabbi problem under py35

nova/objects/resource_provider.py:
* Cannot compare None and integer under py35
* wrap keys() in a list before comparing to a list as
  keys() is an iterator

nova/virt/fake.py:
* list_instance_uuids should return a list, keys() returns
    an iterator.

nova/tests/functional/api_sample_tests/*.py:
* use response.text to compare with a string as response.context
  contains bytes under python3
* user_data should be strings not bytes, so convert them
  as necessary

nova/tests/functional/regressions/test_bug_1554631.py:
* cinder exceptions need the http code as the first parameter
  (not a string)
* use response.text to compare with a string as response.context
  contains bytes under python3

nova/tests/functional/test_servers.py:
* zlib.compress needs bytes

Change-Id: I73be94afbb02dac46467555a8469f222a69025da
  • Loading branch information
dims committed Jan 14, 2017
1 parent db203ff commit c78a86c
Show file tree
Hide file tree
Showing 26 changed files with 59 additions and 245 deletions.
6 changes: 4 additions & 2 deletions nova/objects/resource_provider.py
Original file line number Diff line number Diff line change
Expand Up @@ -155,7 +155,9 @@ def _update_inventory_for_provider(conn, rp, inv_list, to_update):
_ALLOC_TBL.c.resource_provider_id == rp.id,
_ALLOC_TBL.c.resource_class_id == rc_id))
allocations = conn.execute(allocation_query).first()
if allocations and allocations['usage'] > inv_record.capacity:
if (allocations
and allocations['usage'] is not None
and allocations['usage'] > inv_record.capacity):
exceeded.append((rp.uuid, rc_str))
upd_stmt = _INV_TBL.update().where(sa.and_(
_INV_TBL.c.resource_provider_id == rp.id,
Expand Down Expand Up @@ -342,7 +344,7 @@ def destroy(self):

def save(self):
updates = self.obj_get_changes()
if updates and updates.keys() != ['name']:
if updates and list(updates.keys()) != ['name']:
raise exception.ObjectActionError(
action='save',
reason='Immutable fields changed')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,4 +29,4 @@ def test_server_password(self):
'admin-password-change-password',
subs)
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)
Original file line number Diff line number Diff line change
Expand Up @@ -47,4 +47,4 @@ def test_snapshots_delete_assisted(self):
'{"volume_id":"521752a6-acf6-4b2d-bc7a-119f9148cd8c"}'
% snapshot_id)
self.assertEqual(204, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
Original file line number Diff line number Diff line change
Expand Up @@ -179,4 +179,4 @@ def test_delete_interfaces(self):
response = self._do_delete('servers/%s/os-interface/%s' %
(instance_uuid, port_id))
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
2 changes: 1 addition & 1 deletion nova/tests/functional/api_sample_tests/test_cloudpipe.py
Original file line number Diff line number Diff line change
Expand Up @@ -71,4 +71,4 @@ def test_cloud_pipe_update(self):
'cloud-pipe-update-req',
subs)
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ def test_restore(self):
response = self._do_post('servers/%s/action' % uuid,
'restore-post-req', {})
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_force_delete(self):
uuid = self._post_server()
Expand All @@ -39,4 +39,4 @@ def test_force_delete(self):
response = self._do_post('servers/%s/action' % uuid,
'force-delete-post-req', {})
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
2 changes: 1 addition & 1 deletion nova/tests/functional/api_sample_tests/test_evacuate.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def fake_check_instance_exists(self, context, instance):
# NOTE(gibi): no server_resp means we expect empty body as
# a response
self.assertEqual(expected_resp_code, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

@mock.patch('nova.conductor.manager.ComputeTaskManager.rebuild_instance')
def test_server_evacuate(self, rebuild_mock):
Expand Down
2 changes: 1 addition & 1 deletion nova/tests/functional/api_sample_tests/test_fixed_ips.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,7 @@ def test_fixed_ip_reserve(self):
response = self._do_post('os-fixed-ips/192.168.1.1/action',
'fixedip-post-req', {})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def _test_get_fixed_ip(self, **kwargs):
# Return data about the given fixed ip.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,4 @@ def test_flavor_extra_specs_delete(self):
self._flavor_extra_specs_create()
response = self._do_delete('flavors/1/os-extra_specs/key1')
self.assertEqual(200, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
Original file line number Diff line number Diff line change
Expand Up @@ -36,4 +36,4 @@ def test_create_delete_flavor(self):
self._create_flavor()
response = self._do_delete("flavors/10")
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
Original file line number Diff line number Diff line change
Expand Up @@ -95,4 +95,4 @@ def test_floating_ips_delete(self):
self.test_floating_ips_create()
response = self._do_delete('os-floating-ips/%d' % 1)
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)
4 changes: 2 additions & 2 deletions nova/tests/functional/api_sample_tests/test_networks.py
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ def test_network_add(self):
response = self._do_post("os-networks/add",
'network-add-req', {})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def test_network_delete(self):
response = self._do_delete('os-networks/always_delete')
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)
Original file line number Diff line number Diff line change
Expand Up @@ -37,25 +37,25 @@ def test_disassociate(self):
'network-disassociate-req',
{})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def test_disassociate_host(self):
response = self._do_post('os-networks/1/action',
'network-disassociate-host-req',
{})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def test_disassociate_project(self):
response = self._do_post('os-networks/1/action',
'network-disassociate-project-req',
{})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def test_associate_host(self):
response = self._do_post('os-networks/1/action',
'network-associate-host-req',
{"host": "testHost"})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)
4 changes: 2 additions & 2 deletions nova/tests/functional/api_sample_tests/test_quota_sets.py
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ def test_delete_quotas(self):
# Get api sample to delete quota.
response = self._do_delete('os-quota-sets/fake_tenant')
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_update_quotas_force(self):
# Get api sample to update quotas.
Expand All @@ -66,7 +66,7 @@ def test_show_quotas_for_user(self):
def test_delete_quotas_for_user(self):
response = self._do_delete('os-quota-sets/fake_tenant?user_id=1')
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_update_quotas_for_user(self):
# Get api sample to update quotas for user.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ def test_security_groups_add(self):
uuid = self._post_server()
response = self._add_group(uuid)
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_security_groups_remove(self):
self._create_security_group()
Expand All @@ -138,4 +138,4 @@ def test_security_groups_remove(self):
response = self._do_post('servers/%s/action' % uuid,
'security-group-remove-post-req', subs)
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,4 @@ def test_metadata_delete(self):
uuid = self._create_and_set(subs)
response = self._do_delete('servers/%s/metadata/foo' % uuid)
self.assertEqual(204, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
11 changes: 7 additions & 4 deletions nova/tests/functional/api_sample_tests/test_server_tags.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,8 @@
# License for the specific language governing permissions and limitations
# under the License.

import six

from nova.db.sqlalchemy import models
from nova.tests.functional.api_sample_tests import test_servers

Expand Down Expand Up @@ -37,7 +39,8 @@ def _get_show_subs(self):
subs['instance_name'] = 'instance-\d{8}'
subs['hypervisor_hostname'] = r'[\w\.\-]+'
subs['cdrive'] = '.*'
subs['user_data'] = self.user_data
subs['user_data'] = (self.user_data if six.PY2
else self.user_data.decode('utf-8'))
return subs

def _put_server_tags(self):
Expand Down Expand Up @@ -90,16 +93,16 @@ def test_server_tags_update(self):
expected_location = "%s/servers/%s/tags/%s" % (
self._get_vers_compute_endpoint(), uuid, tag.tag)
self.assertEqual(expected_location, response.headers['Location'])
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_server_tags_delete(self):
uuid = self._put_server_tags()
response = self._do_delete('servers/%s/tags/%s' % (uuid, TAG1))
self.assertEqual(204, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_server_tags_delete_all(self):
uuid = self._put_server_tags()
response = self._do_delete('servers/%s/tags' % uuid)
self.assertEqual(204, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
15 changes: 9 additions & 6 deletions nova/tests/functional/api_sample_tests/test_servers.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,8 @@ def _post_server(self, use_common_server_api_samples=True, name=None):
'glance_host': self._get_glance_host(),
'access_ip_v4': '1.2.3.4',
'access_ip_v6': '80fe::',
'user_data': self.user_data,
'user_data': (self.user_data if six.PY2
else self.user_data.decode('utf-8')),
'uuid': '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}'
'-[0-9a-f]{4}-[0-9a-f]{12}',
'name': 'new-server-test' if name is None else name,
Expand Down Expand Up @@ -103,7 +104,8 @@ def test_servers_get(self):
subs['mac_addr'] = '(?:[a-f0-9]{2}:){5}[a-f0-9]{2}'
subs['access_ip_v4'] = '1.2.3.4'
subs['access_ip_v6'] = '80fe::'
subs['user_data'] = self.user_data
subs['user_data'] = (self.user_data if six.PY2
else self.user_data.decode('utf-8'))
# config drive can be a string for True or empty value for False
subs['cdrive'] = '.*'
self._verify_response('server-get-resp', subs, response, 200)
Expand All @@ -128,7 +130,8 @@ def test_servers_details(self):
subs['mac_addr'] = '(?:[a-f0-9]{2}:){5}[a-f0-9]{2}'
subs['access_ip_v4'] = '1.2.3.4'
subs['access_ip_v6'] = '80fe::'
subs['user_data'] = self.user_data
subs['user_data'] = (self.user_data if six.PY2
else self.user_data.decode('utf-8'))
# config drive can be a string for True or empty value for False
subs['cdrive'] = '.*'
self._verify_response('servers-details-resp', subs, response, 200)
Expand Down Expand Up @@ -227,7 +230,7 @@ def _test_server_action(self, uuid, action, req_tpl,
self._verify_response(resp_tpl, subs, response, code)
else:
self.assertEqual(code, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def test_server_reboot_hard(self):
uuid = self._post_server()
Expand Down Expand Up @@ -365,7 +368,7 @@ def _test_server_action(self, uuid, action, req_tpl):
req_tpl,
{'action': action})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def test_server_start(self):
uuid = self._post_server()
Expand Down Expand Up @@ -397,4 +400,4 @@ def test_trigger_crash_dump(self):
'server-action-trigger-crash-dump',
{})
self.assertEqual(response.status_code, 202)
self.assertEqual(response.content, "")
self.assertEqual(response.text, "")
2 changes: 1 addition & 1 deletion nova/tests/functional/api_sample_tests/test_services.py
Original file line number Diff line number Diff line change
Expand Up @@ -75,7 +75,7 @@ def test_service_delete(self):
"""Delete an existing service."""
response = self._do_delete('os-services/1')
self.assertEqual(204, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)


class ServicesV211JsonTest(ServicesJsonTest):
Expand Down
2 changes: 1 addition & 1 deletion nova/tests/functional/api_sample_tests/test_shelve.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ def _test_server_action(self, uuid, template, action):
response = self._do_post('servers/%s/action' % uuid,
template, {'action': action})
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)

def test_shelve(self):
uuid = self._post_server()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,4 +54,4 @@ def test_delete_network(self):
response = self._do_delete('os-tenant-networks/%s' %
net["network"]["id"])
self.assertEqual(202, response.status_code)
self.assertEqual("", response.content)
self.assertEqual("", response.text)
8 changes: 4 additions & 4 deletions nova/tests/functional/api_sample_tests/test_volumes.py
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,7 @@ def test_snapshots_delete(self):
self._create_snapshot()
response = self._do_delete('os-snapshots/100')
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_snapshots_detail(self):
response = self._do_get('os-snapshots/detail')
Expand Down Expand Up @@ -189,7 +189,7 @@ def test_volumes_delete(self):
vol_id = _get_volume_id()
response = self._do_delete('os-volumes/%s' % vol_id)
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)


class VolumeAttachmentsSample(test_servers.ServersSampleBase):
Expand Down Expand Up @@ -286,7 +286,7 @@ def test_volume_attachment_delete(self):
response = self._do_delete('servers/%s/os-volume_attachments/%s'
% (server_id, attach_id))
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)

def test_volume_attachment_update(self):
self.stub_out('nova.volume.cinder.API.get', fakes.stub_volume_get)
Expand All @@ -305,4 +305,4 @@ def test_volume_attachment_update(self):
'update-volume-req',
subs)
self.assertEqual(202, response.status_code)
self.assertEqual('', response.content)
self.assertEqual('', response.text)
10 changes: 5 additions & 5 deletions nova/tests/functional/regressions/test_bug_1554631.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def test_forbidden_cinder_operation_returns_403(self, mock_cinder):
"""
cinder_client = mock.Mock()
mock_cinder.return_value = cinder_client
exc = cinder_exceptions.Forbidden('')
exc = cinder_exceptions.Forbidden(403)
cinder_client.volumes.create.side_effect = exc

volume = {'display_name': 'vol1', 'size': 3}
Expand Down Expand Up @@ -66,15 +66,15 @@ def test_over_limit_volumes(self, mock_cinder):
"""
cinder_client = mock.Mock()
mock_cinder.return_value = cinder_client
exc = cinder_exceptions.OverLimit('')
exc = cinder_exceptions.OverLimit(413)
cinder_client.volumes.create.side_effect = exc

volume = {'display_name': 'vol1', 'size': 3}
e = self.assertRaises(client.OpenStackApiException,
self.api.post_volume, {'volume': volume})
self.assertEqual(403, e.response.status_code)
# Make sure we went over on volumes
self.assertIn('volumes', e.response.content)
self.assertIn('volumes', e.response.text)

@mock.patch('nova.volume.cinder.cinderclient')
def test_over_limit_snapshots(self, mock_cinder):
Expand All @@ -99,7 +99,7 @@ def test_over_limit_snapshots_force(self, mock_cinder):
def _do_snapshot_over_test(self, mock_cinder, force=False):
cinder_client = mock.Mock()
mock_cinder.return_value = cinder_client
exc = cinder_exceptions.OverLimit('')
exc = cinder_exceptions.OverLimit(413)
cinder_client.volume_snapshots.create.side_effect = exc

snap = {'display_name': 'snap1',
Expand All @@ -109,4 +109,4 @@ def _do_snapshot_over_test(self, mock_cinder, force=False):
self.api.post_snapshot, {'snapshot': snap})
self.assertEqual(403, e.response.status_code)
# Make sure we went over on snapshots
self.assertIn('snapshots', e.response.content)
self.assertIn('snapshots', e.response.text)
2 changes: 1 addition & 1 deletion nova/tests/functional/test_servers.py
Original file line number Diff line number Diff line change
Expand Up @@ -521,7 +521,7 @@ def test_create_server_with_injected_files(self):
})

# Inject a binary file
data = zlib.compress('Hello, World!')
data = zlib.compress(b'Hello, World!')
personality.append({
'path': '/helloworld.zip',
'contents': base64.encode_as_bytes(data),
Expand Down
2 changes: 1 addition & 1 deletion nova/virt/fake.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,7 +164,7 @@ def list_instances(self):
return [self.instances[uuid].name for uuid in self.instances.keys()]

def list_instance_uuids(self):
return self.instances.keys()
return list(self.instances.keys())

def plug_vifs(self, instance, network_info):
"""Plug VIFs into networks."""
Expand Down
Loading

0 comments on commit c78a86c

Please sign in to comment.