4a5d38b55a
* Enable tests * Comment fixes * Try lowering timeouts * Comment fix * Comment fix * Comment fix * Add a pause to let service update * Fix comment * Disable dns_search tests * Disable dns_servers test * Fix comment * Fix comment * Fix comment * Fix comment * Fix comment * Fix comment * Fix comment * Revert "Disable dns_servers test" This reverts commit 763e9da716b78f4986f313b3ba1ab98faacb742e. * Revert "Disable dns_search tests" This reverts commit 2859e4e3a5ebdca078de84d821bb53bbdf967dfd. * Revert "Add a pause to let service update" This reverts commit e990dfae1a62e9a42b07960819818bc75fd04427. * Revert "Try lowering timeouts" This reverts commit 1617772de81ecef0e560b38c7564646ec3874c3c. * Ensure that services are running while testing * Retry tasks on update out of sequence error * Remove unnecessary check for APIError.explanation Co-Authored-By: hannseman <hannes@5monkeys.se> * Ignore errors when tearing down test suite * Retry with a loop instead of tail recursion * Initialize self.diff_trace in run * Add change log fragment * Actually raise error * Add unit test for retrying * Lint * Change to bugfix * Remove whitespace * Mock docker dependency * Use download.fedoraproject.org * Revert "Use download.fedoraproject.org" This reverts commit 5931791f7cfdd339f15068c8706b39905517abdf.
59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
import pytest
|
|
|
|
|
|
class APIErrorMock(Exception):
|
|
|
|
def __init__(self, message, response=None, explanation=None):
|
|
self.message = message
|
|
self.response = response
|
|
self.explanation = explanation
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def docker_module_mock(mocker):
|
|
docker_module_mock = mocker.MagicMock()
|
|
docker_utils_module_mock = mocker.MagicMock()
|
|
docker_errors_module_mock = mocker.MagicMock()
|
|
docker_errors_module_mock.APIError = APIErrorMock
|
|
mock_modules = {
|
|
'docker': docker_module_mock,
|
|
'docker.utils': docker_utils_module_mock,
|
|
'docker.errors': docker_errors_module_mock,
|
|
}
|
|
return mocker.patch.dict('sys.modules', **mock_modules)
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def docker_swarm_service():
|
|
from ansible.modules.cloud.docker import docker_swarm_service
|
|
return docker_swarm_service
|
|
|
|
|
|
def test_retry_on_out_of_sequence_error(mocker, docker_swarm_service):
|
|
run_mock = mocker.MagicMock(
|
|
side_effect=APIErrorMock(
|
|
message='',
|
|
response=None,
|
|
explanation='rpc error: code = Unknown desc = update out of sequence',
|
|
)
|
|
)
|
|
manager = docker_swarm_service.DockerServiceManager(client=None)
|
|
manager.run = run_mock
|
|
with pytest.raises(APIErrorMock):
|
|
manager.run_safe()
|
|
assert run_mock.call_count == 3
|
|
|
|
|
|
def test_no_retry_on_general_api_error(mocker, docker_swarm_service):
|
|
run_mock = mocker.MagicMock(
|
|
side_effect=APIErrorMock(
|
|
message='',
|
|
response=None,
|
|
explanation='some error',
|
|
)
|
|
)
|
|
manager = docker_swarm_service.DockerServiceManager(client=None)
|
|
manager.run = run_mock
|
|
with pytest.raises(APIErrorMock):
|
|
manager.run_safe()
|
|
assert run_mock.call_count == 1
|