Merge "Improve coverage in guestagent and backup models"

This commit is contained in:
Jenkins 2016-08-03 20:38:17 +00:00 committed by Gerrit Code Review
commit fe324eb46b
2 changed files with 109 additions and 2 deletions

View File

@ -16,12 +16,15 @@ import datetime
from mock import DEFAULT from mock import DEFAULT
from mock import MagicMock from mock import MagicMock
from mock import patch from mock import patch
from swiftclient.client import ClientException
from trove.backup import models from trove.backup import models
from trove.backup import state from trove.backup import state
from trove.common import context from trove.common import context
from trove.common import exception from trove.common import exception
from trove.common import remote
from trove.common import utils from trove.common import utils
from trove.db.models import DatabaseModelBase
from trove.instance import models as instance_models from trove.instance import models as instance_models
from trove.taskmanager import api from trove.taskmanager import api
from trove.tests.unittests import trove_testtools from trove.tests.unittests import trove_testtools
@ -190,8 +193,6 @@ class BackupCreateTest(trove_testtools.TestCase):
instance = MagicMock() instance = MagicMock()
with patch.object(instance_models.BuiltInstance, 'load', with patch.object(instance_models.BuiltInstance, 'load',
return_value=instance): return_value=instance):
instance.validate_can_perform_action = MagicMock(
return_value=None)
with patch.object( with patch.object(
models.Backup, 'validate_can_perform_action', models.Backup, 'validate_can_perform_action',
side_effect=exception.DatastoreOperationNotSupported side_effect=exception.DatastoreOperationNotSupported
@ -201,6 +202,39 @@ class BackupCreateTest(trove_testtools.TestCase):
self.context, self.instance_id, self.context, self.instance_id,
BACKUP_NAME, BACKUP_DESC) BACKUP_NAME, BACKUP_DESC)
def test_create_backup_cluster_instance_operation_not_supported(self):
instance = MagicMock()
instance.cluster_id = 'bad_id'
with patch.object(instance_models.BuiltInstance, 'load',
return_value=instance),\
patch.object(models.Backup, 'validate_can_perform_action',
return_value=None),\
patch.object(models.Backup, 'verify_swift_auth_token',
return_value=None):
self.assertRaises(exception.ClusterInstanceOperationNotSupported,
models.Backup.create,
self.context, self.instance_id,
BACKUP_NAME, BACKUP_DESC)
def test_create_backup_creation_error(self):
instance = MagicMock()
instance.cluster_id = None
with patch.object(instance_models.BuiltInstance, 'load',
return_value=instance),\
patch.object(models.Backup, 'validate_can_perform_action',
return_value=None),\
patch.object(models.Backup, 'verify_swift_auth_token',
return_value=None),\
patch.object(DatabaseModelBase, 'is_valid',
return_value=False),\
patch('trove.quota.quota.QuotaEngine.reserve',
return_value=[]):
DatabaseModelBase.errors = {}
self.assertRaises(exception.BackupCreationError,
models.Backup.create,
self.context, self.instance_id,
BACKUP_NAME, BACKUP_DESC)
class BackupDeleteTest(trove_testtools.TestCase): class BackupDeleteTest(trove_testtools.TestCase):
def setUp(self): def setUp(self):
@ -357,6 +391,57 @@ class BackupORMTest(trove_testtools.TestCase):
def test_filename(self): def test_filename(self):
self.assertEqual(BACKUP_FILENAME, self.backup.filename) self.assertEqual(BACKUP_FILENAME, self.backup.filename)
def test_filename_bad(self):
def _set_bad_filename():
self.backup.location = 'bad'
self.backup.filename
self.assertRaises(ValueError, _set_bad_filename)
def test_check_swift_object_exist_integrity_error(self):
mock_client = MagicMock()
mock_client.head_object.return_value = {'etag': ''}
with patch.object(remote, 'get_endpoint', return_value=None),\
patch.object(remote, 'Connection',
return_value=mock_client):
self.assertRaises(exception.RestoreBackupIntegrityError,
self.backup.check_swift_object_exist,
self.context, True)
def test_check_swift_object_exist_client_exception(self):
with patch.object(remote, 'get_endpoint', return_value=None),\
patch.object(remote, 'Connection',
side_effect=ClientException(self.context.tenant)):
self.assertRaises(exception.SwiftAuthError,
self.backup.check_swift_object_exist,
self.context)
def test_check_swift_object_exist_client_exception_404(self):
e = ClientException(self.context.tenant)
e.http_status = 404
with patch.object(remote, 'get_endpoint', return_value=None),\
patch.object(remote, 'Connection',
side_effect=e):
self.assertFalse(
self.backup.check_swift_object_exist(self.context))
def test_swift_auth_token_client_exception(self):
with patch.object(remote, 'get_endpoint', return_value=None),\
patch.object(remote, 'Connection',
side_effect=ClientException(self.context.tenant)):
self.assertRaises(exception.SwiftAuthError,
models.Backup.verify_swift_auth_token,
self.context)
def test_swift_auth_token_no_service_endpoint(self):
with patch.object(remote, 'get_endpoint', return_value=None),\
patch.object(remote, 'Connection',
side_effect=exception.NoServiceEndpoint):
self.assertRaises(exception.SwiftNotFound,
models.Backup.verify_swift_auth_token,
self.context)
class PaginationTests(trove_testtools.TestCase): class PaginationTests(trove_testtools.TestCase):

View File

@ -11,6 +11,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
from mock import Mock
from mock import patch from mock import patch
import uuid import uuid
@ -63,6 +64,27 @@ class AgentHeartBeatTest(trove_testtools.TestCase):
self.assertIsNotNone(heartbeat.guest_agent_version) self.assertIsNotNone(heartbeat.guest_agent_version)
self.assertEqual("1.2.3", heartbeat.guest_agent_version) self.assertEqual("1.2.3", heartbeat.guest_agent_version)
def test_create_invalid_model_error(self):
"""
Test the creation failure of a new agent heartbeat record
"""
instance = Mock()
instance.errors = {}
instance.is_valid = Mock(return_value=False)
with patch.object(AgentHeartBeat, 'save', return_value=instance):
self.assertRaises(exception.InvalidModelError,
AgentHeartBeat.create)
def test_save_invalid_model_error(self):
"""
Test the save failure of an agent heartbeat record
"""
instance_id = str(uuid.uuid4())
heartbeat = AgentHeartBeat.create(
instance_id=instance_id)
with patch.object(AgentHeartBeat, 'is_valid', return_value=False):
self.assertRaises(exception.InvalidModelError, heartbeat.save)
def test_find_by_instance_id(self): def test_find_by_instance_id(self):
""" """
Test to retrieve a guest agents by its id Test to retrieve a guest agents by its id