From 8fa76ceff8e8460138f5dbebaf0a4e0c341fbc3d Mon Sep 17 00:00:00 2001 From: Petr Malik Date: Sun, 3 May 2015 21:43:23 -0400 Subject: [PATCH] Update modules to turn on dangling mock detection Make all test suites in the api, configuration, instance, network, mysql, router, quota, db, and datastore modules extend 'trove_testtools.TestCase' to enable dangling mock detection. Co-Authored-By: Peter Stachowski Change-Id: If9326709d76972d66fb40b4984bbb5214b0c5189 Partial-Bug: 1448273 --- .../unittests/api/common/test_extensions.py | 4 ++-- .../tests/unittests/api/common/test_limits.py | 8 +++---- trove/tests/unittests/api/test_versions.py | 14 ++++++------ .../test_configuration_controller.py | 17 +++++++------- trove/tests/unittests/datastore/base.py | 9 ++++---- .../unittests/db/test_migration_utils.py | 10 ++++----- .../instance/test_instance_controller.py | 8 +++---- .../instance/test_instance_models.py | 22 +++++++++---------- .../instance/test_instance_status.py | 10 ++++----- .../unittests/instance/test_instance_views.py | 8 +++---- trove/tests/unittests/mysql/test_common.py | 10 ++++----- .../unittests/mysql/test_user_controller.py | 17 +++++++------- .../unittests/network/test_neutron_driver.py | 6 ++--- trove/tests/unittests/quota/test_quota.py | 12 +++++----- trove/tests/unittests/router/test_router.py | 6 ++--- 15 files changed, 76 insertions(+), 85 deletions(-) diff --git a/trove/tests/unittests/api/common/test_extensions.py b/trove/tests/unittests/api/common/test_extensions.py index e4ed5649c4..e2023861af 100644 --- a/trove/tests/unittests/api/common/test_extensions.py +++ b/trove/tests/unittests/api/common/test_extensions.py @@ -16,7 +16,6 @@ import mock import os import pkg_resources -import testtools import trove import ConfigParser as config_parser @@ -26,6 +25,7 @@ from trove.extensions.routes.account import Account from trove.extensions.routes.mgmt import Mgmt from trove.extensions.routes.mysql import Mysql from trove.extensions.routes.security_group import Security_group +from trove.tests.unittests import trove_testtools DEFAULT_EXTENSION_MAP = { 'Account': [Account, extensions.ExtensionDescriptor], @@ -63,7 +63,7 @@ class InvalidExtension(object): return [] -class TestExtensionLoading(testtools.TestCase): +class TestExtensionLoading(trove_testtools.TestCase): def setUp(self): super(TestExtensionLoading, self).setUp() diff --git a/trove/tests/unittests/api/common/test_limits.py b/trove/tests/unittests/api/common/test_limits.py index be4f16e113..3ae43cd555 100644 --- a/trove/tests/unittests/api/common/test_limits.py +++ b/trove/tests/unittests/api/common/test_limits.py @@ -19,7 +19,6 @@ Tests dealing with HTTP rate-limiting. import httplib from trove.quota.models import Quota -import testtools import webob from mock import Mock, MagicMock @@ -31,6 +30,7 @@ from trove.limits import views from trove.limits.service import LimitsController from oslo.serialization import jsonutils from trove.quota.quota import QUOTAS +from trove.tests.unittests import trove_testtools TEST_LIMITS = [ Limit("GET", "/delayed", "^/delayed", 1, limits.PER_MINUTE), @@ -40,7 +40,7 @@ TEST_LIMITS = [ ] -class BaseLimitTestSuite(testtools.TestCase): +class BaseLimitTestSuite(trove_testtools.TestCase): """Base test suite which provides relevant stubs and time abstraction.""" def setUp(self): @@ -683,7 +683,7 @@ class WsgiLimiterProxyTest(BaseLimitTestSuite): super(WsgiLimiterProxyTest, self).tearDown() -class LimitsViewTest(testtools.TestCase): +class LimitsViewTest(trove_testtools.TestCase): def setUp(self): super(LimitsViewTest, self).setUp() @@ -735,7 +735,7 @@ class LimitsViewTest(testtools.TestCase): self.assertEqual(expected, data) -class LimitsViewsTest(testtools.TestCase): +class LimitsViewsTest(trove_testtools.TestCase): def setUp(self): super(LimitsViewsTest, self).setUp() diff --git a/trove/tests/unittests/api/test_versions.py b/trove/tests/unittests/api/test_versions.py index 8fcb5b3ddf..fd03a71724 100644 --- a/trove/tests/unittests/api/test_versions.py +++ b/trove/tests/unittests/api/test_versions.py @@ -14,6 +14,7 @@ # under the License. from mock import Mock +from trove.tests.unittests import trove_testtools from trove.versions import BaseVersion from trove.versions import Version from trove.versions import VersionDataView @@ -22,12 +23,11 @@ from trove.versions import VersionsController from trove.versions import VersionsDataView from trove.versions import VERSIONS -import testtools BASE_URL = 'http://localhost' -class VersionsControllerTest(testtools.TestCase): +class VersionsControllerTest(trove_testtools.TestCase): def setUp(self): super(VersionsControllerTest, self).setUp() @@ -79,7 +79,7 @@ class VersionsControllerTest(testtools.TestCase): self.assertEqual('v1.0', version['id'], "Version id was not 'v1.0'") -class BaseVersionTestCase(testtools.TestCase): +class BaseVersionTestCase(trove_testtools.TestCase): def setUp(self): super(BaseVersionTestCase, self).setUp() @@ -113,7 +113,7 @@ class BaseVersionTestCase(testtools.TestCase): "Base Version url is incorrect") -class VersionTestCase(testtools.TestCase): +class VersionTestCase(trove_testtools.TestCase): def setUp(self): super(VersionTestCase, self).setUp() @@ -140,7 +140,7 @@ class VersionTestCase(testtools.TestCase): 'Base url value was incorrect') -class VersionDataViewTestCase(testtools.TestCase): +class VersionDataViewTestCase(trove_testtools.TestCase): def setUp(self): super(VersionDataViewTestCase, self).setUp() @@ -177,7 +177,7 @@ class VersionDataViewTestCase(testtools.TestCase): "Data status was not 'v1.0'") -class VersionsDataViewTestCase(testtools.TestCase): +class VersionsDataViewTestCase(trove_testtools.TestCase): def setUp(self): super(VersionsDataViewTestCase, self).setUp() @@ -220,7 +220,7 @@ class VersionsDataViewTestCase(testtools.TestCase): "Version ids are not equal") -class VersionAPITestCase(testtools.TestCase): +class VersionAPITestCase(trove_testtools.TestCase): def setUp(self): super(VersionAPITestCase, self).setUp() diff --git a/trove/tests/unittests/configuration/test_configuration_controller.py b/trove/tests/unittests/configuration/test_configuration_controller.py index 568407ae1f..4ffcba26df 100644 --- a/trove/tests/unittests/configuration/test_configuration_controller.py +++ b/trove/tests/unittests/configuration/test_configuration_controller.py @@ -13,17 +13,16 @@ # License for the specific language governing permissions and limitations # under the License. # - -import jsonschema -from testtools import TestCase -from trove.configuration.service import ConfigurationsController -from trove.extensions.mgmt.configuration import service +from mock import MagicMock from trove.common import configurations from trove.common.exception import UnprocessableEntity -from mock import MagicMock +from trove.configuration.service import ConfigurationsController +from trove.extensions.mgmt.configuration import service +from trove.tests.unittests import trove_testtools +import jsonschema -class TestConfigurationParser(TestCase): +class TestConfigurationParser(trove_testtools.TestCase): def setUp(self): super(TestConfigurationParser, self).setUp() @@ -46,7 +45,7 @@ class TestConfigurationParser(TestCase): self.assertEqual('1', d_parsed["skip-external-locking"]) -class TestConfigurationController(TestCase): +class TestConfigurationController(trove_testtools.TestCase): def setUp(self): super(TestConfigurationController, self).setUp() self.controller = ConfigurationsController() @@ -178,7 +177,7 @@ class TestConfigurationController(TestCase): None, config_rules) -class TestConfigurationsParameterController(TestCase): +class TestConfigurationsParameterController(trove_testtools.TestCase): def setUp(self): super(TestConfigurationsParameterController, self).setUp() self.controller = service.ConfigurationsParameterController() diff --git a/trove/tests/unittests/datastore/base.py b/trove/tests/unittests/datastore/base.py index 5c21f3758d..fb46d46af8 100644 --- a/trove/tests/unittests/datastore/base.py +++ b/trove/tests/unittests/datastore/base.py @@ -11,18 +11,17 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. - -import testtools from trove.datastore import models as datastore_models -from trove.datastore.models import Datastore from trove.datastore.models import Capability -from trove.datastore.models import DatastoreVersion from trove.datastore.models import DBCapabilityOverrides +from trove.datastore.models import Datastore +from trove.datastore.models import DatastoreVersion +from trove.tests.unittests import trove_testtools from trove.tests.unittests.util import util import uuid -class TestDatastoreBase(testtools.TestCase): +class TestDatastoreBase(trove_testtools.TestCase): def setUp(self): # Basic setup and mock/fake structures for testing only diff --git a/trove/tests/unittests/db/test_migration_utils.py b/trove/tests/unittests/db/test_migration_utils.py index bfd9cf6f02..b8dcb6f3ce 100644 --- a/trove/tests/unittests/db/test_migration_utils.py +++ b/trove/tests/unittests/db/test_migration_utils.py @@ -13,19 +13,17 @@ # License for the specific language governing permissions and limitations # under the License. # - -from mock import call from mock import Mock +from mock import call from mock import patch from sqlalchemy.engine import reflection from sqlalchemy.schema import Column -import testtools - -from trove.db.sqlalchemy.migrate_repo.schema import String from trove.db.sqlalchemy import utils as db_utils +from trove.db.sqlalchemy.migrate_repo.schema import String +from trove.tests.unittests import trove_testtools -class TestDbMigrationUtils(testtools.TestCase): +class TestDbMigrationUtils(trove_testtools.TestCase): def setUp(self): super(TestDbMigrationUtils, self).setUp() diff --git a/trove/tests/unittests/instance/test_instance_controller.py b/trove/tests/unittests/instance/test_instance_controller.py index 731e15b58c..4c957fb6cd 100644 --- a/trove/tests/unittests/instance/test_instance_controller.py +++ b/trove/tests/unittests/instance/test_instance_controller.py @@ -13,16 +13,16 @@ # License for the specific language governing permissions and limitations # under the License. # -import jsonschema -from testtools import TestCase +from mock import Mock from testtools.matchers import Is, Equals from testtools.testcase import skip from trove.common import apischema from trove.instance.service import InstanceController -from mock import Mock +from trove.tests.unittests import trove_testtools +import jsonschema -class TestInstanceController(TestCase): +class TestInstanceController(trove_testtools.TestCase): def setUp(self): super(TestInstanceController, self).setUp() self.controller = InstanceController() diff --git a/trove/tests/unittests/instance/test_instance_models.py b/trove/tests/unittests/instance/test_instance_models.py index 1183afe9fd..dbc40902e7 100644 --- a/trove/tests/unittests/instance/test_instance_models.py +++ b/trove/tests/unittests/instance/test_instance_models.py @@ -11,30 +11,30 @@ # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the # License for the specific language governing permissions and limitations # under the License. -import uuid from mock import Mock -from testtools import TestCase +from trove.backup import models as backup_models from trove.common import cfg from trove.common import exception -from trove.backup import models as backup_models -from trove.datastore import models as datastore_models from trove.common.instance import ServiceStatuses -from trove.instance.models import filter_ips -from trove.instance.models import InstanceServiceStatus +from trove.datastore import models as datastore_models +from trove.instance import models from trove.instance.models import DBInstance from trove.instance.models import Instance +from trove.instance.models import InstanceServiceStatus from trove.instance.models import SimpleInstance -from trove.instance import models +from trove.instance.models import filter_ips from trove.instance.tasks import InstanceTasks from trove.taskmanager import api as task_api from trove.tests.fakes import nova +from trove.tests.unittests import trove_testtools from trove.tests.unittests.util import util +import uuid CONF = cfg.CONF task_api.API.get_client = Mock() -class SimpleInstanceTest(TestCase): +class SimpleInstanceTest(trove_testtools.TestCase): def setUp(self): super(SimpleInstanceTest, self).setUp() @@ -102,7 +102,7 @@ class SimpleInstanceTest(TestCase): self.assertTrue('15.123.123.123' in ip) -class CreateInstanceTest(TestCase): +class CreateInstanceTest(trove_testtools.TestCase): def setUp(self): util.init_db() @@ -181,7 +181,7 @@ class CreateInstanceTest(TestCase): models.create_nova_client = self.orig_client task_api.API(self.context).create_instance = self.orig_api models.run_with_quotas = self.run_with_quotas - backup_models.DBBackup.check_swift_object_exist = self.context + backup_models.DBBackup.check_swift_object_exist = self.check self.backup.delete() self.db_info.delete() super(CreateInstanceTest, self).tearDown() @@ -211,7 +211,7 @@ class CreateInstanceTest(TestCase): self.assertIsNotNone(instance) -class TestReplication(TestCase): +class TestReplication(trove_testtools.TestCase): def setUp(self): util.init_db() diff --git a/trove/tests/unittests/instance/test_instance_status.py b/trove/tests/unittests/instance/test_instance_status.py index a563254fad..f88dfeeb4d 100644 --- a/trove/tests/unittests/instance/test_instance_status.py +++ b/trove/tests/unittests/instance/test_instance_status.py @@ -13,16 +13,14 @@ # License for the specific language governing permissions and limitations # under the License. # - -import uuid - -from testtools import TestCase from trove.common.instance import ServiceStatuses from trove.datastore import models -from trove.instance.models import InstanceStatus from trove.instance.models import InstanceServiceStatus +from trove.instance.models import InstanceStatus from trove.instance.models import SimpleInstance +from trove.tests.unittests import trove_testtools from trove.tests.unittests.util import util +import uuid class FakeInstanceTask(object): @@ -42,7 +40,7 @@ class FakeDBInstance(object): self.task_status = FakeInstanceTask() -class BaseInstanceStatusTestCase(TestCase): +class BaseInstanceStatusTestCase(trove_testtools.TestCase): def setUp(self): util.init_db() diff --git a/trove/tests/unittests/instance/test_instance_views.py b/trove/tests/unittests/instance/test_instance_views.py index 48d3f5bc95..4e637cdb33 100644 --- a/trove/tests/unittests/instance/test_instance_views.py +++ b/trove/tests/unittests/instance/test_instance_views.py @@ -14,15 +14,15 @@ # under the License. # from mock import Mock -from testtools import TestCase from trove.common import cfg -from trove.instance.views import InstanceView from trove.instance.views import InstanceDetailView +from trove.instance.views import InstanceView +from trove.tests.unittests import trove_testtools CONF = cfg.CONF -class InstanceViewsTest(TestCase): +class InstanceViewsTest(trove_testtools.TestCase): def setUp(self): super(InstanceViewsTest, self).setUp() @@ -38,7 +38,7 @@ class InstanceViewsTest(TestCase): CONF.ip_regex = self.orig_ip_regex -class InstanceDetailViewTest(TestCase): +class InstanceDetailViewTest(trove_testtools.TestCase): def setUp(self): super(InstanceDetailViewTest, self).setUp() diff --git a/trove/tests/unittests/mysql/test_common.py b/trove/tests/unittests/mysql/test_common.py index 65a7fdf21c..214b4d506f 100644 --- a/trove/tests/unittests/mysql/test_common.py +++ b/trove/tests/unittests/mysql/test_common.py @@ -12,17 +12,17 @@ # License for the specific language governing permissions and limitations # under the License. # -from testtools import TestCase -from testtools.matchers import Is from testtools.matchers import Equals -from trove.common.exception import DatabaseInitialDatabaseDuplicateError +from testtools.matchers import Is from trove.common.exception import DatabaseForUserNotInDatabaseListError +from trove.common.exception import DatabaseInitialDatabaseDuplicateError from trove.common.exception import DatabaseInitialUserDuplicateError -from trove.extensions.mysql.common import populate_validated_databases from trove.extensions.mysql.common import populate_users +from trove.extensions.mysql.common import populate_validated_databases +from trove.tests.unittests import trove_testtools -class MySqlCommonTest(TestCase): +class MySqlCommonTest(trove_testtools.TestCase): def setUp(self): super(MySqlCommonTest, self).setUp() diff --git a/trove/tests/unittests/mysql/test_user_controller.py b/trove/tests/unittests/mysql/test_user_controller.py index 928d400f4d..870009a945 100644 --- a/trove/tests/unittests/mysql/test_user_controller.py +++ b/trove/tests/unittests/mysql/test_user_controller.py @@ -13,16 +13,15 @@ # License for the specific language governing permissions and limitations # under the License. # +from testtools.matchers import Is +from trove.extensions.mysql.service import SchemaController +from trove.extensions.mysql.service import UserAccessController +from trove.extensions.mysql.service import UserController +from trove.tests.unittests import trove_testtools import jsonschema -from testtools import TestCase -from testtools.matchers import Is -from trove.extensions.mysql.service import UserController -from trove.extensions.mysql.service import UserAccessController -from trove.extensions.mysql.service import SchemaController - -class TestUserController(TestCase): +class TestUserController(trove_testtools.TestCase): def setUp(self): super(TestUserController, self).setUp() self.controller = UserController() @@ -305,7 +304,7 @@ class TestUserController(TestCase): self.assertFalse(validator_none_host.is_valid(body_none_host)) -class TestUserAccessController(TestCase): +class TestUserAccessController(trove_testtools.TestCase): def test_validate_update_db(self): body = {"databases": []} schema = (UserAccessController()).get_schema('update_all', body) @@ -318,7 +317,7 @@ class TestUserAccessController(TestCase): #self.assertThat(errors[0].path.pop(), Equals("databases")) -class TestSchemaController(TestCase): +class TestSchemaController(trove_testtools.TestCase): def setUp(self): super(TestSchemaController, self).setUp() self.controller = SchemaController() diff --git a/trove/tests/unittests/network/test_neutron_driver.py b/trove/tests/unittests/network/test_neutron_driver.py index f40b6e6983..5ddb5d3ede 100644 --- a/trove/tests/unittests/network/test_neutron_driver.py +++ b/trove/tests/unittests/network/test_neutron_driver.py @@ -14,7 +14,6 @@ # under the License. # -import testtools from mock import MagicMock from mock import Mock from neutronclient.common import exceptions as neutron_exceptions @@ -25,9 +24,10 @@ from trove.common.models import NetworkRemoteModelBase from trove.network import neutron from trove.network.neutron import NeutronDriver as driver from trove.extensions.security_group.models import RemoteSecurityGroup +from trove.tests.unittests import trove_testtools -class NeutronDriverTest(testtools.TestCase): +class NeutronDriverTest(trove_testtools.TestCase): def setUp(self): super(NeutronDriverTest, self).setUp() self.context = Mock() @@ -72,7 +72,7 @@ class NeutronDriverTest(testtools.TestCase): self.assertEqual(1, driver.delete_security_group.call_count) -class NeutronDriverExceptionTest(testtools.TestCase): +class NeutronDriverExceptionTest(trove_testtools.TestCase): def setUp(self): super(NeutronDriverExceptionTest, self).setUp() self.context = Mock() diff --git a/trove/tests/unittests/quota/test_quota.py b/trove/tests/unittests/quota/test_quota.py index 9c2dbff50a..251562669c 100644 --- a/trove/tests/unittests/quota/test_quota.py +++ b/trove/tests/unittests/quota/test_quota.py @@ -12,8 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. -import testtools from mock import Mock, MagicMock, patch +from testtools import skipIf from trove.quota.quota import DbQuotaDriver from trove.quota.models import Resource from trove.quota.models import Quota @@ -25,6 +25,7 @@ from trove.common import exception from trove.common import cfg from trove.quota.quota import run_with_quotas from trove.quota.quota import QUOTAS +from trove.tests.unittests import trove_testtools """ Unit tests for the classes and functions in DbQuotaDriver.py. """ @@ -39,7 +40,7 @@ FAKE_TENANT1 = "123456" FAKE_TENANT2 = "654321" -class Run_with_quotasTest(testtools.TestCase): +class Run_with_quotasTest(trove_testtools.TestCase): def setUp(self): super(Run_with_quotasTest, self).setUp() @@ -78,7 +79,7 @@ class Run_with_quotasTest(testtools.TestCase): self.assertTrue(f.called) -class QuotaControllerTest(testtools.TestCase): +class QuotaControllerTest(trove_testtools.TestCase): def setUp(self): super(QuotaControllerTest, self).setUp() @@ -120,8 +121,7 @@ class QuotaControllerTest(testtools.TestCase): self.assertEqual(200, result.status) self.assertEqual(2, result._data['quotas']['instances']) - @testtools.skipIf(not CONF.trove_volume_support, - 'Volume support is not enabled') + @skipIf(not CONF.trove_volume_support, 'Volume support is not enabled') def test_update_resource_volume(self): instance_quota = MagicMock(spec=Quota) volume_quota = MagicMock(spec=Quota) @@ -142,7 +142,7 @@ class QuotaControllerTest(testtools.TestCase): self.assertEqual(10, result._data['quotas']['volumes']) -class DbQuotaDriverTest(testtools.TestCase): +class DbQuotaDriverTest(trove_testtools.TestCase): def setUp(self): diff --git a/trove/tests/unittests/router/test_router.py b/trove/tests/unittests/router/test_router.py index f5de86c239..2cc5ea6931 100644 --- a/trove/tests/unittests/router/test_router.py +++ b/trove/tests/unittests/router/test_router.py @@ -12,10 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. -import testtools - from trove.common.wsgi import Router, Fault - +from trove.tests.unittests import trove_testtools from routes import Mapper @@ -35,7 +33,7 @@ class FakeRequst(object): } -class TestRouter(testtools.TestCase): +class TestRouter(trove_testtools.TestCase): """Test case for trove `Router` extensions.""" def setUp(self):