From 6088f06cd37d502546034fab36dc4d5d15706815 Mon Sep 17 00:00:00 2001 From: Balazs Gibizer Date: Fri, 2 Feb 2018 13:14:52 +0100 Subject: [PATCH] Escalate UUID validation warning to error in test The UUIDFields ovo field emits a warning if the field's value is not a valid UUID. As previous patches removed all the violation from our test code this patch now escalates the warning to exception raising to prevent adding new violations in test in the future. Change-Id: I0bf6d82b7c1a83419b8c54b085142af127b7a011 --- nova/tests/fixtures.py | 5 ++++ nova/tests/unit/test_fixtures.py | 44 ++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) diff --git a/nova/tests/fixtures.py b/nova/tests/fixtures.py index 67fe98ca47..267bc52eb0 100644 --- a/nova/tests/fixtures.py +++ b/nova/tests/fixtures.py @@ -770,6 +770,11 @@ class WarningsFixture(fixtures.Fixture): message="Policy .* failed scope check", category=UserWarning) + # NOTE(gibi): The UUIDFields emits a warning if the value is not a + # valid UUID. Let's escalate that to an exception in the test to + # prevent adding violations. + warnings.filterwarnings('error', message=".*invalid UUID.*") + self.addCleanup(warnings.resetwarnings) diff --git a/nova/tests/unit/test_fixtures.py b/nova/tests/unit/test_fixtures.py index 0acb3c4faa..645a856a1a 100644 --- a/nova/tests/unit/test_fixtures.py +++ b/nova/tests/unit/test_fixtures.py @@ -14,12 +14,14 @@ # License for the specific language governing permissions and limitations # under the License. +import copy import sys import fixtures as fx import mock from oslo_config import cfg from oslo_log import log as logging +from oslo_utils import timeutils from oslo_utils import uuidutils import sqlalchemy import testtools @@ -32,9 +34,11 @@ from nova import exception from nova import objects from nova.objects import base as obj_base from nova.objects import service as service_obj +from nova import test from nova.tests import fixtures from nova.tests.unit import conf_fixture from nova.tests.unit import policy_fixture +from nova.tests import uuidsentinel as uuids from nova import utils CONF = cfg.CONF @@ -497,3 +501,43 @@ class TestPlacementFixture(testtools.TestCase): placement_fixture.token = None resp = placement_fixture._fake_get(None, '/foo') self.assertEqual(401, resp.status_code) + + +class TestWarningsFixture(test.TestCase): + def test_invalid_uuid_errors(self): + """Creating an oslo.versionedobject with an invalid UUID value for a + UUIDField should raise an exception. + """ + valid_migration_kwargs = { + "created_at": timeutils.utcnow().replace(microsecond=0), + "updated_at": None, + "deleted_at": None, + "deleted": False, + "id": 123, + "uuid": uuids.migration, + "source_compute": "compute-source", + "dest_compute": "compute-dest", + "source_node": "node-source", + "dest_node": "node-dest", + "dest_host": "host-dest", + "old_instance_type_id": 42, + "new_instance_type_id": 84, + "instance_uuid": "fake-uuid", + "status": "migrating", + "migration_type": "resize", + "hidden": False, + "memory_total": 123456, + "memory_processed": 12345, + "memory_remaining": 111111, + "disk_total": 234567, + "disk_processed": 23456, + "disk_remaining": 211111, + } + + # this shall not throw FutureWarning + objects.migration.Migration(**valid_migration_kwargs) + + invalid_migration_kwargs = copy.deepcopy(valid_migration_kwargs) + invalid_migration_kwargs["uuid"] = "fake_id" + self.assertRaises(FutureWarning, objects.migration.Migration, + **invalid_migration_kwargs)