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
This commit is contained in:
Sean McGinnis 2017-11-27 12:28:50 -06:00 committed by Sean McGinnis
parent d88bd2ca8e
commit 96334ad951
5 changed files with 50 additions and 0 deletions

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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)