def test_reconnect_noConnectionMethod(self): """ Reconnection is not possible is the setConnect method hasn't been called. """ exc = Exception('foo') class BadConn(object): def __init__(self): self.called = [] def runQuery(self, *args): self.called.append(args) return defer.fail(exc) c1 = BadConn() pool = ConnectionPool() pool.add(c1) result = pool.runQuery('something', 'ran') self.assertEqual(self.failureResultOf(result).value, exc) self.assertEqual(len(c1.called), 1) self.assertIn(('something', 'ran'), c1.called)
def test_reconnect(self): """ If a query fails, make sure it wasn't just closed, reconnect and retry if it was. """ class BadConn(object): def __init__(self): self.called = [] def runQuery(self, *args): self.called.append(args) return defer.fail(Exception('foo')) c1 = BadConn() c2 = MagicMock() c2.runQuery.return_value = defer.succeed('success') pool = ConnectionPool() pool.add(c1) pool.setConnect(lambda:c2) result = yield pool.runQuery('something', 'ran') self.assertEqual(len(c1.called), 2) self.assertIn(('something', 'ran'), c1.called) c2.runQuery.assert_any_call('something', 'ran') self.assertEqual(pool.pool.list(), [c2], "Should have the new conn " "in the pool") self.assertEqual(result, 'success', "Should have eventually succeeded")
def test_runQuery(self): """ You can run a query """ mock = MagicMock() mock.runQuery = MagicMock(return_value=defer.succeed('success')) pool = ConnectionPool() pool.add(mock) d = pool.runQuery('my query') self.assertEqual(self.successResultOf(d), 'success') mock.runQuery.assert_called_once_with('my query')
def test_returnToPool(self): """ After a successful query, interaction or operation, the connection should be returned to the pool """ mock = MagicMock() mock.runInteraction = MagicMock(return_value=defer.fail(Exception('foo'))) mock.runQuery = MagicMock(return_value=defer.succeed('something')) mock.runOperation = MagicMock(return_value=defer.succeed('success')) pool = ConnectionPool() pool.add(mock) d = pool.runQuery('query') self.assertEqual(self.successResultOf(d), 'something') d = pool.runOperation('operation') self.assertEqual(self.successResultOf(d), 'success') d = pool.runInteraction('interaction') self.assertIsInstance(self.failureResultOf(d).value, Exception)