|
16 | 16 |
|
17 | 17 | from unittest import mock |
18 | 18 |
|
| 19 | +import grpc |
19 | 20 | import pytest |
20 | 21 |
|
21 | 22 | from google.api_core import exceptions as core_exceptions |
@@ -125,3 +126,51 @@ def callback(): |
125 | 126 | assert error_context.value.cause is error |
126 | 127 | assert sleep.call_count == 5 |
127 | 128 | assert sleep.call_args[0][0] == 4 |
| 129 | + |
| 130 | + |
| 131 | +class Test_is_transient_error: |
| 132 | + @staticmethod |
| 133 | + @mock.patch("google.cloud.ndb._retry.core_retry") |
| 134 | + def test_core_says_yes(core_retry): |
| 135 | + error = object() |
| 136 | + core_retry.if_transient_error.return_value = True |
| 137 | + assert _retry.is_transient_error(error) is True |
| 138 | + core_retry.if_transient_error.assert_called_once_with(error) |
| 139 | + |
| 140 | + @staticmethod |
| 141 | + @mock.patch("google.cloud.ndb._retry.core_retry") |
| 142 | + def test_core_says_no_we_say_no(core_retry): |
| 143 | + error = object() |
| 144 | + core_retry.if_transient_error.return_value = False |
| 145 | + assert _retry.is_transient_error(error) is False |
| 146 | + core_retry.if_transient_error.assert_called_once_with(error) |
| 147 | + |
| 148 | + @staticmethod |
| 149 | + @mock.patch("google.cloud.ndb._retry.core_retry") |
| 150 | + def test_unavailable(core_retry): |
| 151 | + error = mock.Mock( |
| 152 | + code=mock.Mock(return_value=grpc.StatusCode.UNAVAILABLE) |
| 153 | + ) |
| 154 | + core_retry.if_transient_error.return_value = False |
| 155 | + assert _retry.is_transient_error(error) is True |
| 156 | + core_retry.if_transient_error.assert_called_once_with(error) |
| 157 | + |
| 158 | + @staticmethod |
| 159 | + @mock.patch("google.cloud.ndb._retry.core_retry") |
| 160 | + def test_internal(core_retry): |
| 161 | + error = mock.Mock( |
| 162 | + code=mock.Mock(return_value=grpc.StatusCode.INTERNAL) |
| 163 | + ) |
| 164 | + core_retry.if_transient_error.return_value = False |
| 165 | + assert _retry.is_transient_error(error) is True |
| 166 | + core_retry.if_transient_error.assert_called_once_with(error) |
| 167 | + |
| 168 | + @staticmethod |
| 169 | + @mock.patch("google.cloud.ndb._retry.core_retry") |
| 170 | + def test_unauthenticated(core_retry): |
| 171 | + error = mock.Mock( |
| 172 | + code=mock.Mock(return_value=grpc.StatusCode.UNAUTHENTICATED) |
| 173 | + ) |
| 174 | + core_retry.if_transient_error.return_value = False |
| 175 | + assert _retry.is_transient_error(error) is False |
| 176 | + core_retry.if_transient_error.assert_called_once_with(error) |
0 commit comments