Browse Source

Merge "test cleanup: Use oslotest's Timeout fixture"

changes/17/694717/5
Zuul 2 weeks ago
parent
commit
ab6aee61dd
4 changed files with 8 additions and 60 deletions
  1. +4
    -3
      nova/test.py
  2. +0
    -29
      nova/tests/fixtures.py
  3. +4
    -7
      nova/tests/unit/db/test_migrations.py
  4. +0
    -21
      nova/tests/unit/test_fixtures.py

+ 4
- 3
nova/test.py View File

@@ -48,6 +48,7 @@ from oslo_utils import timeutils
from oslo_versionedobjects import fixture as ovo_fixture
from oslotest import mock_fixture
from oslotest import moxstubout
from oslotest import timeout
import six
from six.moves import builtins
import testtools
@@ -178,9 +179,9 @@ class TestCase(testtools.TestCase):
def setUp(self):
"""Run before each test method to initialize test environment."""
super(TestCase, self).setUp()
self.useFixture(nova_fixtures.Timeout(
os.environ.get('OS_TEST_TIMEOUT', 0),
self.TIMEOUT_SCALING_FACTOR))
# The Timeout fixture picks up env.OS_TEST_TIMEOUT, defaulting to 0.
self.useFixture(timeout.Timeout(
scaling_factor=self.TIMEOUT_SCALING_FACTOR))

# How many of which service we've started. {$service-name: $count}
self._service_fixture_count = collections.defaultdict(int)

+ 0
- 29
nova/tests/fixtures.py View File

@@ -232,35 +232,6 @@ class OutputStreamCapture(fixtures.Fixture):
return self.out._details["stdout"].as_text()


class Timeout(fixtures.Fixture):
"""Setup per test timeouts.

In order to avoid test deadlocks we support setting up a test
timeout parameter read from the environment. In almost all
cases where the timeout is reached this means a deadlock.

A class level TIMEOUT_SCALING_FACTOR also exists, which allows
extremely long tests to specify they need more time.
"""

def __init__(self, timeout, scaling=1):
super(Timeout, self).__init__()
try:
self.test_timeout = int(timeout)
except ValueError:
# If timeout value is invalid do not set a timeout.
self.test_timeout = 0
if scaling >= 1:
self.test_timeout *= scaling
else:
raise ValueError('scaling value must be >= 1')

def setUp(self):
super(Timeout, self).setUp()
if self.test_timeout > 0:
self.useFixture(fixtures.Timeout(self.test_timeout, gentle=True))


class DatabasePoisonFixture(fixtures.Fixture):
def setUp(self):
super(DatabasePoisonFixture, self).setUp()

+ 4
- 7
nova/tests/unit/db/test_migrations.py View File

@@ -42,6 +42,7 @@ from oslo_db.sqlalchemy import enginefacade
from oslo_db.sqlalchemy import test_fixtures
from oslo_db.sqlalchemy import test_migrations
from oslo_db.sqlalchemy import utils as oslodbutils
from oslotest import timeout
import sqlalchemy
from sqlalchemy.engine import reflection
import sqlalchemy.exc
@@ -96,13 +97,9 @@ class NovaMigrationsCheckers(test_migrations.ModelsMigrationsSync,
self.useFixture(nova_fixtures.StandardLogging())

super(NovaMigrationsCheckers, self).setUp()
# NOTE(rpodolyaka): we need to repeat the functionality of the base
# test case a bit here as this gets overridden by oslotest base test
# case and nova base test case cleanup must be the last one (as it
# deletes attributes of test case instances)
self.useFixture(nova_fixtures.Timeout(
os.environ.get('OS_TEST_TIMEOUT', 0),
self.TIMEOUT_SCALING_FACTOR))
# The Timeout fixture picks up env.OS_TEST_TIMEOUT, defaulting to 0.
self.useFixture(timeout.Timeout(
scaling_factor=self.TIMEOUT_SCALING_FACTOR))
self.engine = enginefacade.writer.get_engine()

def assertColumnExists(self, engine, table_name, column):

+ 0
- 21
nova/tests/unit/test_fixtures.py View File

@@ -146,27 +146,6 @@ class TestLogging(testtools.TestCase):
self.assertIn("at debug", stdlog.logger.output)


class TestTimeout(testtools.TestCase):
"""Tests for our timeout fixture.

Testing the actual timeout mechanism is beyond the scope of this
test, because it's a pretty clear pass through to fixtures'
timeout fixture, which tested in their tree.

"""
def test_scaling(self):
# a bad scaling factor
self.assertRaises(ValueError, fixtures.Timeout, 1, 0.5)

# various things that should work.
timeout = fixtures.Timeout(10)
self.assertEqual(10, timeout.test_timeout)
timeout = fixtures.Timeout("10")
self.assertEqual(10, timeout.test_timeout)
timeout = fixtures.Timeout("10", 2)
self.assertEqual(20, timeout.test_timeout)


class TestOSAPIFixture(testtools.TestCase):
@mock.patch('nova.objects.Service.get_by_host_and_binary')
@mock.patch('nova.objects.Service.create')

Loading…
Cancel
Save