Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/tests/test_retry.py
Show First 20 Lines • Show All 249 Lines • ▼ Show 20 Lines | def test_retrying_proxy_swh_storage_origin_add_one_failure( | ||||
assert mock_memory.call_count == 1 | assert mock_memory.call_count == 1 | ||||
def test_retrying_proxy_swh_storage_origin_visit_add(swh_storage, sample_data): | def test_retrying_proxy_swh_storage_origin_visit_add(swh_storage, sample_data): | ||||
"""Standard origin_visit_add works as before | """Standard origin_visit_add works as before | ||||
""" | """ | ||||
sample_origin = sample_data['origin'][0] | sample_origin = sample_data['origin'][0] | ||||
swh_storage.origin_add_one(sample_origin) | origin_url = swh_storage.origin_add_one(sample_origin) | ||||
origin_url = sample_origin['url'] | |||||
origin = list(swh_storage.origin_visit_get(origin_url)) | origin = list(swh_storage.origin_visit_get(origin_url)) | ||||
assert not origin | assert not origin | ||||
origin_visit = swh_storage.origin_visit_add( | origin_visit = swh_storage.origin_visit_add(origin_url, '2020-01-01', 'hg') | ||||
origin_url, '2020-01-01', 'hg') | assert origin_visit.origin == origin_url | ||||
assert origin_visit['origin'] == origin_url | assert isinstance(origin_visit.visit, int) | ||||
assert isinstance(origin_visit['visit'], int) | |||||
origin_visit = next(swh_storage.origin_visit_get(origin_url)) | origin_visit = next(swh_storage.origin_visit_get(origin_url)) | ||||
assert origin_visit['origin'] == origin_url | assert origin_visit['origin'] == origin_url | ||||
assert isinstance(origin_visit['visit'], int) | assert isinstance(origin_visit['visit'], int) | ||||
def test_retrying_proxy_swh_storage_origin_visit_add_retry( | def test_retrying_proxy_swh_storage_origin_visit_add_retry( | ||||
swh_storage, sample_data, mocker): | swh_storage, sample_data, mocker): | ||||
"""Multiple retries for hash collision and psycopg2 error but finally ok | """Multiple retries for hash collision and psycopg2 error but finally ok | ||||
""" | """ | ||||
sample_origin = sample_data['origin'][1] | sample_origin = sample_data['origin'][1] | ||||
swh_storage.origin_add_one(sample_origin) | origin_url = swh_storage.origin_add_one(sample_origin) | ||||
origin_url = sample_origin['url'] | |||||
mock_memory = mocker.patch( | mock_memory = mocker.patch( | ||||
'swh.storage.in_memory.InMemoryStorage.origin_visit_add') | 'swh.storage.in_memory.InMemoryStorage.origin_visit_add') | ||||
mock_memory.side_effect = [ | mock_memory.side_effect = [ | ||||
# first try goes ko | # first try goes ko | ||||
HashCollision('origin hash collision'), | HashCollision('origin hash collision'), | ||||
# second try goes ko | # second try goes ko | ||||
psycopg2.IntegrityError('origin already inserted'), | psycopg2.IntegrityError('origin already inserted'), | ||||
# ok then! | # ok then! | ||||
{'origin': origin_url, 'visit': 1} | {'origin': origin_url, 'visit': 1} | ||||
] | ] | ||||
mock_sleep = mocker.patch( | mock_sleep = mocker.patch( | ||||
'swh.storage.retry.RetryingProxyStorage' | 'swh.storage.retry.RetryingProxyStorage' | ||||
'.origin_visit_add.retry.sleep') | '.origin_visit_add.retry.sleep') | ||||
origin = list(swh_storage.origin_visit_get(origin_url)) | origin = list(swh_storage.origin_visit_get(origin_url)) | ||||
assert not origin | assert not origin | ||||
r = swh_storage.origin_visit_add(sample_origin, '2020-01-01', 'git') | r = swh_storage.origin_visit_add(origin_url, '2020-01-01', 'git') | ||||
assert r == {'origin': origin_url, 'visit': 1} | assert r == {'origin': origin_url, 'visit': 1} | ||||
mock_memory.assert_has_calls([ | mock_memory.assert_has_calls([ | ||||
call(sample_origin, '2020-01-01', 'git'), | call(origin_url, '2020-01-01', 'git'), | ||||
call(sample_origin, '2020-01-01', 'git'), | call(origin_url, '2020-01-01', 'git'), | ||||
call(sample_origin, '2020-01-01', 'git') | call(origin_url, '2020-01-01', 'git') | ||||
]) | ]) | ||||
assert mock_sleep.call_count == 2 | assert mock_sleep.call_count == 2 | ||||
def test_retrying_proxy_swh_storage_origin_visit_add_failure( | def test_retrying_proxy_swh_storage_origin_visit_add_failure( | ||||
swh_storage, sample_data, mocker): | swh_storage, sample_data, mocker): | ||||
"""Unfiltered errors are raising without retry | """Unfiltered errors are raising without retry | ||||
▲ Show 20 Lines • Show All 275 Lines • ▼ Show 20 Lines | |||||
def test_retrying_proxy_swh_storage_origin_visit_update( | def test_retrying_proxy_swh_storage_origin_visit_update( | ||||
swh_storage, sample_data): | swh_storage, sample_data): | ||||
"""Standard origin_visit_update works as before | """Standard origin_visit_update works as before | ||||
""" | """ | ||||
sample_origin = sample_data['origin'][0] | sample_origin = sample_data['origin'][0] | ||||
swh_storage.origin_add_one(sample_origin) | origin_url = swh_storage.origin_add_one(sample_origin) | ||||
origin_url = sample_origin['url'] | origin_visit = swh_storage.origin_visit_add(origin_url, '2020-01-01', 'hg') | ||||
origin_visit = swh_storage.origin_visit_add( | |||||
origin_url, '2020-01-01', 'hg') | |||||
ov = next(swh_storage.origin_visit_get(origin_url)) | ov = next(swh_storage.origin_visit_get(origin_url)) | ||||
assert ov['origin'] == origin_url | assert ov['origin'] == origin_url | ||||
assert ov['visit'] == origin_visit['visit'] | assert ov['visit'] == origin_visit.visit | ||||
assert ov['status'] == 'ongoing' | assert ov['status'] == 'ongoing' | ||||
assert ov['snapshot'] is None | assert ov['snapshot'] is None | ||||
assert ov['metadata'] is None | assert ov['metadata'] is None | ||||
swh_storage.origin_visit_update(origin_url, ov['visit'], status='full') | swh_storage.origin_visit_update( | ||||
origin_url, origin_visit.visit, status='full') | |||||
ov = next(swh_storage.origin_visit_get(origin_url)) | ov = next(swh_storage.origin_visit_get(origin_url)) | ||||
assert ov['origin'] == origin_url | assert ov['origin'] == origin_url | ||||
assert ov['visit'] == origin_visit['visit'] | assert ov['visit'] == origin_visit.visit | ||||
assert ov['status'] == 'full' | assert ov['status'] == 'full' | ||||
assert ov['snapshot'] is None | assert ov['snapshot'] is None | ||||
assert ov['metadata'] is None | assert ov['metadata'] is None | ||||
def test_retrying_proxy_swh_storage_origin_visit_update_retry( | def test_retrying_proxy_swh_storage_origin_visit_update_retry( | ||||
swh_storage, sample_data, mocker): | swh_storage, sample_data, mocker): | ||||
"""Multiple retries for hash collision and psycopg2 error but finally ok | """Multiple retries for hash collision and psycopg2 error but finally ok | ||||
▲ Show 20 Lines • Show All 357 Lines • Show Last 20 Lines |