Added dangling mock detection to 'guestagent'

Ensured that no dangling mocks exist by having each test class extend
trove_testtools.TestCase

Ran 'tox -epy27' and fixed any detected problems.

Change-Id: Ib43b86f74036a71c65bd2b1bd7b0905a1d8520b7
Partial-Bug: 1448273
This commit is contained in:
Peter Stachowski 2015-05-07 00:47:48 +00:00
parent 0d5de65cc8
commit 4be4daa8e1
7 changed files with 49 additions and 42 deletions

View File

@ -10,16 +10,16 @@
# 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.
import uuid
import testtools
import uuid
from trove.common import exception
from trove.guestagent.models import AgentHeartBeat
from trove.tests.unittests import trove_testtools
from trove.tests.unittests.util import util
class AgentHeartBeatTest(testtools.TestCase):
class AgentHeartBeatTest(trove_testtools.TestCase):
def setUp(self):
super(AgentHeartBeatTest, self).setUp()

View File

@ -11,13 +11,14 @@
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
from mock import MagicMock
import testtools
from trove.guestagent.db import models as dbmodels
from trove.tests.unittests import trove_testtools
class MySQLDatabaseTest(testtools.TestCase):
class MySQLDatabaseTest(trove_testtools.TestCase):
def setUp(self):
super(MySQLDatabaseTest, self).setUp()
@ -45,7 +46,7 @@ class MySQLDatabaseTest(testtools.TestCase):
self.assertFalse(self.mysqlDb._is_valid('mysql'))
class MySQLUserTest(testtools.TestCase):
class MySQLUserTest(trove_testtools.TestCase):
def setUp(self):
super(MySQLUserTest, self).setUp()
self.mysqlUser = dbmodels.MySQLUser()
@ -62,7 +63,7 @@ class MySQLUserTest(testtools.TestCase):
self.assertTrue(self.mysqlUser._is_valid("real_name"))
class IsValidUsernameTest(testtools.TestCase):
class IsValidUsernameTest(trove_testtools.TestCase):
def setUp(self):
super(IsValidUsernameTest, self).setUp()
self.mysqlUser = dbmodels.MySQLUser()
@ -87,7 +88,7 @@ class IsValidUsernameTest(testtools.TestCase):
self.assertFalse(self.mysqlUser._is_valid_user_name("king"))
class IsValidHostnameTest(testtools.TestCase):
class IsValidHostnameTest(trove_testtools.TestCase):
def setUp(self):
super(IsValidHostnameTest, self).setUp()
self.mysqlUser = dbmodels.MySQLUser()

View File

@ -14,21 +14,20 @@
from datetime import datetime
from mock import Mock, MagicMock
import testtools
from mock import Mock, MagicMock, patch
from trove.common import utils
from trove.db import models as dbmodels
from trove.db.sqlalchemy import api as dbapi
from trove.guestagent import models
from trove.tests.unittests import trove_testtools
class AgentHeartBeatTest(testtools.TestCase):
class AgentHeartBeatTest(trove_testtools.TestCase):
def setUp(self):
super(AgentHeartBeatTest, self).setUp()
self.origin_get_db_api = dbmodels.get_db_api
self.origin_utcnow = utils.utcnow
self.origin_DatabaseModelBase = dbmodels.DatabaseModelBase
self.origin_db_api_save = dbapi.save
self.origin_is_valid = dbmodels.DatabaseModelBase.is_valid
self.origin_generate_uuid = utils.generate_uuid
@ -37,7 +36,6 @@ class AgentHeartBeatTest(testtools.TestCase):
super(AgentHeartBeatTest, self).tearDown()
dbmodels.get_db_api = self.origin_get_db_api
utils.utcnow = self.origin_utcnow
dbmodels.DatabaseModelBase = self.origin_DatabaseModelBase
dbapi.save = self.origin_db_api_save
dbmodels.DatabaseModelBase.is_valid = self.origin_is_valid
utils.generate_uuid = self.origin_generate_uuid
@ -52,9 +50,9 @@ class AgentHeartBeatTest(testtools.TestCase):
self.assertEqual(3,
dbmodels.DatabaseModelBase.is_valid.call_count)
def test_save(self):
@patch('trove.db.models.DatabaseModelBase')
def test_save(self, dmb_mock):
utils.utcnow = Mock()
dbmodels.DatabaseModelBase = Mock
dbmodels.get_db_api = MagicMock(
return_value=dbmodels.DatabaseModelBase)
dbapi.save = Mock()

