Add unit tests for common repositories module
Add unit tests for repositories.mysql module. Change-Id: Ia834b87cf5619bdb2bdf471352600e69e53a3eea
This commit is contained in:
parent
52191ba73e
commit
6c78674266
93
monasca_common/tests/test_repositories.py
Normal file
93
monasca_common/tests/test_repositories.py
Normal file
@ -0,0 +1,93 @@
|
||||
# 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 unittest
|
||||
|
||||
import mock
|
||||
|
||||
import monasca_common.repositories.exceptions as exceptions
|
||||
from monasca_common.repositories.mysql import mysql_repository
|
||||
|
||||
|
||||
class TestMySQLRepository(unittest.TestCase):
|
||||
|
||||
def setUp(self):
|
||||
self.cfg_patcher = mock.patch('oslo_config.cfg.CONF')
|
||||
|
||||
self.mock_cfg = self.cfg_patcher.start()
|
||||
|
||||
def tearDown(self):
|
||||
self.cfg_patcher.stop()
|
||||
|
||||
def test_init(self):
|
||||
mysql_repository_obj = mysql_repository.MySQLRepository()
|
||||
|
||||
self.assertEqual(mysql_repository_obj.conf, self.mock_cfg)
|
||||
self.assertEqual(mysql_repository_obj.database_name,
|
||||
self.mock_cfg.mysql.database_name)
|
||||
self.assertEqual(mysql_repository_obj.database_server,
|
||||
self.mock_cfg.mysql.hostname)
|
||||
self.assertEqual(mysql_repository_obj.database_uid,
|
||||
self.mock_cfg.mysql.username)
|
||||
self.assertEqual(mysql_repository_obj.database_pwd,
|
||||
self.mock_cfg.mysql.password)
|
||||
|
||||
def test_init_with_exception(self):
|
||||
self.mock_cfg.mysql = None
|
||||
|
||||
self.assertRaises(exceptions.RepositoryException,
|
||||
mysql_repository.MySQLRepository)
|
||||
|
||||
@mock.patch('pymysql.cursors')
|
||||
@mock.patch('pymysql.connect')
|
||||
def test_execute_query(self, mock_pymysql_connect, mock_pymysql_cursors):
|
||||
query = mock.Mock()
|
||||
params = mock.Mock()
|
||||
ctx = mock_pymysql_connect.return_value
|
||||
cursor = ctx.cursor.return_value
|
||||
mysql_repository_obj = mysql_repository.MySQLRepository()
|
||||
|
||||
mysql_repository_obj._execute_query(query, params)
|
||||
|
||||
self.assertTrue(mock_pymysql_connect.called)
|
||||
ctx.cursor.assert_called_once_with(mock_pymysql_cursors.DictCursor)
|
||||
cursor.execute.assert_called_once_with(query, params)
|
||||
self.assertTrue(cursor.fetchall)
|
||||
|
||||
def _test_mysql_try_catch_block_decorator_with_exception(
|
||||
self, exception, expected_exception_class=None):
|
||||
@mysql_repository.mysql_try_catch_block
|
||||
def raise_exception():
|
||||
raise exception
|
||||
|
||||
if expected_exception_class is None:
|
||||
expected_exception_class = exception.__class__
|
||||
|
||||
self.assertRaises(expected_exception_class, raise_exception)
|
||||
|
||||
def test_mysql_try_catch_decorator_with_repository_exceptions(self):
|
||||
for exception in [exceptions.DoesNotExistException(),
|
||||
exceptions.AlreadyExistsException(),
|
||||
exceptions.InvalidUpdateException()]:
|
||||
self._test_mysql_try_catch_block_decorator_with_exception(
|
||||
exception)
|
||||
|
||||
@mock.patch('monasca_common.repositories.mysql.mysql_repository.LOG')
|
||||
def test_mysql_try_catch_decorator_with_non_repository_exception(
|
||||
self, mock_log):
|
||||
class NonRepositoryException(Exception):
|
||||
pass
|
||||
exception = NonRepositoryException()
|
||||
|
||||
self._test_mysql_try_catch_block_decorator_with_exception(
|
||||
exception, expected_exception_class=exceptions.RepositoryException)
|
||||
mock_log.exception.assert_called_once_with(exception)
|
Loading…
x
Reference in New Issue
Block a user