|
17 | 17 | import sys
|
18 | 18 | import uuid
|
19 | 19 |
|
| 20 | +from googleapiclient.errors import HttpError |
| 21 | +from retrying import retry |
| 22 | + |
20 | 23 | # Add datasets for bootstrapping datasets for testing
|
21 | 24 | sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'datasets')) # noqa
|
22 | 25 | import datasets
|
|
29 | 32 | hl7v2_store_id = 'test_hl7v2_store-{}'.format(uuid.uuid4())
|
30 | 33 |
|
31 | 34 |
|
32 |
| -@pytest.fixture(scope='module') |
33 |
| -def test_dataset(): |
34 |
| - dataset = datasets.create_dataset( |
35 |
| - project_id, |
36 |
| - cloud_region, |
37 |
| - dataset_id) |
| 35 | +def retry_if_server_exception(exception): |
| 36 | + return isinstance(exception, (HttpError)) |
| 37 | + |
38 | 38 |
|
39 |
| - yield dataset |
| 39 | +@pytest.fixture(scope="module") |
| 40 | +def test_dataset(): |
| 41 | + @retry( |
| 42 | + wait_exponential_multiplier=1000, |
| 43 | + wait_exponential_max=10000, |
| 44 | + stop_max_attempt_number=10, |
| 45 | + retry_on_exception=retry_if_server_exception) |
| 46 | + def create(): |
| 47 | + try: |
| 48 | + datasets.create_dataset(project_id, cloud_region, dataset_id) |
| 49 | + except HttpError as err: |
| 50 | + # We ignore 409 conflict here, because we know it's most |
| 51 | + # likely the first request failed on the client side, but |
| 52 | + # the creation suceeded on the server side. |
| 53 | + if err.resp.status == 409: |
| 54 | + print( |
| 55 | + 'Got exception {} while creating dataset'.format( |
| 56 | + err.resp.status)) |
| 57 | + else: |
| 58 | + raise |
| 59 | + create() |
| 60 | + |
| 61 | + yield |
40 | 62 |
|
41 | 63 | # Clean up
|
42 |
| - datasets.delete_dataset( |
43 |
| - project_id, |
44 |
| - cloud_region, |
45 |
| - dataset_id) |
| 64 | + @retry( |
| 65 | + wait_exponential_multiplier=1000, |
| 66 | + wait_exponential_max=10000, |
| 67 | + stop_max_attempt_number=10, |
| 68 | + retry_on_exception=retry_if_server_exception) |
| 69 | + def clean_up(): |
| 70 | + try: |
| 71 | + datasets.delete_dataset(project_id, cloud_region, dataset_id) |
| 72 | + except HttpError as err: |
| 73 | + # The API returns 403 when the dataset doesn't exist. |
| 74 | + if err.resp.status == 404 or err.resp.status == 403: |
| 75 | + print( |
| 76 | + 'Got exception {} while deleting dataset'.format( |
| 77 | + err.resp.status)) |
| 78 | + else: |
| 79 | + raise |
| 80 | + |
| 81 | + clean_up() |
| 82 | + |
| 83 | + |
| 84 | +@pytest.fixture(scope="module") |
| 85 | +def test_hl7v2_store(): |
| 86 | + @retry( |
| 87 | + wait_exponential_multiplier=1000, |
| 88 | + wait_exponential_max=10000, |
| 89 | + stop_max_attempt_number=10, |
| 90 | + retry_on_exception=retry_if_server_exception) |
| 91 | + def create(): |
| 92 | + try: |
| 93 | + hl7v2_stores.create_hl7v2_store( |
| 94 | + project_id, cloud_region, dataset_id, hl7v2_store_id) |
| 95 | + except HttpError as err: |
| 96 | + # We ignore 409 conflict here, because we know it's most |
| 97 | + # likely the first request failed on the client side, but |
| 98 | + # the creation suceeded on the server side. |
| 99 | + if err.resp.status == 409: |
| 100 | + print( |
| 101 | + 'Got exception {} while creating HL7v2 store'.format( |
| 102 | + err.resp.status)) |
| 103 | + else: |
| 104 | + raise |
| 105 | + create() |
| 106 | + |
| 107 | + yield |
46 | 108 |
|
| 109 | + # Clean up |
| 110 | + @retry( |
| 111 | + wait_exponential_multiplier=1000, |
| 112 | + wait_exponential_max=10000, |
| 113 | + stop_max_attempt_number=10, |
| 114 | + retry_on_exception=retry_if_server_exception) |
| 115 | + def clean_up(): |
| 116 | + try: |
| 117 | + hl7v2_stores.delete_hl7v2_store( |
| 118 | + project_id, cloud_region, dataset_id, hl7v2_store_id) |
| 119 | + except HttpError as err: |
| 120 | + # The API returns 403 when the HL7v2 store doesn't exist. |
| 121 | + if err.resp.status == 404 or err.resp.status == 403: |
| 122 | + print( |
| 123 | + 'Got exception {} while deleting HL7v2 store'.format( |
| 124 | + err.resp.status)) |
| 125 | + else: |
| 126 | + raise |
| 127 | + |
| 128 | + clean_up() |
| 129 | + |
| 130 | + |
| 131 | +@pytest.fixture(scope="module") |
| 132 | +def crud_hl7v2_store_id(): |
| 133 | + yield hl7v2_store_id |
47 | 134 |
|
48 |
| -def test_CRUD_hl7v2_store(test_dataset, capsys): |
| 135 | + # Clean up |
| 136 | + @retry( |
| 137 | + wait_exponential_multiplier=1000, |
| 138 | + wait_exponential_max=10000, |
| 139 | + stop_max_attempt_number=10, |
| 140 | + retry_on_exception=retry_if_server_exception) |
| 141 | + def clean_up(): |
| 142 | + try: |
| 143 | + hl7v2_stores.delete_hl7v2_store_id( |
| 144 | + project_id, cloud_region, dataset_id, hl7v2_store_id) |
| 145 | + except HttpError as err: |
| 146 | + # The API returns 403 when the HL7v2 store doesn't exist. |
| 147 | + if err.resp.status == 404 or err.resp.status == 403: |
| 148 | + print( |
| 149 | + 'Got exception {} while deleting HL7v2 store'.format( |
| 150 | + err.resp.status)) |
| 151 | + else: |
| 152 | + raise |
| 153 | + |
| 154 | + clean_up() |
| 155 | + |
| 156 | + |
| 157 | +def test_CRUD_hl7v2_store(test_dataset, crud_hl7v2_store_id, capsys): |
49 | 158 | hl7v2_stores.create_hl7v2_store(
|
50 | 159 | project_id,
|
51 | 160 | cloud_region,
|
|
0 commit comments