View File

@ -19,16 +19,16 @@ import stat
from mock import call, patch
from oslo_concurrency.processutils import UnknownArgumentError
import testtools
from testtools import ExpectedException
from trove.common import exception
from trove.common import utils
from trove.guestagent.common import operating_system
from trove.guestagent.common.operating_system import FileMode
from trove.tests.unittests import trove_testtools
class TestOperatingSystem(testtools.TestCase):
class TestOperatingSystem(trove_testtools.TestCase):
def test_modes(self):
self._assert_modes(None, None, None, operating_system.FileMode())

View File

@ -20,18 +20,19 @@ import subprocess
from mock import Mock, MagicMock, patch
import pexpect
import testtools
from trove.common import exception
from trove.common import utils
from trove.guestagent import pkg
from trove.tests.unittests import trove_testtools
"""
Unit tests for the classes and functions in pkg.py.
"""
class PkgDEBInstallTestCase(testtools.TestCase):
class PkgDEBInstallTestCase(trove_testtools.TestCase):
def setUp(self):
super(PkgDEBInstallTestCase, self).setUp()
@ -141,7 +142,7 @@ class PkgDEBInstallTestCase(testtools.TestCase):
self.pkgName, {}, 5000)
class PkgDEBRemoveTestCase(testtools.TestCase):
class PkgDEBRemoveTestCase(trove_testtools.TestCase):
def setUp(self):
super(PkgDEBRemoveTestCase, self).setUp()
@ -258,7 +259,7 @@ class PkgDEBRemoveTestCase(testtools.TestCase):
self.assertEqual(1, mock_call.call_count)
class PkgDEBVersionTestCase(testtools.TestCase):
class PkgDEBVersionTestCase(trove_testtools.TestCase):
def setUp(self):
super(PkgDEBVersionTestCase, self).setUp()
@ -288,7 +289,7 @@ class PkgDEBVersionTestCase(testtools.TestCase):
self.assertFalse(pkg.DebianPackagerMixin().pkg_version(self.pkgName))
class PkgRPMVersionTestCase(testtools.TestCase):
class PkgRPMVersionTestCase(trove_testtools.TestCase):
def setUp(self):
super(PkgRPMVersionTestCase, self).setUp()
@ -313,7 +314,7 @@ class PkgRPMVersionTestCase(testtools.TestCase):
self.assertEqual(self.pkgVersion, version)
class PkgRPMInstallTestCase(testtools.TestCase):
class PkgRPMInstallTestCase(trove_testtools.TestCase):
def setUp(self):
super(PkgRPMInstallTestCase, self).setUp()
@ -339,15 +340,15 @@ class PkgRPMInstallTestCase(testtools.TestCase):
def test_pkg_is_installed_yes(self):
packages = ["package1=1.0", "package2"]
commands.getstatusoutput = MagicMock(return_value={1: "package1=1.0\n"
"package2=2.0"})
self.assertTrue(self.pkg.pkg_is_installed(packages))
with patch.object(commands, 'getstatusoutput', MagicMock(
return_value={1: "package1=1.0\n" "package2=2.0"})):
self.assertTrue(self.pkg.pkg_is_installed(packages))
def test_pkg_is_installed_no(self):
packages = ["package1=1.0", "package2", "package3=3.0"]
commands.getstatusoutput = MagicMock(return_value={1: "package1=1.0\n"
"package2=2.0"})
self.assertFalse(self.pkg.pkg_is_installed(packages))
with patch.object(commands, 'getstatusoutput', MagicMock(
return_value={1: "package1=1.0\n" "package2=2.0"})):
self.assertFalse(self.pkg.pkg_is_installed(packages))
def test_permission_error(self):
# test
@ -449,7 +450,7 @@ class PkgRPMInstallTestCase(testtools.TestCase):
self.pkgName, {}, 5000)
class PkgRPMRemoveTestCase(testtools.TestCase):
class PkgRPMRemoveTestCase(trove_testtools.TestCase):
def setUp(self):
super(PkgRPMRemoveTestCase, self).setUp()
@ -513,7 +514,7 @@ class PkgRPMRemoveTestCase(testtools.TestCase):
self.pkgName, 5000)
class PkgDEBFixPackageSelections(testtools.TestCase):
class PkgDEBFixPackageSelections(trove_testtools.TestCase):
def setUp(self):
super(PkgDEBFixPackageSelections, self).setUp()

