Add test case for additional scenario we were missing.
diff --git a/libcloud/test/test_connection.py b/libcloud/test/test_connection.py
index 7a87aed..445cea1 100644
--- a/libcloud/test/test_connection.py
+++ b/libcloud/test/test_connection.py
@@ -35,6 +35,7 @@
from libcloud.http import SignedHTTPSAdapter
from libcloud.utils.retry import Retry
from libcloud.utils.retry import RetryForeverOnRateLimitError
+from libcloud.utils.retry import RETRY_EXCEPTIONS
from libcloud.utils.py3 import assertRaisesRegex
@@ -559,6 +560,32 @@
self.assertEqual(mock_connect.call_count, 2,
'Retry logic failed')
+ @patch('libcloud.common.base.Connection.request')
+ def test_retry_on_all_default_retry_exception_classes(self, mock_connect):
+ con = Connection()
+ con.connection = Mock()
+ connect_method = 'libcloud.common.base.Connection.request'
+
+ self.retry_counter = 0
+
+ def mock_connect_side_effect(*args, **kwargs):
+ self.retry_counter += 1
+
+ if self.retry_counter < len(RETRY_EXCEPTIONS):
+ raise RETRY_EXCEPTIONS[self.retry_counter]
+
+ return 'success'
+
+ mock_connect.__name__ = 'mock_connect'
+ mock_connect.side_effect = mock_connect_side_effect
+ retry_request = Retry(timeout=0.6, retry_delay=0.1,
+ backoff=1)
+ result = retry_request(con.request)(action='/')
+ self.assertEqual(result, "success")
+
+ self.assertEqual(mock_connect.call_count, len(RETRY_EXCEPTIONS),
+ 'Retry logic failed')
+
class CertificateConnectionClassTestCase(unittest.TestCase):
def setUp(self):
diff --git a/libcloud/utils/retry.py b/libcloud/utils/retry.py
index cb48d74..49418a4 100644
--- a/libcloud/utils/retry.py
+++ b/libcloud/utils/retry.py
@@ -40,7 +40,7 @@
# Constants used by the ``retry`` class
-
+# All the time values (timeout, delay, backoff) are in seconds
DEFAULT_TIMEOUT = 30 # default retry timeout
DEFAULT_DELAY = 1 # default sleep delay used in each iterator
DEFAULT_BACKOFF = 1 # retry backup multiplier