From 584969aff163e9ac2ed3d7be180e73228090238b Mon Sep 17 00:00:00 2001 From: Davanum Srinivas Date: Thu, 12 Jan 2017 09:17:06 -0500 Subject: [PATCH] [py35] Fixes to get rally scenarios working Get nova.boot_server, nova.attach_volume, nova.detach_volume and nova.delete_server working. Please see the following cinder review for the experiment (see gate-rally-dsvm-py35-cinder-nv): Id78b136ad15ac77717711ebcbb671c2f1dd3a10c nova/api/openstack/placement/handlers: * make sure we convert to bytes before we set the response.body nova/tests/functional/db/api/test_migrations.py: * range is an iterator and must be converted to a list nova/tests/unit/virt/libvirt/test_driver.py: nova/tests/unit/virt/libvirt/test_fakelibvirt.py: nova/virt/libvirt/config.py: nova/virt/libvirt/guest.py: nova/virt/libvirt/host.py: * libvirt API expects strings, some of the code paths ended up being bytes, so convert them to strings before calling libvirt Finally, eliminated the tests that now started to pass from tests-functional-py3.txt Change-Id: Ib721442e9d83a3b9a7fe597f3886430449a9e684 --- .../openstack/placement/handlers/aggregate.py | 4 +- .../placement/handlers/allocation.py | 5 +- .../openstack/placement/handlers/inventory.py | 9 +- .../placement/handlers/resource_class.py | 13 +-- .../placement/handlers/resource_provider.py | 13 +-- nova/api/openstack/placement/handlers/root.py | 3 +- .../api/openstack/placement/handlers/usage.py | 5 +- .../functional/db/api/test_migrations.py | 4 +- nova/tests/unit/virt/libvirt/test_driver.py | 38 ++++----- .../unit/virt/libvirt/test_fakelibvirt.py | 2 +- nova/virt/libvirt/config.py | 2 + nova/virt/libvirt/guest.py | 18 +++- nova/virt/libvirt/host.py | 2 +- tests-functional-py3.txt | 85 ++----------------- 14 files changed, 77 insertions(+), 126 deletions(-) diff --git a/nova/api/openstack/placement/handlers/aggregate.py b/nova/api/openstack/placement/handlers/aggregate.py index 51eea051bbd4..271159fe1e8d 100644 --- a/nova/api/openstack/placement/handlers/aggregate.py +++ b/nova/api/openstack/placement/handlers/aggregate.py @@ -12,6 +12,7 @@ """Aggregate handlers for Placement API.""" from oslo_serialization import jsonutils +from oslo_utils import encodeutils import webob from nova.api.openstack.placement import microversion @@ -31,7 +32,8 @@ PUT_AGGREGATES_SCHEMA = { def _send_aggregates(response, aggregate_uuids): response.status = 200 - response.body = jsonutils.dumps(_serialize_aggregates(aggregate_uuids)) + response.body = encodeutils.to_utf8( + jsonutils.dumps(_serialize_aggregates(aggregate_uuids))) response.content_type = 'application/json' return response diff --git a/nova/api/openstack/placement/handlers/allocation.py b/nova/api/openstack/placement/handlers/allocation.py index e67257aa98a4..545957c29e29 100644 --- a/nova/api/openstack/placement/handlers/allocation.py +++ b/nova/api/openstack/placement/handlers/allocation.py @@ -16,6 +16,7 @@ import collections import jsonschema from oslo_log import log as logging from oslo_serialization import jsonutils +from oslo_utils import encodeutils import webob from nova.api.openstack.placement import util @@ -173,7 +174,7 @@ def list_for_consumer(req): _serialize_allocations_for_consumer(allocations)) req.response.status = 200 - req.response.body = allocations_json + req.response.body = encodeutils.to_utf8(allocations_json) req.response.content_type = 'application/json' return req.response @@ -209,7 +210,7 @@ def list_for_resource_provider(req): allocations, resource_provider)) req.response.status = 200 - req.response.body = allocations_json + req.response.body = encodeutils.to_utf8(allocations_json) req.response.content_type = 'application/json' return req.response diff --git a/nova/api/openstack/placement/handlers/inventory.py b/nova/api/openstack/placement/handlers/inventory.py index 6fd02492346c..cf1fa1b7c20c 100644 --- a/nova/api/openstack/placement/handlers/inventory.py +++ b/nova/api/openstack/placement/handlers/inventory.py @@ -15,6 +15,7 @@ import copy from oslo_db import exception as db_exc from oslo_serialization import jsonutils +from oslo_utils import encodeutils import webob from nova.api.openstack.placement import util @@ -157,8 +158,8 @@ def _make_inventory_object(resource_provider, resource_class, **data): def _send_inventories(response, resource_provider, inventories): """Send a JSON representation of a list of inventories.""" response.status = 200 - response.body = jsonutils.dumps(_serialize_inventories( - inventories, resource_provider.generation)) + response.body = encodeutils.to_utf8(jsonutils.dumps( + _serialize_inventories(inventories, resource_provider.generation))) response.content_type = 'application/json' return response @@ -166,8 +167,8 @@ def _send_inventories(response, resource_provider, inventories): def _send_inventory(response, resource_provider, inventory, status=200): """Send a JSON representation of one single inventory.""" response.status = status - response.body = jsonutils.dumps(_serialize_inventory( - inventory, generation=resource_provider.generation)) + response.body = encodeutils.to_utf8(jsonutils.dumps(_serialize_inventory( + inventory, generation=resource_provider.generation))) response.content_type = 'application/json' return response diff --git a/nova/api/openstack/placement/handlers/resource_class.py b/nova/api/openstack/placement/handlers/resource_class.py index cc77fef610a2..affdd0f31b98 100644 --- a/nova/api/openstack/placement/handlers/resource_class.py +++ b/nova/api/openstack/placement/handlers/resource_class.py @@ -14,6 +14,7 @@ import copy from oslo_serialization import jsonutils +from oslo_utils import encodeutils import webob from nova.api.openstack.placement import microversion @@ -131,8 +132,8 @@ def get_resource_class(req): # The containing application will catch a not found here. rc = objects.ResourceClass.get_by_name(context, name) - req.response.body = jsonutils.dumps( - _serialize_resource_class(req.environ, rc) + req.response.body = encodeutils.to_utf8(jsonutils.dumps( + _serialize_resource_class(req.environ, rc)) ) req.response.content_type = 'application/json' return req.response @@ -151,8 +152,8 @@ def list_resource_classes(req): rcs = objects.ResourceClassList.get_all(context) response = req.response - response.body = jsonutils.dumps( - _serialize_resource_classes(req.environ, rcs) + response.body = encodeutils.to_utf8(jsonutils.dumps( + _serialize_resource_classes(req.environ, rcs)) ) response.content_type = 'application/json' return response @@ -190,8 +191,8 @@ def update_resource_class(req): {'rp_name': name}, json_formatter=util.json_error_formatter) - req.response.body = jsonutils.dumps( - _serialize_resource_class(req.environ, rc) + req.response.body = encodeutils.to_utf8(jsonutils.dumps( + _serialize_resource_class(req.environ, rc)) ) req.response.status = 200 req.response.content_type = 'application/json' diff --git a/nova/api/openstack/placement/handlers/resource_provider.py b/nova/api/openstack/placement/handlers/resource_provider.py index 703169dd89a6..8f0bee6f0c18 100644 --- a/nova/api/openstack/placement/handlers/resource_provider.py +++ b/nova/api/openstack/placement/handlers/resource_provider.py @@ -15,6 +15,7 @@ import copy from oslo_db import exception as db_exc from oslo_serialization import jsonutils +from oslo_utils import encodeutils from oslo_utils import uuidutils import webob @@ -148,8 +149,8 @@ def get_resource_provider(req): resource_provider = objects.ResourceProvider.get_by_uuid( context, uuid) - req.response.body = jsonutils.dumps( - _serialize_provider(req.environ, resource_provider)) + req.response.body = encodeutils.to_utf8(jsonutils.dumps( + _serialize_provider(req.environ, resource_provider))) req.response.content_type = 'application/json' return req.response @@ -200,8 +201,8 @@ def list_resource_providers(req): context, filters) response = req.response - response.body = jsonutils.dumps(_serialize_providers( - req.environ, resource_providers)) + response.body = encodeutils.to_utf8( + jsonutils.dumps(_serialize_providers(req.environ, resource_providers))) response.content_type = 'application/json' return response @@ -238,8 +239,8 @@ def update_resource_provider(req): {'rp_uuid': uuid, 'error': exc}, json_formatter=util.json_error_formatter) - req.response.body = jsonutils.dumps( - _serialize_provider(req.environ, resource_provider)) + req.response.body = encodeutils.to_utf8(jsonutils.dumps( + _serialize_provider(req.environ, resource_provider))) req.response.status = 200 req.response.content_type = 'application/json' return req.response diff --git a/nova/api/openstack/placement/handlers/root.py b/nova/api/openstack/placement/handlers/root.py index 24238d176d87..6ec8b29d20b1 100644 --- a/nova/api/openstack/placement/handlers/root.py +++ b/nova/api/openstack/placement/handlers/root.py @@ -12,6 +12,7 @@ """Handler for the root of the Placement API.""" from oslo_serialization import jsonutils +from oslo_utils import encodeutils import webob @@ -31,6 +32,6 @@ def home(req): 'min_version': min_version, } version_json = jsonutils.dumps({'versions': [version_data]}) - req.response.body = version_json + req.response.body = encodeutils.to_utf8(version_json) req.response.content_type = 'application/json' return req.response diff --git a/nova/api/openstack/placement/handlers/usage.py b/nova/api/openstack/placement/handlers/usage.py index 236e974e883a..c75d6274cc94 100644 --- a/nova/api/openstack/placement/handlers/usage.py +++ b/nova/api/openstack/placement/handlers/usage.py @@ -12,6 +12,7 @@ """Placement API handlers for usage information.""" from oslo_serialization import jsonutils +from oslo_utils import encodeutils import webob from nova.api.openstack.placement import util @@ -58,7 +59,7 @@ def list_usages(req): context, uuid) response = req.response - response.body = jsonutils.dumps( - _serialize_usages(resource_provider, usage)) + response.body = encodeutils.to_utf8(jsonutils.dumps( + _serialize_usages(resource_provider, usage))) req.response.content_type = 'application/json' return req.response diff --git a/nova/tests/functional/db/api/test_migrations.py b/nova/tests/functional/db/api/test_migrations.py index 3a9171528583..b66e2623dcac 100644 --- a/nova/tests/functional/db/api/test_migrations.py +++ b/nova/tests/functional/db/api/test_migrations.py @@ -162,8 +162,8 @@ class NovaAPIMigrationsWalk(test_migrations.WalkVersionsMixin): return self.engine def _skippable_migrations(self): - mitaka_placeholders = range(8, 13) - newton_placeholders = range(21, 26) + mitaka_placeholders = list(range(8, 13)) + newton_placeholders = list(range(21, 26)) special_cases = [ 30, # Enforcement migration, no changes to test ] diff --git a/nova/tests/unit/virt/libvirt/test_driver.py b/nova/tests/unit/virt/libvirt/test_driver.py index a010b2dcb582..169bf438bb66 100644 --- a/nova/tests/unit/virt/libvirt/test_driver.py +++ b/nova/tests/unit/virt/libvirt/test_driver.py @@ -6307,7 +6307,7 @@ class LibvirtConnTestCase(test.NoDBTestCase): mock_get_domain.assert_called_with(instance) mock_dom.detachDeviceFlags.assert_called_with( - b""" + """ @@ -17147,13 +17147,13 @@ class LibvirtDriverTestCase(test.NoDBTestCase): """ - diska_xml = b""" + diska_xml = """ 0e38683e-f0af-418f-a3f1-6b67ea0f919d """ - diskb_xml = b""" + diskb_xml = """ """ @@ -17650,14 +17650,14 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase): domain.XMLDesc(flags=0).AndReturn(self.dom_xml) snap_xml_src = ( - b'\n' - b' \n' - b' \n' - b' \n' - b' \n' - b' \n' - b' \n' - b'\n') + '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + '\n') # Older versions of libvirt may be missing these. fakelibvirt.VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT = 32 @@ -17720,14 +17720,14 @@ class LibvirtVolumeSnapshotTestCase(test.NoDBTestCase): domain.XMLDesc(flags=0).AndReturn(self.dom_xml) snap_xml_src = ( - b'\n' - b' \n' - b' \n' - b' \n' - b' \n' - b' \n' - b' \n' - b'\n') + '\n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + ' \n' + '\n') # Older versions of libvirt may be missing these. fakelibvirt.VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT = 32 diff --git a/nova/tests/unit/virt/libvirt/test_fakelibvirt.py b/nova/tests/unit/virt/libvirt/test_fakelibvirt.py index cee242c4c926..33f53f2ff198 100644 --- a/nova/tests/unit/virt/libvirt/test_fakelibvirt.py +++ b/nova/tests/unit/virt/libvirt/test_fakelibvirt.py @@ -367,7 +367,7 @@ class FakeLibvirtTests(test.NoDBTestCase): libvirt.VIR_CPU_COMPARE_IDENTICAL) def test_numa_topology_generation(self): - topology = b""" + topology = """ 7870000 diff --git a/nova/virt/libvirt/config.py b/nova/virt/libvirt/config.py index f8c37f20a302..fb3e1136a9a7 100644 --- a/nova/virt/libvirt/config.py +++ b/nova/virt/libvirt/config.py @@ -76,6 +76,8 @@ class LibvirtConfigObject(object): def to_xml(self, pretty_print=True): root = self.format_dom() xml_str = etree.tostring(root, pretty_print=pretty_print) + if six.PY3 and isinstance(xml_str, six.binary_type): + xml_str = xml_str.decode("utf-8") return xml_str diff --git a/nova/virt/libvirt/guest.py b/nova/virt/libvirt/guest.py index 77761620c165..11c6af0e0421 100644 --- a/nova/virt/libvirt/guest.py +++ b/nova/virt/libvirt/guest.py @@ -33,6 +33,7 @@ from oslo_service import loopingcall from oslo_utils import encodeutils from oslo_utils import excutils from oslo_utils import importutils +import six import time from nova.compute import power_state @@ -120,6 +121,8 @@ class Guest(object): :returns guest.Guest: Guest ready to be launched """ try: + if six.PY3 and isinstance(xml, six.binary_type): + xml = xml.decode('utf-8') guest = host.write_instance_config(xml) except Exception: with excutils.save_and_reraise_exception(): @@ -295,7 +298,11 @@ class Guest(object): """ flags = persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0 flags |= live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0 + device_xml = conf.to_xml() + if six.PY3 and isinstance(device_xml, six.binary_type): + device_xml = device_xml.decode('utf-8') + LOG.debug("attach device xml: %s", device_xml) self._domain.attachDeviceFlags(device_xml, flags=flags) @@ -412,7 +419,11 @@ class Guest(object): """ flags = persistent and libvirt.VIR_DOMAIN_AFFECT_CONFIG or 0 flags |= live and libvirt.VIR_DOMAIN_AFFECT_LIVE or 0 + device_xml = conf.to_xml() + if six.PY3 and isinstance(device_xml, six.binary_type): + device_xml = device_xml.decode('utf-8') + LOG.debug("detach device xml: %s", device_xml) self._domain.detachDeviceFlags(device_xml, flags=flags) @@ -520,7 +531,12 @@ class Guest(object): flags |= reuse_ext and (libvirt.VIR_DOMAIN_SNAPSHOT_CREATE_REUSE_EXT or 0) flags |= quiesce and libvirt.VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE or 0 - self._domain.snapshotCreateXML(conf.to_xml(), flags=flags) + + device_xml = conf.to_xml() + if six.PY3 and isinstance(device_xml, six.binary_type): + device_xml = device_xml.decode('utf-8') + + self._domain.snapshotCreateXML(device_xml, flags=flags) def shutdown(self): """Shutdown guest""" diff --git a/nova/virt/libvirt/host.py b/nova/virt/libvirt/host.py index 85cc6dfc3b1a..2aacfa3f1545 100644 --- a/nova/virt/libvirt/host.py +++ b/nova/virt/libvirt/host.py @@ -641,7 +641,7 @@ class Host(object): and self._caps.host.cpu.model is not None): try: xml_str = self._caps.host.cpu.to_xml() - if six.PY3: + if six.PY3 and isinstance(xml_str, six.binary_type): xml_str = xml_str.decode('utf-8') features = self.get_connection().baselineCPU( [xml_str], diff --git a/tests-functional-py3.txt b/tests-functional-py3.txt index 69ad83911d86..71e187c1840c 100644 --- a/tests-functional-py3.txt +++ b/tests-functional-py3.txt @@ -1,82 +1,16 @@ -nova.tests.functional.api.openstack.placement.test_placement_api.aggregate_clear_those_aggregates.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.aggregate_get_empty_aggregates.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.aggregate_get_empty_aggregates_again.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.aggregate_get_those_aggregates.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.aggregate_put_some_aggregates.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_add_other_inventory.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_check_allocations_by_consumer_id.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_check_allocations_by_different_consumer_id.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_check_allocations_for_the_resource_provider.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_check_usages.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_check_usages_after_12.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_check_usages_after_another_10.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_get_allocations_is_empty_dict.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_get_those_allocations_for_consumer.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_get_those_allocations_for_resource_provider.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_post_some_inventory.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_set_inventory_on_rp1.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.allocations_set_inventory_on_rp2.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.basic-http_200_at_home.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.basic-http_complex_accept_resource_providers.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.basic-http_get_resource_provider_complex_accept_wild_match.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.confirm-auth_with_token_200.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_check_both_inventory_classes.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_check_one_inventory_class.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_confirm_inventory_change.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_get_empty_inventories.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_get_list_of_inventories.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_get_now_empty_inventories.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_get_that_inventory.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_list_both_those_inventories.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_modify_inventory_invalid_data.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_modify_inventory_invalid_generation.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_modify_inventory_no_such_resource_class_in_inventory.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_modify_the_inventory.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_post_an_inventory.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_post_new_disk_inventory.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_post_new_ipv4_address_inventory.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.inventory_put_all_inventory.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_put_all_inventory_bad_capacity.test_request nova.tests.functional.api.openstack.placement.test_placement_api.inventory_put_all_inventory_unknown_resource_class.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.microversion_latest_microversion_is_1.2.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.microversion_latest_microversion_is_1.3 -nova.tests.functional.api.openstack.placement.test_placement_api.microversion_root_has_microversion_header.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.microversion_root_has_microversion_info.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-classes_confirm_the_correct_post.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-classes_get_resource_class_works_with_no_accept.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-classes_list_resource_classes_after_addition_of_custom_res_class.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-classes_update_custom_resource_class.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-classes_what_is_at_resource_classes.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_associate_an_aggregate_with_rp1 -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_associate_an_aggregate_with_rp2 -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_associate_another_aggregate_with_rp2 -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_clear_aggregates_on_rp1 -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_get_by_aggregates_no_result -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_get_by_aggregates_one_result -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_get_by_aggregates_one_result_no_in -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_get_by_aggregates_two_result -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_get_by_both_aggregates_one -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider-aggregates_get_by_both_aggregates_two nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_check_the_name_from_that_update.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_confirm_the_correct_post.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_filter_out_all_resource_providers_by_name.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_filter_out_all_resource_providers_by_uuid.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_get_resource_provider_works_with_no_accept.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_list_one_resource_provider_filtering_by_name.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_list_one_resource_provider_filtering_by_uuid.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_list_one_resource_providers.test_request nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_try_to_rename_that_provider_to_existing_name.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_update_a_provider_poorly.test_request nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_update_a_resource_provider.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.resource-provider_what_is_at_resource_providers.test_request nova.tests.functional.api.openstack.placement.test_placement_api.unicode_get_a_raw_snowman_unicode.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.unicode_get_that_resource_provider.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.unicode_query_by_name.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.usage_check_provider_exists.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.usage_get_empty_usages.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.with-allocations_confirm_inventories.test_request -nova.tests.functional.api.openstack.placement.test_placement_api.with-allocations_get_usages.test_request -nova.tests.functional.api.openstack.placement.test_report_client.SchedulerReportClientTests.test_client_report_smoke nova.tests.functional.api_sample_tests.test_admin_actions.AdminActionsSamplesJsonTest.test_post_inject_network_info nova.tests.functional.api_sample_tests.test_admin_actions.AdminActionsSamplesJsonTest.test_post_reset_network nova.tests.functional.api_sample_tests.test_admin_actions.AdminActionsSamplesJsonTest.test_post_reset_state @@ -89,8 +23,6 @@ nova.tests.functional.api_sample_tests.test_attach_interfaces.AttachInterfacesSa nova.tests.functional.api_sample_tests.test_attach_interfaces.AttachInterfacesSampleJsonTest.test_show_interfaces nova.tests.functional.api_sample_tests.test_block_device_mapping_boot.BlockDeviceMappingV1BootJsonTest.test_servers_post_with_bdm nova.tests.functional.api_sample_tests.test_block_device_mapping_boot.BlockDeviceMappingV2BootJsonTest.test_servers_post_with_bdm -nova.tests.functional.api_sample_tests.test_cloudpipe.CloudPipeSampleTest.test_cloud_pipe_create -nova.tests.functional.api_sample_tests.test_cloudpipe.CloudPipeSampleTest.test_cloud_pipe_list nova.tests.functional.api_sample_tests.test_cloudpipe.CloudPipeSampleTest.test_cloud_pipe_update nova.tests.functional.api_sample_tests.test_console_auth_tokens.ConsoleAuthTokensSampleJsonTests.test_get_console_connect_info nova.tests.functional.api_sample_tests.test_console_output.ConsoleOutputSampleJsonTest.test_get_console_output @@ -154,9 +86,6 @@ nova.tests.functional.api_sample_tests.test_remote_consoles.ConsolesV28SampleJso nova.tests.functional.api_sample_tests.test_rescue.RescueJsonTest.test_server_rescue nova.tests.functional.api_sample_tests.test_rescue.RescueJsonTest.test_server_rescue_with_image_ref_specified nova.tests.functional.api_sample_tests.test_rescue.RescueJsonTest.test_server_unrescue -nova.tests.functional.api_sample_tests.test_security_group_default_rules.SecurityGroupDefaultRulesSampleJsonTest.test_security_group_default_rules_create -nova.tests.functional.api_sample_tests.test_security_group_default_rules.SecurityGroupDefaultRulesSampleJsonTest.test_security_group_default_rules_list -nova.tests.functional.api_sample_tests.test_security_group_default_rules.SecurityGroupDefaultRulesSampleJsonTest.test_security_group_default_rules_show nova.tests.functional.api_sample_tests.test_security_groups.SecurityGroupsJsonTest.test_security_groups_add nova.tests.functional.api_sample_tests.test_security_groups.SecurityGroupsJsonTest.test_security_groups_list_server nova.tests.functional.api_sample_tests.test_security_groups.SecurityGroupsJsonTest.test_security_groups_remove @@ -232,7 +161,9 @@ nova.tests.functional.api_sample_tests.test_shelve.ShelveJsonTest.test_unshelve nova.tests.functional.api_sample_tests.test_simple_tenant_usage.SimpleTenantUsageSampleJsonTest.test_get_tenant_usage_details nova.tests.functional.api_sample_tests.test_simple_tenant_usage.SimpleTenantUsageSampleJsonTest.test_get_tenants_usage nova.tests.functional.api_sample_tests.test_simple_tenant_usage.SimpleTenantUsageSampleJsonTest.test_get_tenants_usage_with_detail -nova.tests.functional.api_sample_tests.test_simple_tenant_usage.SimpleTenantUsageV240Test +nova.tests.functional.api_sample_tests.test_simple_tenant_usage.SimpleTenantUsageV240Test.test_get_tenant_usage_details +nova.tests.functional.api_sample_tests.test_simple_tenant_usage.SimpleTenantUsageV240Test.test_get_tenants_usage +nova.tests.functional.api_sample_tests.test_simple_tenant_usage.SimpleTenantUsageV240Test.test_get_tenants_usage_with_detail nova.tests.functional.api_sample_tests.test_suspend_server.SuspendServerSamplesJsonTest.test_post_resume nova.tests.functional.api_sample_tests.test_suspend_server.SuspendServerSamplesJsonTest.test_post_suspend nova.tests.functional.api_sample_tests.test_tenant_networks.TenantNetworksJsonTests.test_delete_network @@ -245,12 +176,7 @@ nova.tests.functional.api_sample_tests.test_volumes.VolumeAttachmentsSample.test nova.tests.functional.api_sample_tests.test_volumes.VolumeAttachmentsSample.test_volume_attachment_detail nova.tests.functional.api_sample_tests.test_volumes.VolumeAttachmentsSample.test_volume_attachment_update nova.tests.functional.api_sample_tests.test_volumes.VolumesSampleJsonTest.test_volumes_delete -nova.tests.functional.db.api.test_migrations.TestNovaAPIMigrationsWalkMySQL -nova.tests.functional.db.api.test_migrations.TestNovaAPIMigrationsWalkPostgreSQL -nova.tests.functional.db.api.test_migrations.TestNovaAPIMigrationsWalkSQLite.test_walk_versions -nova.tests.functional.db.test_compute_node.ComputeNodeTestCase.test_recreate_rp -nova.tests.functional.db.test_instance_group.InstanceGroupObjectTestCase.test_add_members -nova.tests.functional.db.test_instance_group.InstanceGroupObjectTestCase.test_save +nova.tests.functional.db.test_instance_group.InstanceGroupObjectTestCase.test_add_members_main nova.tests.functional.db.test_resource_provider.ResourceProviderTestCase.test_provider_modify_inventory nova.tests.functional.db.test_resource_provider.ResourceProviderTestCase.test_save_resource_provider nova.tests.functional.db.test_resource_provider.ResourceProviderTestCase.test_set_inventory_over_capacity @@ -260,8 +186,8 @@ nova.tests.functional.regressions.test_bug_1554631.TestCinderForbidden.test_forb nova.tests.functional.regressions.test_bug_1554631.TestCinderOverLimit.test_over_limit_snapshots nova.tests.functional.regressions.test_bug_1554631.TestCinderOverLimit.test_over_limit_snapshots_force nova.tests.functional.regressions.test_bug_1554631.TestCinderOverLimit.test_over_limit_volumes -nova.tests.functional.test_server_group.ServerGroupTestV21.test_evacuate_with_anti_affinity nova.tests.functional.test_server_group.ServerGroupTestV21.test_evacuate_with_affinity_no_valid_host +nova.tests.functional.test_server_group.ServerGroupTestV21.test_evacuate_with_anti_affinity nova.tests.functional.test_server_group.ServerGroupTestV21.test_evacuate_with_anti_affinity_no_valid_host nova.tests.functional.test_server_group.ServerGroupTestV215.test_evacuate_with_affinity_no_valid_host nova.tests.functional.test_server_group.ServerGroupTestV215.test_evacuate_with_anti_affinity @@ -269,5 +195,4 @@ nova.tests.functional.test_server_group.ServerGroupTestV215.test_evacuate_with_a nova.tests.functional.test_server_group.ServerGroupTestV215.test_evacuate_with_soft_affinity nova.tests.functional.test_server_group.ServerGroupTestV215.test_evacuate_with_soft_anti_affinity nova.tests.functional.test_servers.ServersTest.test_create_server_with_injected_files -nova.tests.functional.test_servers.ServersTestV21.test_create_multiple_servers nova.tests.functional.test_servers.ServersTestV21.test_create_server_with_injected_files