def test_raise_connection_error_decorated(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}) self.test_db_api.error_counter = 5 self.assertRaises(exception.DBConnectionError, self.dbapi.api_raise_enable_retry) self.assertEqual(4, self.test_db_api.error_counter, 'Unexpected retry')
def test_raise_deadlock_error_connection_error_decorated(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}, use_db_reconnect=True) self.test_db_api.error_counter = 5 self.assertRaises( exception.DBDeadlock, self.dbapi.api_raise_deadlock_safe_db_retry_decorated)
def test_raise_deadlock_error_db_reconnect_enabled(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}, use_db_reconnect=True) self.test_db_api.error_counter = 5 self.assertRaises(exception.DBDeadlock, self.dbapi.api_raise_deadlock_err_default) self.assertEqual(4, self.test_db_api.error_counter, 'Unexpected retry')
def test_retry_one(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}, retry_interval=1) func = self.dbapi.api_raise_deadlock_err_decorated self.test_db_api.error_counter = 1 self.assertTrue(func(), 'Single retry did not succeed.') self.assertEqual( 0, self.test_db_api.error_counter, 'Counter not decremented, retry logic probably failed.')
def test_retry_two_different_exception(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}, use_db_reconnect=True, retry_interval=1, inc_retry_interval=False) func = self.dbapi.api_raise_deadlock_err_two_decorators self.test_db_api.error_counter = 2 self.assertTrue(func(), 'Multiple retry did not succeed.') self.assertEqual( 0, self.test_db_api.error_counter, 'Counter not decremented, retry logic probably failed.')
def test_retry_one(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}, use_db_reconnect=True, retry_interval=1) try: func = self.dbapi.api_raise_enable_retry self.test_db_api.error_counter = 1 self.assertTrue(func(), 'Single retry did not succeed.') except Exception: self.fail('Single retry raised an un-wrapped error.') self.assertEqual( 0, self.test_db_api.error_counter, 'Counter not decremented, retry logic probably failed.')
def test_retry_until_failure(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}, use_db_reconnect=True, retry_interval=1, inc_retry_interval=False, max_retries=3) func = self.dbapi.api_raise_enable_retry self.test_db_api.error_counter = 5 self.assertRaises( exception.DBError, func, 'Retry of permanent failure did not throw DBError exception.') self.assertNotEqual( 0, self.test_db_api.error_counter, 'Retry did not stop after sql_max_retries iterations.')
# 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 contextlib from oslo.db import api as db_api from highlander.openstack.common import log as logging _BACKEND_MAPPING = { 'sqlalchemy': 'highlander.db.v1.sqlalchemy.api', } IMPL = db_api.DBAPI('sqlalchemy', backend_mapping=_BACKEND_MAPPING) LOG = logging.getLogger(__name__) def setup_db(): IMPL.setup_db() def drop_db(): IMPL.drop_db() # Transaction control. def start_tx():
def test_dbapi_lazy_loading(self): dbapi = api.DBAPI('tests.test_api', lazy=True) self.assertIsNone(dbapi._backend) dbapi.api_class_call1(1, 'abc') self.assertIsNotNone(dbapi._backend)
def test_dbapi_full_path_module_method(self): dbapi = api.DBAPI('tests.test_api') result = dbapi.api_class_call1(1, 2, kwarg1='meow') expected = ((1, 2), {'kwarg1': 'meow'}) self.assertEqual(expected, result)
def test_raise_connection_error(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}) self.test_db_api.error_counter = 5 self.assertRaises(exception.DBConnectionError, self.dbapi._api_raise)
def test_raise_deadlock_error(self): self.dbapi = api.DBAPI('sqlalchemy', {'sqlalchemy': __name__}) self.test_db_api.error_counter = 5 self.assertRaises(exception.DBDeadlock, self.dbapi.api_raise_deadlock_err_default)