From 96334ad9517a6fa4cf675b34ebf5772824856872 Mon Sep 17 00:00:00 2001 From: Sean McGinnis Date: Mon, 27 Nov 2017 12:28:50 -0600 Subject: [PATCH] Add fixture to only emit DeprecationWarning once We have a ton of DeprecationWarning messages in our unit test runs. Most of these are out of our control from third party libs. This adds a WarningsFixture to limit warning output to once per test run. In local py35 unit testing, this went from 14549 warnings to 8913. Also including ignorning a policy 'is_admin' deprecation warning that was added before a clear plan or replacement had been put in place. Other projects have added this rather than fixing it at the source since it is currently being reworked. Based on work previously done in Nova and Cinder. Change-Id: I4d97f74ed37b7b0e9a613ecfe33c4b26216ca768 --- glance/tests/unit/fixtures.py | 40 +++++++++++++++++++++ glance/tests/unit/test_glance_replicator.py | 2 ++ glance/tests/unit/test_image_cache.py | 2 ++ glance/tests/unit/test_manage.py | 2 ++ glance/tests/utils.py | 4 +++ 5 files changed, 50 insertions(+) create mode 100644 glance/tests/unit/fixtures.py diff --git a/glance/tests/unit/fixtures.py b/glance/tests/unit/fixtures.py new file mode 100644 index 0000000000..e082df386d --- /dev/null +++ b/glance/tests/unit/fixtures.py @@ -0,0 +1,40 @@ +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +"""Fixtures for Glance unit tests.""" +# NOTE(mriedem): This is needed for importing from fixtures. +from __future__ import absolute_import + +import warnings + +import fixtures as pyfixtures + + +class WarningsFixture(pyfixtures.Fixture): + """Filters out warnings during test runs.""" + + def setUp(self): + super(WarningsFixture, self).setUp() + # NOTE(sdague): Make deprecation warnings only happen once. Otherwise + # this gets kind of crazy given the way that upstream python libs use + # this. + warnings.simplefilter('once', DeprecationWarning) + + # NOTE(sdague): this remains an unresolved item around the way + # forward on is_admin, the deprecation is definitely really premature. + warnings.filterwarnings( + 'ignore', + message='Policy enforcement is depending on the value of is_admin.' + ' This key is deprecated. Please update your policy ' + 'file to use the standard policy values.') + + self.addCleanup(warnings.resetwarnings) diff --git a/glance/tests/unit/test_glance_replicator.py b/glance/tests/unit/test_glance_replicator.py index 3e39b5fb55..8776e9fe1b 100644 --- a/glance/tests/unit/test_glance_replicator.py +++ b/glance/tests/unit/test_glance_replicator.py @@ -12,6 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. +from __future__ import absolute_import + import copy import os import sys diff --git a/glance/tests/unit/test_image_cache.py b/glance/tests/unit/test_image_cache.py index 89d86f5f16..f77e9ae5a2 100644 --- a/glance/tests/unit/test_image_cache.py +++ b/glance/tests/unit/test_image_cache.py @@ -13,6 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. +from __future__ import absolute_import + from contextlib import contextmanager import datetime import hashlib diff --git a/glance/tests/unit/test_manage.py b/glance/tests/unit/test_manage.py index 80b0c670ae..6924f704cb 100644 --- a/glance/tests/unit/test_manage.py +++ b/glance/tests/unit/test_manage.py @@ -13,6 +13,8 @@ # License for the specific language governing permissions and limitations # under the License. +from __future__ import absolute_import + import fixtures import mock diff --git a/glance/tests/utils.py b/glance/tests/utils.py index 19899c2f20..41a455b38b 100644 --- a/glance/tests/utils.py +++ b/glance/tests/utils.py @@ -47,6 +47,7 @@ from glance.db import migration as db_migration from glance.db.sqlalchemy import alembic_migrations from glance.db.sqlalchemy import api as db_api from glance.db.sqlalchemy import models as db_models +from glance.tests.unit import fixtures as glance_fixtures CONF = cfg.CONF try: @@ -84,6 +85,9 @@ class BaseTestCase(testtools.TestCase): utils.safe_mkdirs(self.conf_dir) self.set_policy() + # Limit the amount of DeprecationWarning messages in the unit test logs + self.useFixture(glance_fixtures.WarningsFixture()) + def set_policy(self): conf_file = "policy.json" self.policy_file = self._copy_data_file(conf_file, self.conf_dir)