|
2 | 2 | import mock |
3 | 3 | from freezegun import freeze_time |
4 | 4 | from datetime import date, datetime |
| 5 | +from google.api_core.exceptions import BadRequest, ServerError |
| 6 | + |
5 | 7 | import pandas as pd |
| 8 | +from google.rpc import error_details_pb2 |
6 | 9 | from pandas.testing import assert_frame_equal |
7 | 10 |
|
8 | 11 | from delphi_google_symptoms.pull import ( |
@@ -120,6 +123,41 @@ def test_pull_one_gs_no_dates(self, mock_read_gbq): |
120 | 123 | expected = pd.DataFrame(columns=new_keep_cols) |
121 | 124 | assert_frame_equal(output, expected, check_dtype = False) |
122 | 125 |
|
| 126 | + def test_pull_one_gs_retry_success(self): |
| 127 | + info = error_details_pb2.ErrorInfo( |
| 128 | + reason="backendError", |
| 129 | + ) |
| 130 | + badRequestException = BadRequest(message="message", error_info=info) |
| 131 | + serverErrorException = ServerError(message="message") |
| 132 | + |
| 133 | + with mock.patch("pandas_gbq.read_gbq") as mock_read_gbq: |
| 134 | + mock_read_gbq.side_effect = [badRequestException, pd.DataFrame()] |
| 135 | + |
| 136 | + output = pull_gs_data_one_geolevel("state", ["", ""]) |
| 137 | + expected = pd.DataFrame(columns=new_keep_cols) |
| 138 | + assert_frame_equal(output, expected, check_dtype = False) |
| 139 | + assert mock_read_gbq.call_count == 2 |
| 140 | + |
| 141 | + def test_pull_one_gs_retry_too_many(self): |
| 142 | + info = error_details_pb2.ErrorInfo( |
| 143 | + reason="backendError", |
| 144 | + ) |
| 145 | + badRequestException = BadRequest(message="message", error_info=info) |
| 146 | + |
| 147 | + with mock.patch("pandas_gbq.read_gbq") as mock_read_gbq: |
| 148 | + with pytest.raises(BadRequest): |
| 149 | + mock_read_gbq.side_effect = [badRequestException, badRequestException, pd.DataFrame()] |
| 150 | + pull_gs_data_one_geolevel("state", ["", ""]) |
| 151 | + |
| 152 | + |
| 153 | + def test_pull_one_gs_retry_bad(self): |
| 154 | + badRequestException = BadRequest(message="message", ) |
| 155 | + |
| 156 | + with mock.patch("pandas_gbq.read_gbq") as mock_read_gbq: |
| 157 | + with pytest.raises(BadRequest): |
| 158 | + mock_read_gbq.side_effect = [badRequestException,pd.DataFrame()] |
| 159 | + pull_gs_data_one_geolevel("state", ["", ""]) |
| 160 | + |
123 | 161 | def test_preprocess_no_data(self): |
124 | 162 | output = preprocess(pd.DataFrame(columns=keep_cols), "state") |
125 | 163 | expected = pd.DataFrame(columns=new_keep_cols) |
|
0 commit comments