93d79e777e
We allow users to reenable them manually once disabled
46 lines
No EOL
1.8 KiB
Python
46 lines
No EOL
1.8 KiB
Python
import pytest
|
|
|
|
from mock import patch
|
|
|
|
from data.database import BUILD_PHASE, RepositoryBuildTrigger
|
|
from data.model.build import update_trigger_disable_status
|
|
from test.fixtures import *
|
|
|
|
TEST_FAIL_THRESHOLD = 5
|
|
TEST_INTERNAL_ERROR_THRESHOLD = 2
|
|
|
|
@pytest.mark.parametrize('starting_failure_count, starting_error_count, status, expected_reason', [
|
|
(0, 0, BUILD_PHASE.COMPLETE, None),
|
|
(10, 10, BUILD_PHASE.COMPLETE, None),
|
|
|
|
(TEST_FAIL_THRESHOLD - 1, TEST_INTERNAL_ERROR_THRESHOLD - 1, BUILD_PHASE.COMPLETE, None),
|
|
(TEST_FAIL_THRESHOLD - 1, 0, BUILD_PHASE.ERROR, 'successive_build_failures'),
|
|
(0, TEST_INTERNAL_ERROR_THRESHOLD - 1, BUILD_PHASE.INTERNAL_ERROR,
|
|
'successive_build_internal_errors'),
|
|
])
|
|
def test_update_trigger_disable_status(starting_failure_count, starting_error_count, status,
|
|
expected_reason, initialized_db):
|
|
test_config = {
|
|
'SUCCESSIVE_TRIGGER_FAILURE_DISABLE_THRESHOLD': TEST_FAIL_THRESHOLD,
|
|
'SUCCESSIVE_TRIGGER_INTERNAL_ERROR_DISABLE_THRESHOLD': TEST_INTERNAL_ERROR_THRESHOLD,
|
|
}
|
|
|
|
trigger = model.build.list_build_triggers('devtable', 'building')[0]
|
|
trigger.successive_failure_count = starting_failure_count
|
|
trigger.successive_internal_error_count = starting_error_count
|
|
trigger.enabled = True
|
|
trigger.save()
|
|
|
|
with patch('data.model.config.app_config', test_config):
|
|
update_trigger_disable_status(trigger, status)
|
|
updated_trigger = RepositoryBuildTrigger.get(uuid=trigger.uuid)
|
|
|
|
assert updated_trigger.enabled == (expected_reason is None)
|
|
|
|
if expected_reason is not None:
|
|
assert updated_trigger.disabled_reason.name == expected_reason
|
|
else:
|
|
assert updated_trigger.disabled_reason is None
|
|
assert updated_trigger.successive_failure_count == 0
|
|
assert updated_trigger.successive_internal_error_count == 0
|
|
|