Merge "Add new test decorator skip_if_timeout" into stable/rocky

This commit is contained in:
Zuul 2019-02-23 03:52:54 +00:00 committed by Gerrit Code Review
commit 743af7ed57
2 changed files with 51 additions and 0 deletions

View File

@ -38,6 +38,7 @@ from oslo_utils import fileutils
from oslo_utils import strutils
from oslotest import base
import six
from sqlalchemy import exc as sqlalchemy_exc
import testtools
from neutron._i18n import _
@ -112,6 +113,28 @@ def unstable_test(reason):
return decor
def skip_if_timeout(reason):
def decor(f):
@functools.wraps(f)
def inner(self, *args, **kwargs):
try:
return f(self, *args, **kwargs)
except fixtures.TimeoutException:
msg = ("Timeout raised for test %s, skipping it "
"because of: %s") % (self.id(), reason)
raise self.skipTest(msg)
except sqlalchemy_exc.InterfaceError:
# In case of db tests very often TimeoutException is reason of
# some sqlalchemy InterfaceError exception and that is final
# raised exception which needs to be handled
msg = ("DB connection broken in test %s. It is very likely "
"that this happend because of test timeout. "
"Skipping test because of: %s") % (self.id(), reason)
raise self.skipTest(msg)
return inner
return decor
def set_timeout(timeout):
"""Timeout decorator for test methods.

View File

@ -350,6 +350,7 @@ class TestModelsMigrationsMysql(testlib_api.MySQLTestCaseMixin,
_TestModelsMigrations,
testlib_api.SqlTestCaseLight):
@test_base.skip_if_timeout("bug 1687027")
def test_check_mysql_engine(self):
engine = self.get_engine()
cfg.CONF.set_override('connection', engine.url, group='database')
@ -368,6 +369,32 @@ class TestModelsMigrationsMysql(testlib_api.MySQLTestCaseMixin,
table != 'alembic_version']
self.assertEqual(0, len(res), "%s non InnoDB tables created" % res)
@test_base.skip_if_timeout("bug 1687027")
def test_upgrade_expand_branch(self):
super(TestModelsMigrationsMysql, self).test_upgrade_expand_branch()
@test_base.skip_if_timeout("bug 1687027")
def test_upgrade_contract_branch(self):
super(TestModelsMigrationsMysql, self).test_upgrade_contract_branch()
@test_base.skip_if_timeout("bug 1687027")
def test_branches(self):
super(TestModelsMigrationsMysql, self).test_branches()
@test_base.skip_if_timeout("bug 1687027")
def test_has_offline_migrations_pending_contract_scripts(self):
super(TestModelsMigrationsMysql,
self).test_has_offline_migrations_pending_contract_scripts()
@test_base.skip_if_timeout("bug 1687027")
def test_has_offline_migrations_all_heads_upgraded(self):
super(TestModelsMigrationsMysql,
self).test_has_offline_migrations_all_heads_upgraded()
@test_base.skip_if_timeout("bug 1687027")
def test_models_sync(self):
super(TestModelsMigrationsMysql, self).test_models_sync()
class TestModelsMigrationsPsql(testlib_api.PostgreSQLTestCaseMixin,
_TestModelsMigrations,
@ -587,6 +614,7 @@ class TestWalkMigrationsMysql(testlib_api.MySQLTestCaseMixin,
# on slow nodes than 'psycopg2' and because of that this increased
# timeout is required only when for testing with 'mysql' backend.
@test_base.set_timeout(600)
@test_base.skip_if_timeout("bug 1687027")
def test_walk_versions(self):
super(TestWalkMigrationsMysql, self).test_walk_versions()