View File

@ -12,11 +12,11 @@
# License for the specific language governing permissions and limitations
# under the License.
import testtools
from trove.guestagent.common import sql_query
from trove.tests.unittests import trove_testtools
class QueryTestBase(testtools.TestCase):
class QueryTestBase(trove_testtools.TestCase):
def setUp(self):
super(QueryTestBase, self).setUp()

View File

@ -11,15 +11,16 @@
# 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 os
from mock import Mock, MagicMock, patch, mock_open
import pexpect
import testtools
from trove.common.exception import GuestError, ProcessExecutionError
from trove.common import utils
from trove.guestagent import volume
from trove.tests.unittests import trove_testtools
def _setUp_fake_spawn(return_val=0):
@ -29,7 +30,7 @@ def _setUp_fake_spawn(return_val=0):
return fake_spawn
class VolumeDeviceTest(testtools.TestCase):
class VolumeDeviceTest(trove_testtools.TestCase):
def setUp(self):
super(VolumeDeviceTest, self).setUp()
@ -38,6 +39,7 @@ class VolumeDeviceTest(testtools.TestCase):
def tearDown(self):
super(VolumeDeviceTest, self).tearDown()
@patch.object(pexpect, 'spawn', Mock())
def test_migrate_data(self):
origin_execute = utils.execute
utils.execute = Mock()
@ -67,18 +69,21 @@ class VolumeDeviceTest(testtools.TestCase):
self.assertRaises(GuestError,
self.volumeDevice._check_device_exists)
@patch.object(pexpect, 'spawn', Mock())
def test__check_format(self):
fake_spawn = _setUp_fake_spawn()
self.volumeDevice._check_format()
self.assertEqual(1, fake_spawn.expect.call_count)
@patch.object(pexpect, 'spawn', Mock())
def test__check_format_2(self):
fake_spawn = _setUp_fake_spawn(return_val=1)
self.assertEqual(0, fake_spawn.expect.call_count)
self.assertRaises(IOError, self.volumeDevice._check_format)
@patch.object(pexpect, 'spawn', Mock())
def test__format(self):
fake_spawn = _setUp_fake_spawn()
@ -151,6 +156,7 @@ class VolumeDeviceTest(testtools.TestCase):
def test_unmount_negative(self):
self._test_unmount(False)
@patch.object(pexpect, 'spawn', Mock())
def _test_unmount(self, positive=True):
origin_ = os.path.exists
os.path.exists = MagicMock(return_value=positive)
@ -195,7 +201,8 @@ class VolumeDeviceTest(testtools.TestCase):
self.volumeDevice._check_device_exists.assert_any_call()
class VolumeMountPointTest(testtools.TestCase):
class VolumeMountPointTest(trove_testtools.TestCase):
def setUp(self):
super(VolumeMountPointTest, self).setUp()
self.volumeMountPoint = volume.VolumeMountPoint('/mnt/device',
@ -204,18 +211,18 @@ class VolumeMountPointTest(testtools.TestCase):
def tearDown(self):
super(VolumeMountPointTest, self).tearDown()
@patch.object(pexpect, 'spawn', Mock())
def test_mount(self):
origin_ = os.path.exists
os.path.exists = MagicMock(return_value=False)
fake_spawn = _setUp_fake_spawn()
utils.execute_with_timeout = Mock()
with patch.object(utils, 'execute_with_timeout'):
self.volumeMountPoint.mount()
self.volumeMountPoint.mount()
self.assertEqual(1, os.path.exists.call_count)
self.assertEqual(1, utils.execute_with_timeout.call_count)
self.assertEqual(1, fake_spawn.expect.call_count)
self.assertEqual(1, os.path.exists.call_count)
self.assertEqual(1, utils.execute_with_timeout.call_count)
self.assertEqual(1, fake_spawn.expect.call_count)
os.path.exists = origin_