Example #1
0
  def _runTransientErrorRetryTest(self, numErrors):

    for errorCode in _ALL_RETRIABLE_ERROR_CODES:
      clientSideEffects = [sqlalchemy.exc.OperationalError(
                            orig=MySQLdb.OperationalError(errorCode),
                            statement="err", params=None)] \
                            * numErrors + [DEFAULT]
      serverSideEffects = [sqlalchemy.exc.InternalError(
                            orig=MySQLdb.InternalError(errorCode),
                            statement="err", params=None)] \
                            * numErrors + [DEFAULT]

      if 3000 > errorCode >= 2000:
        # The error is client side. Return one operationalError, then pass
        with patch.object(Engine,
                          "execute",
                          spec_set=Engine.execute,
                          side_effect=clientSideEffects) \
            as mockExecute:
          retryOnTransientErrors(mockExecute)(Mock())
          self.assertEqual(mockExecute.call_count, numErrors + 1)

      elif errorCode >= 1000:
        # The error is server side. Return one internalError, then pass
        with patch.object(Engine,
                          "execute",
                          spec_set=Engine.execute,
                          side_effect=serverSideEffects) \
            as mockExecute:
          retryOnTransientErrors(mockExecute)(Mock())
          self.assertEqual(mockExecute.call_count, numErrors + 1)

      else:
        self.fail("Error code is neither client nor server: %s" % errorCode)
Example #2
0
 def test_mysql_command_internal_error(self, db_cursor_mock,
                                       setup_mysql_loop_mock):
     db_cursor_mock.execute.side_effect = MySQLdb.InternalError()
     setup_mysql_loop_mock.side_effect = exceptions.DbError()
     self.assertRaises(exceptions.DbError, self.db.mysql_command, 'execute',
                       'test_sql', True, 'test_arg')
     db_cursor_mock.execute.assert_called_once_with('test_sql',
                                                    ('test_arg', ))