|
5 | 5 | import pytest
|
6 | 6 |
|
7 | 7 | try:
|
8 |
| - from snowflake.connector.backoff_policies import exponential_backoff, linear_backoff |
| 8 | + from snowflake.connector.backoff_policies import ( |
| 9 | + DEFAULT_BACKOFF_CAP, |
| 10 | + exponential_backoff, |
| 11 | + linear_backoff, |
| 12 | + ) |
9 | 13 | except ImportError:
|
10 | 14 | pass
|
11 | 15 |
|
12 | 16 |
|
13 | 17 | @pytest.mark.skipolddriver
|
14 | 18 | def test_linear_backoff():
|
| 19 | + # test default w/ config |
| 20 | + backoff_generator = linear_backoff()() |
| 21 | + # after 12 calls, we will reach the default max 16 and won't grow |
| 22 | + # 1, 3, 5, 7, 9, 11, 13, 15, 16, 16... |
| 23 | + assert max([next(backoff_generator) for _ in range(200)]) <= DEFAULT_BACKOFF_CAP |
| 24 | + |
| 25 | + # test default w/o enable_jitter config |
| 26 | + backoff_generator = linear_backoff(enable_jitter=False)() |
| 27 | + # after 12 calls, we will reach the default max 16 and won't grow |
| 28 | + # 1, 3, 5, 7, 9, 11, 13, 15, 16, 16... |
| 29 | + assert [next(backoff_generator) for _ in range(20)] == [ |
| 30 | + i for i in range(1, DEFAULT_BACKOFF_CAP, 2) |
| 31 | + ] + [DEFAULT_BACKOFF_CAP] * 12 |
| 32 | + |
| 33 | + # # test custom config |
15 | 34 | backoff_generator = linear_backoff(factor=2, base=1, cap=100, enable_jitter=False)()
|
16 |
| - assert [next(backoff_generator) for _ in range(5)] == [1, 3, 5, 7, 9] |
| 35 | + # after 50 calls, we will reach the max 100 and won't grow |
| 36 | + # 1, 3, 5, 7, 9, ... 100, 100, 100, 100, 100, max is the cap 100 |
| 37 | + assert [next(backoff_generator) for _ in range(60)] == [ |
| 38 | + i for i in range(1, 100, 2) |
| 39 | + ] + [100] * 10 |
17 | 40 |
|
18 | 41 |
|
19 | 42 | @pytest.mark.skipolddriver
|
20 | 43 | def test_exponential_backoff():
|
| 44 | + # test default w/ enable_jitter config |
| 45 | + backoff_generator = exponential_backoff()() |
| 46 | + # after 12 calls, we will reach the default max 16 and won't grow |
| 47 | + # 1, 3, 5, 7, 9, 11, 13, 15, 16, 16... |
| 48 | + assert max([next(backoff_generator) for _ in range(200)]) <= DEFAULT_BACKOFF_CAP |
| 49 | + |
| 50 | + # test default w/o enable_jitter config |
| 51 | + backoff_generator = exponential_backoff(enable_jitter=False)() |
| 52 | + # after 12 calls, we will reach the default max 16 and won't grow |
| 53 | + # 1, 3, 5, 7, 9, 11, 13, 15, 16, 16... |
| 54 | + assert [next(backoff_generator) for _ in range(20)] == [1, 2, 4, 8] + [ |
| 55 | + DEFAULT_BACKOFF_CAP |
| 56 | + ] * 16 |
| 57 | + |
| 58 | + # test custom config |
21 | 59 | backoff_generator = exponential_backoff(
|
22 | 60 | factor=2, base=1, cap=100, enable_jitter=False
|
23 | 61 | )()
|
24 |
| - assert [next(backoff_generator) for _ in range(5)] == [1, 2, 4, 8, 16] |
| 62 | + # after 7 calls, we will reach max which is the cap 100 and won't grow |
| 63 | + assert [next(backoff_generator) for _ in range(10)] == [ |
| 64 | + 1, |
| 65 | + 2, |
| 66 | + 4, |
| 67 | + 8, |
| 68 | + 16, |
| 69 | + 32, |
| 70 | + 64, |
| 71 | + 100, |
| 72 | + 100, |
| 73 | + 100, |
| 74 | + ] |
0 commit comments