Add unit tests for guestagent.volume.py
- more clean up on test_manager.py - Migrate guestagent tests to unittest folder - modify guestagent.manager.py so it recognize '_' Bug # 1090139 Change-Id: I718a5212cd07c8bdb4e71796ba384574ce8275e9
This commit is contained in:
parent
4eb7e34ca9
commit
49bf821843
@ -2,7 +2,7 @@ from reddwarf.guestagent import dbaas
|
|||||||
from reddwarf.guestagent import volume
|
from reddwarf.guestagent import volume
|
||||||
from reddwarf.openstack.common import log as logging
|
from reddwarf.openstack.common import log as logging
|
||||||
from reddwarf.openstack.common import periodic_task
|
from reddwarf.openstack.common import periodic_task
|
||||||
|
from reddwarf.openstack.common.gettextutils import _
|
||||||
LOG = logging.getLogger(__name__)
|
LOG = logging.getLogger(__name__)
|
||||||
|
|
||||||
MYSQL_BASE_DIR = "/var/lib/mysql"
|
MYSQL_BASE_DIR = "/var/lib/mysql"
|
||||||
|
@ -1,13 +0,0 @@
|
|||||||
# Copyright 2011 OpenStack LLC
|
|
||||||
#
|
|
||||||
# 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.
|
|
@ -18,10 +18,7 @@ from reddwarf.guestagent import volume
|
|||||||
import testtools
|
import testtools
|
||||||
from mock import Mock, MagicMock
|
from mock import Mock, MagicMock
|
||||||
|
|
||||||
from proboscis import test
|
|
||||||
|
|
||||||
|
|
||||||
@test(groups=["dbaas.guestagent.dbaas"])
|
|
||||||
class GuestAgentManagerTest(testtools.TestCase):
|
class GuestAgentManagerTest(testtools.TestCase):
|
||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
@ -93,9 +90,6 @@ class GuestAgentManagerTest(testtools.TestCase):
|
|||||||
def test_prepare_device_path_false(self):
|
def test_prepare_device_path_false(self):
|
||||||
self._prepare_dynamic(has_device_path=False)
|
self._prepare_dynamic(has_device_path=False)
|
||||||
|
|
||||||
def test_prepare_mysql_installed(self):
|
|
||||||
self._prepare_dynamic(has_device_path=False)
|
|
||||||
|
|
||||||
def test_prepare_mysql_not_installed(self):
|
def test_prepare_mysql_not_installed(self):
|
||||||
self._prepare_dynamic(is_mysql_installed=False)
|
self._prepare_dynamic(is_mysql_installed=False)
|
||||||
|
|
||||||
@ -113,13 +107,13 @@ class GuestAgentManagerTest(testtools.TestCase):
|
|||||||
|
|
||||||
self._setUp_MySqlAppStatus_get()
|
self._setUp_MySqlAppStatus_get()
|
||||||
dbaas.MySqlAppStatus.begin_mysql_install = MagicMock()
|
dbaas.MySqlAppStatus.begin_mysql_install = MagicMock()
|
||||||
|
origin_format = volume.VolumeDevice.format
|
||||||
volume.VolumeDevice.format = MagicMock()
|
volume.VolumeDevice.format = MagicMock()
|
||||||
|
|
||||||
if is_mysql_installed:
|
origin_is_installed, origin_stop_mysql, origin_migrate_data =\
|
||||||
self._prepare_mysql_is_installed()
|
self._prepare_mysql_is_installed(is_mysql_installed)
|
||||||
else:
|
|
||||||
self._prepare_mysql_is_not_installed()
|
|
||||||
|
|
||||||
|
origin_mount = volume.VolumeDevice.mount
|
||||||
volume.VolumeDevice.mount = MagicMock()
|
volume.VolumeDevice.mount = MagicMock()
|
||||||
|
|
||||||
dbaas.MySqlApp.start_mysql = MagicMock()
|
dbaas.MySqlApp.start_mysql = MagicMock()
|
||||||
@ -148,13 +142,20 @@ class GuestAgentManagerTest(testtools.TestCase):
|
|||||||
self.assertEqual(1, Manager.create_database.call_count)
|
self.assertEqual(1, Manager.create_database.call_count)
|
||||||
self.assertEqual(1, Manager.create_user.call_count)
|
self.assertEqual(1, Manager.create_user.call_count)
|
||||||
|
|
||||||
def _prepare_mysql_is_installed(self):
|
volume.VolumeDevice.format = origin_format
|
||||||
dbaas.MySqlApp.is_installed = MagicMock(return_value=True)
|
volume.VolumeDevice.migrate_data = origin_migrate_data
|
||||||
|
dbaas.MySqlApp.is_installed = origin_is_installed
|
||||||
|
dbaas.MySqlApp.stop_mysql = origin_stop_mysql
|
||||||
|
volume.VolumeDevice.mount = origin_mount
|
||||||
|
|
||||||
|
def _prepare_mysql_is_installed(self, is_installed=True):
|
||||||
|
origin_is_installed = dbaas.MySqlApp.is_installed
|
||||||
|
origin_stop_mysql = dbaas.MySqlApp.stop_mysql
|
||||||
|
origin_migrate_data = volume.VolumeDevice.migrate_data
|
||||||
|
dbaas.MySqlApp.is_installed = MagicMock(return_value=is_installed)
|
||||||
dbaas.MySqlApp.stop_mysql = MagicMock()
|
dbaas.MySqlApp.stop_mysql = MagicMock()
|
||||||
volume.VolumeDevice.migrate_data = MagicMock()
|
volume.VolumeDevice.migrate_data = MagicMock()
|
||||||
|
return origin_is_installed, origin_stop_mysql, origin_migrate_data
|
||||||
def _prepare_mysql_is_not_installed(self):
|
|
||||||
dbaas.MySqlApp.is_installed = MagicMock(return_value=False)
|
|
||||||
|
|
||||||
def test_restart(self):
|
def test_restart(self):
|
||||||
self._setUp_MySqlAppStatus_get()
|
self._setUp_MySqlAppStatus_get()
|
@ -16,14 +16,11 @@ import testtools
|
|||||||
from mock import Mock, MagicMock
|
from mock import Mock, MagicMock
|
||||||
from reddwarf.guestagent import models
|
from reddwarf.guestagent import models
|
||||||
from reddwarf.common import utils
|
from reddwarf.common import utils
|
||||||
from reddwarf.db import sqlalchemy
|
from reddwarf.db.sqlalchemy import api as dbapi
|
||||||
from reddwarf.db import models as dbmodels
|
from reddwarf.db import models as dbmodels
|
||||||
from proboscis import test
|
|
||||||
|
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
|
|
||||||
@test(groups=["dbaas.guestagent.dbaas"])
|
|
||||||
class AgentHeartBeatTest(testtools.TestCase):
|
class AgentHeartBeatTest(testtools.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(AgentHeartBeatTest, self).setUp()
|
super(AgentHeartBeatTest, self).setUp()
|
||||||
@ -33,7 +30,7 @@ class AgentHeartBeatTest(testtools.TestCase):
|
|||||||
|
|
||||||
def test_create(self):
|
def test_create(self):
|
||||||
utils.generate_uuid = Mock()
|
utils.generate_uuid = Mock()
|
||||||
sqlalchemy.api.save = MagicMock(
|
dbapi.save = MagicMock(
|
||||||
return_value=dbmodels.DatabaseModelBase)
|
return_value=dbmodels.DatabaseModelBase)
|
||||||
dbmodels.DatabaseModelBase.is_valid = Mock(return_value=True)
|
dbmodels.DatabaseModelBase.is_valid = Mock(return_value=True)
|
||||||
models.AgentHeartBeat.create()
|
models.AgentHeartBeat.create()
|
||||||
@ -46,7 +43,7 @@ class AgentHeartBeatTest(testtools.TestCase):
|
|||||||
dbmodels.DatabaseModelBase = Mock
|
dbmodels.DatabaseModelBase = Mock
|
||||||
dbmodels.get_db_api = MagicMock(
|
dbmodels.get_db_api = MagicMock(
|
||||||
return_value=dbmodels.DatabaseModelBase)
|
return_value=dbmodels.DatabaseModelBase)
|
||||||
sqlalchemy.api.save = Mock()
|
dbapi.save = Mock()
|
||||||
dbmodels.DatabaseModelBase.is_valid = Mock(return_value=True)
|
dbmodels.DatabaseModelBase.is_valid = Mock(return_value=True)
|
||||||
self.heartBeat = models.AgentHeartBeat()
|
self.heartBeat = models.AgentHeartBeat()
|
||||||
self.heartBeat.save()
|
self.heartBeat.save()
|
@ -14,10 +14,8 @@
|
|||||||
|
|
||||||
import testtools
|
import testtools
|
||||||
from reddwarf.guestagent import query
|
from reddwarf.guestagent import query
|
||||||
from proboscis import test
|
|
||||||
|
|
||||||
|
|
||||||
@test(groups=["dbaas.guestagent.dbaas"])
|
|
||||||
class QueryTest(testtools.TestCase):
|
class QueryTest(testtools.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(QueryTest, self).setUp()
|
super(QueryTest, self).setUp()
|
@ -15,10 +15,8 @@
|
|||||||
import testtools
|
import testtools
|
||||||
from mock import Mock, MagicMock
|
from mock import Mock, MagicMock
|
||||||
from reddwarf.guestagent import service
|
from reddwarf.guestagent import service
|
||||||
from proboscis import test
|
|
||||||
|
|
||||||
|
|
||||||
@test(groups=["dbaas.guestagent.dbaas"])
|
|
||||||
class ServiceTest(testtools.TestCase):
|
class ServiceTest(testtools.TestCase):
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super(ServiceTest, self).setUp()
|
super(ServiceTest, self).setUp()
|
180
reddwarf/tests/unittests/guestagent/test_volume.py
Normal file
180
reddwarf/tests/unittests/guestagent/test_volume.py
Normal file
@ -0,0 +1,180 @@
|
|||||||
|
# Copyright 2012 OpenStack LLC
|
||||||
|
#
|
||||||
|
# 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
|
||||||
|
import os
|
||||||
|
import testtools
|
||||||
|
import pexpect
|
||||||
|
from mock import Mock, MagicMock
|
||||||
|
from reddwarf.guestagent import volume
|
||||||
|
from reddwarf.common import utils
|
||||||
|
|
||||||
|
|
||||||
|
def _setUp_fake_spawn(return_val=0):
|
||||||
|
fake_spawn = pexpect.spawn('echo')
|
||||||
|
fake_spawn.expect = Mock(return_value=return_val)
|
||||||
|
pexpect.spawn = Mock(return_value=fake_spawn)
|
||||||
|
return fake_spawn
|
||||||
|
|
||||||
|
|
||||||
|
class VolumeDeviceTest(testtools.TestCase):
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(VolumeDeviceTest, self).setUp()
|
||||||
|
self.volumeDevice = volume.VolumeDevice('/dev/vdb')
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
super(VolumeDeviceTest, self).tearDown()
|
||||||
|
|
||||||
|
def test_migrate_data(self):
|
||||||
|
origin_execute = utils.execute
|
||||||
|
utils.execute = Mock()
|
||||||
|
|
||||||
|
origin_tmp_mount = self.volumeDevice._tmp_mount
|
||||||
|
origin_unmount = self.volumeDevice.unmount
|
||||||
|
self.volumeDevice._tmp_mount = MagicMock()
|
||||||
|
self.volumeDevice.unmount = MagicMock()
|
||||||
|
self.volumeDevice.migrate_data('/')
|
||||||
|
self.assertEqual(2, utils.execute.call_count)
|
||||||
|
self.assertEqual(1, self.volumeDevice._tmp_mount.call_count)
|
||||||
|
self.assertEqual(1, self.volumeDevice.unmount.call_count)
|
||||||
|
utils.execute = origin_execute
|
||||||
|
self.volumeDevice._tmp_mount = origin_tmp_mount
|
||||||
|
self.volumeDevice.unmount = origin_unmount
|
||||||
|
|
||||||
|
def test__check_device_exists(self):
|
||||||
|
origin_execute = utils.execute
|
||||||
|
utils.execute = Mock()
|
||||||
|
self.volumeDevice._check_device_exists()
|
||||||
|
self.assertEqual(1, utils.execute.call_count)
|
||||||
|
utils.execute = origin_execute
|
||||||
|
|
||||||
|
def test__check_format(self):
|
||||||
|
fake_spawn = _setUp_fake_spawn()
|
||||||
|
|
||||||
|
self.volumeDevice._check_format()
|
||||||
|
self.assertEqual(1, fake_spawn.expect.call_count)
|
||||||
|
|
||||||
|
def test__check_format_2(self):
|
||||||
|
fake_spawn = _setUp_fake_spawn(return_val=1)
|
||||||
|
self.assertRaises(IOError, self.volumeDevice._check_format)
|
||||||
|
|
||||||
|
def test__format(self):
|
||||||
|
fake_spawn = _setUp_fake_spawn()
|
||||||
|
|
||||||
|
self.volumeDevice._format()
|
||||||
|
|
||||||
|
self.assertEqual(1, fake_spawn.expect.call_count)
|
||||||
|
self.assertEqual(1, pexpect.spawn.call_count)
|
||||||
|
|
||||||
|
def test_format(self):
|
||||||
|
origin_check_device_exists = self.volumeDevice._check_device_exists
|
||||||
|
origin_format = self.volumeDevice._format
|
||||||
|
origin_check_format = self.volumeDevice._check_format
|
||||||
|
self.volumeDevice._check_device_exists = MagicMock()
|
||||||
|
self.volumeDevice._check_format = MagicMock()
|
||||||
|
self.volumeDevice._format = MagicMock()
|
||||||
|
|
||||||
|
self.volumeDevice.format()
|
||||||
|
self.assertEqual(1, self.volumeDevice._check_device_exists.call_count)
|
||||||
|
self.assertEqual(1, self.volumeDevice._format.call_count)
|
||||||
|
self.assertEqual(1, self.volumeDevice._check_format.call_count)
|
||||||
|
|
||||||
|
self.volumeDevice._check_device_exists = origin_check_device_exists
|
||||||
|
self.volumeDevice._format = origin_format
|
||||||
|
self.volumeDevice._check_format = origin_check_format
|
||||||
|
|
||||||
|
def test_mount(self):
|
||||||
|
origin_ = volume.VolumeMountPoint.mount
|
||||||
|
volume.VolumeMountPoint.mount = Mock()
|
||||||
|
origin_write_to_fstab = volume.VolumeMountPoint.write_to_fstab
|
||||||
|
volume.VolumeMountPoint.write_to_fstab = Mock()
|
||||||
|
|
||||||
|
self.volumeDevice.mount(Mock)
|
||||||
|
self.assertEqual(1, volume.VolumeMountPoint.mount.call_count)
|
||||||
|
self.assertEqual(1, volume.VolumeMountPoint.write_to_fstab.call_count)
|
||||||
|
volume.VolumeMountPoint.mount = origin_
|
||||||
|
volume.VolumeMountPoint.write_to_fstab = origin_write_to_fstab
|
||||||
|
|
||||||
|
def test_resize_fs(self):
|
||||||
|
origin_check_device_exists = self.volumeDevice._check_device_exists
|
||||||
|
origin_execute = utils.execute
|
||||||
|
utils.execute = Mock()
|
||||||
|
self.volumeDevice._check_device_exists = MagicMock()
|
||||||
|
|
||||||
|
self.volumeDevice.resize_fs()
|
||||||
|
|
||||||
|
self.assertEqual(1, self.volumeDevice._check_device_exists.call_count)
|
||||||
|
self.assertEqual(1, utils.execute.call_count)
|
||||||
|
self.volumeDevice._check_device_exists = origin_check_device_exists
|
||||||
|
utils.execute = origin_execute
|
||||||
|
|
||||||
|
def test__tmp_mount(self):
|
||||||
|
origin_ = volume.VolumeMountPoint.mount
|
||||||
|
volume.VolumeMountPoint.mount = Mock()
|
||||||
|
|
||||||
|
self.volumeDevice._tmp_mount(Mock)
|
||||||
|
self.assertEqual(1, volume.VolumeMountPoint.mount.call_count)
|
||||||
|
volume.VolumeMountPoint.mount = origin_
|
||||||
|
|
||||||
|
def test_unmount_positive(self):
|
||||||
|
self._test_unmount()
|
||||||
|
|
||||||
|
def test_unmount_negative(self):
|
||||||
|
self._test_unmount(False)
|
||||||
|
|
||||||
|
def _test_unmount(self, positive=True):
|
||||||
|
origin_ = os.path.exists
|
||||||
|
os.path.exists = MagicMock(return_value=positive)
|
||||||
|
fake_spawn = _setUp_fake_spawn()
|
||||||
|
|
||||||
|
self.volumeDevice.unmount()
|
||||||
|
COUNT = 1
|
||||||
|
if not positive:
|
||||||
|
COUNT = 0
|
||||||
|
self.assertEqual(COUNT, fake_spawn.expect.call_count)
|
||||||
|
os.path.exists = origin_
|
||||||
|
|
||||||
|
|
||||||
|
class VolumeMountPointTest(testtools.TestCase):
|
||||||
|
def setUp(self):
|
||||||
|
super(VolumeMountPointTest, self).setUp()
|
||||||
|
self.volumeMountPoint = volume.VolumeMountPoint('/mnt/device',
|
||||||
|
'/dev/vdb')
|
||||||
|
|
||||||
|
def tearDown(self):
|
||||||
|
super(VolumeMountPointTest, self).tearDown()
|
||||||
|
|
||||||
|
def test_mount(self):
|
||||||
|
origin_ = os.path.exists
|
||||||
|
os.path.exists = MagicMock(return_value=False)
|
||||||
|
fake_spawn = _setUp_fake_spawn()
|
||||||
|
|
||||||
|
os.makedirs = MagicMock()
|
||||||
|
|
||||||
|
self.volumeMountPoint.mount()
|
||||||
|
|
||||||
|
self.assertEqual(1, os.path.exists.call_count)
|
||||||
|
self.assertEqual(1, os.makedirs.call_count)
|
||||||
|
self.assertEqual(1, fake_spawn.expect.call_count)
|
||||||
|
|
||||||
|
os.path.exists = origin_
|
||||||
|
|
||||||
|
def test_write_to_fstab(self):
|
||||||
|
origin_execute = utils.execute
|
||||||
|
utils.execute = Mock()
|
||||||
|
open = MagicMock()
|
||||||
|
|
||||||
|
self.volumeMountPoint.write_to_fstab()
|
||||||
|
|
||||||
|
self.assertEqual(5, utils.execute.call_count)
|
||||||
|
utils.execute = origin_execute
|
@ -123,9 +123,5 @@ if __name__=="__main__":
|
|||||||
from reddwarf.tests.api.mgmt import admin_required
|
from reddwarf.tests.api.mgmt import admin_required
|
||||||
from reddwarf.tests.api.mgmt import instances
|
from reddwarf.tests.api.mgmt import instances
|
||||||
from reddwarf.tests.api.mgmt import storage
|
from reddwarf.tests.api.mgmt import storage
|
||||||
from reddwarf.tests.guestagent import test_manager
|
|
||||||
from reddwarf.tests.guestagent import test_service
|
|
||||||
from reddwarf.tests.guestagent import test_query
|
|
||||||
from reddwarf.tests.guestagent import test_models
|
|
||||||
|
|
||||||
proboscis.TestProgram().run_and_exit()
|
proboscis.TestProgram().run_and_exit()
|
||||||
|
Loading…
Reference in New Issue
Block a user