Changeset View
Changeset View
Standalone View
Standalone View
swh/storage/tests/test_retry.py
Show First 20 Lines • Show All 263 Lines • ▼ Show 20 Lines | def test_retrying_proxy_swh_storage_origin_visit_add(swh_storage, sample_data): | ||||
""" | """ | ||||
origin = sample_data.origin | origin = sample_data.origin | ||||
visit = sample_data.origin_visit | visit = sample_data.origin_visit | ||||
assert visit.origin == origin.url | assert visit.origin == origin.url | ||||
swh_storage.origin_add([origin]) | swh_storage.origin_add([origin]) | ||||
origins = list(swh_storage.origin_visit_get(origin.url)) | origins = swh_storage.origin_visit_get(origin.url).results | ||||
assert not origins | assert not origins | ||||
origin_visit = swh_storage.origin_visit_add([visit])[0] | origin_visit = swh_storage.origin_visit_add([visit])[0] | ||||
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)) | actual_visit = swh_storage.origin_visit_get(origin.url).results[0] | ||||
assert origin_visit["origin"] == origin.url | assert actual_visit == visit | ||||
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( | ||||
monkeypatch_sleep, swh_storage, sample_data, mocker, fake_hash_collision | monkeypatch_sleep, swh_storage, sample_data, mocker, fake_hash_collision | ||||
): | ): | ||||
"""Multiple retries for hash collision and psycopg2 error but finally ok | """Multiple retries for hash collision and psycopg2 error but finally ok | ||||
""" | """ | ||||
origin = sample_data.origin | origin = sample_data.origin | ||||
visit = sample_data.origin_visit | visit = sample_data.origin_visit | ||||
assert visit.origin == origin.url | assert visit.origin == origin.url | ||||
swh_storage.origin_add([origin]) | swh_storage.origin_add([origin]) | ||||
mock_memory = mocker.patch("swh.storage.in_memory.InMemoryStorage.origin_visit_add") | mock_memory = mocker.patch("swh.storage.in_memory.InMemoryStorage.origin_visit_add") | ||||
mock_memory.side_effect = [ | mock_memory.side_effect = [ | ||||
# first try goes ko | # first try goes ko | ||||
fake_hash_collision, | fake_hash_collision, | ||||
# second try goes ko | # second try goes ko | ||||
psycopg2.IntegrityError("origin already inserted"), | psycopg2.IntegrityError("origin already inserted"), | ||||
# ok then! | # ok then! | ||||
[visit], | [visit], | ||||
] | ] | ||||
origins = list(swh_storage.origin_visit_get(origin.url)) | origins = swh_storage.origin_visit_get(origin.url).results | ||||
assert not origins | assert not origins | ||||
r = swh_storage.origin_visit_add([visit]) | r = swh_storage.origin_visit_add([visit]) | ||||
assert r == [visit] | assert r == [visit] | ||||
mock_memory.assert_has_calls( | mock_memory.assert_has_calls( | ||||
[call([visit]), call([visit]), call([visit]),] | [call([visit]), call([visit]), call([visit]),] | ||||
) | ) | ||||
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 | ||||
""" | """ | ||||
mock_memory = mocker.patch("swh.storage.in_memory.InMemoryStorage.origin_visit_add") | mock_memory = mocker.patch("swh.storage.in_memory.InMemoryStorage.origin_visit_add") | ||||
mock_memory.side_effect = StorageArgumentException("Refuse to add origin always!") | mock_memory.side_effect = StorageArgumentException("Refuse to add origin always!") | ||||
origin = sample_data.origin | origin = sample_data.origin | ||||
visit = sample_data.origin_visit | visit = sample_data.origin_visit | ||||
assert visit.origin == origin.url | assert visit.origin == origin.url | ||||
origins = list(swh_storage.origin_visit_get(origin.url)) | origins = swh_storage.origin_visit_get(origin.url).results | ||||
assert not origins | assert not origins | ||||
with pytest.raises(StorageArgumentException, match="Refuse to add"): | with pytest.raises(StorageArgumentException, match="Refuse to add"): | ||||
swh_storage.origin_visit_add([visit]) | swh_storage.origin_visit_add([visit]) | ||||
mock_memory.assert_has_calls( | mock_memory.assert_has_calls( | ||||
[call([visit]),] | [call([visit]),] | ||||
) | ) | ||||
▲ Show 20 Lines • Show All 496 Lines • Show Last 20 Lines |