98 lines
2.7 KiB
Python
98 lines
2.7 KiB
Python
|
import pytest
|
||
|
|
||
|
from data import model
|
||
|
from buildtrigger.triggerutil import raise_if_skipped_build, SkipRequestException
|
||
|
from endpoints.building import (start_build, PreparedBuild, MaximumBuildsQueuedException,
|
||
|
BuildTriggerDisabledException)
|
||
|
|
||
|
from test.fixtures import *
|
||
|
|
||
|
def test_maximum_builds(app):
|
||
|
# Change the maximum number of builds to 1.
|
||
|
user = model.user.create_user('foobar', 'password', 'foo@example.com')
|
||
|
user.maximum_queued_builds_count = 1
|
||
|
user.save()
|
||
|
|
||
|
repo = model.repository.create_repository('foobar', 'somerepo', user)
|
||
|
|
||
|
# Try to queue a build; should succeed.
|
||
|
prepared_build = PreparedBuild()
|
||
|
prepared_build.build_name = 'foo'
|
||
|
prepared_build.is_manual = True
|
||
|
prepared_build.dockerfile_id = 'foobar'
|
||
|
prepared_build.archive_url = 'someurl'
|
||
|
prepared_build.tags = ['latest']
|
||
|
prepared_build.subdirectory = '/'
|
||
|
prepared_build.context = '/'
|
||
|
prepared_build.metadata = {}
|
||
|
|
||
|
start_build(repo, prepared_build)
|
||
|
|
||
|
# Try to queue a second build; should fail.
|
||
|
with pytest.raises(MaximumBuildsQueuedException):
|
||
|
start_build(repo, prepared_build)
|
||
|
|
||
|
|
||
|
def test_start_build_disabled_trigger(app):
|
||
|
trigger = model.build.list_build_triggers('devtable', 'building')[0]
|
||
|
trigger.enabled = False
|
||
|
trigger.save()
|
||
|
|
||
|
build = PreparedBuild(trigger=trigger)
|
||
|
|
||
|
with pytest.raises(BuildTriggerDisabledException):
|
||
|
start_build(trigger.repository, build)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('ref, expected_tags', [
|
||
|
('ref/heads/somebranch', ['somebranch']),
|
||
|
('ref/heads/master', ['master', 'latest']),
|
||
|
|
||
|
('ref/tags/somebranch', ['somebranch']),
|
||
|
('ref/tags/master', ['master', 'latest']),
|
||
|
|
||
|
('ref/heads/slash/branch', ['slash_branch']),
|
||
|
('ref/tags/slash/tag', ['slash_tag']),
|
||
|
|
||
|
('ref/heads/foobar#2', ['foobar_2']),
|
||
|
])
|
||
|
def test_tags_for_ref(ref, expected_tags):
|
||
|
prepared = PreparedBuild()
|
||
|
prepared.tags_from_ref(ref, default_branch='master')
|
||
|
assert set(prepared._tags) == set(expected_tags)
|
||
|
|
||
|
|
||
|
@pytest.mark.parametrize('metadata, config', [
|
||
|
({}, {}),
|
||
|
pytest.param({'ref': 'ref/heads/master'}, {'branchtag_regex': 'nothing'}, id='branchtag regex'),
|
||
|
pytest.param({
|
||
|
'ref': 'ref/heads/master',
|
||
|
'commit_info': {
|
||
|
'message': '[skip build]',
|
||
|
},
|
||
|
}, {}, id='commit message'),
|
||
|
])
|
||
|
def test_skip(metadata, config):
|
||
|
prepared = PreparedBuild()
|
||
|
prepared.metadata = metadata
|
||
|
config = config
|
||
|
|
||
|
with pytest.raises(SkipRequestException):
|
||
|
raise_if_skipped_build(prepared, config)
|
||
|
|
||
|
|
||
|
def test_does_not_skip():
|
||
|
prepared = PreparedBuild()
|
||
|
prepared.metadata = {
|
||
|
'ref': 'ref/heads/master',
|
||
|
'commit_info': {
|
||
|
'message': 'some cool message',
|
||
|
},
|
||
|
}
|
||
|
|
||
|
config = {
|
||
|
'branchtag_regex': '(master)|(heads/master)',
|
||
|
}
|
||
|
|
||
|
raise_if_skipped_build(prepared, config)
|