Handle maximum pages artifacts size correctly
This commit is contained in:
parent
d95e6da0d5
commit
77a6ec22ba
2 changed files with 75 additions and 1 deletions
|
@ -130,7 +130,9 @@ module Projects
|
|||
end
|
||||
|
||||
def max_size
|
||||
current_application_settings.max_pages_size.megabytes || MAX_SIZE
|
||||
current_application_settings.max_pages_size.megabytes.tap do |maximum|
|
||||
return MAX_SIZE if maximum.zero? || maximum > MAX_SIZE
|
||||
end
|
||||
end
|
||||
|
||||
def tmp_path
|
||||
|
|
|
@ -96,6 +96,78 @@ describe Projects::UpdatePagesService do
|
|||
expect(execute).not_to eq(:success)
|
||||
end
|
||||
|
||||
describe 'maximum pages artifacts size' do
|
||||
let(:metadata) { spy('metadata') }
|
||||
|
||||
before do
|
||||
file = fixture_file_upload(Rails.root + 'spec/fixtures/pages.zip')
|
||||
metafile = fixture_file_upload(Rails.root + 'spec/fixtures/pages.zip.meta')
|
||||
|
||||
build.update_attributes(artifacts_file: file)
|
||||
build.update_attributes(artifacts_metadata: metafile)
|
||||
|
||||
allow(build).to receive(:artifacts_metadata_entry)
|
||||
.and_return(metadata)
|
||||
end
|
||||
|
||||
shared_examples 'pages size limit exceeded' do
|
||||
it 'limits the maximum size of gitlab pages' do
|
||||
subject.execute
|
||||
|
||||
expect(deploy_status.description)
|
||||
.to match(/artifacts for pages are too large/)
|
||||
end
|
||||
end
|
||||
|
||||
context 'when maximum pages size is set to zero' do
|
||||
before do
|
||||
stub_application_setting(max_pages_size: 0)
|
||||
end
|
||||
|
||||
context 'when page size does not exceed internal maximum' do
|
||||
before do
|
||||
allow(metadata).to receive(:total_size).and_return(200.megabytes)
|
||||
end
|
||||
|
||||
it 'updates pages correctly' do
|
||||
subject.execute
|
||||
|
||||
expect(deploy_status.description).not_to be_present
|
||||
end
|
||||
end
|
||||
|
||||
context 'when pages size does exceed internal maximum' do
|
||||
before do
|
||||
allow(metadata).to receive(:total_size).and_return(2.terabytes)
|
||||
end
|
||||
|
||||
it_behaves_like 'pages size limit exceeded'
|
||||
end
|
||||
end
|
||||
|
||||
context 'when pages size is greater than max size setting' do
|
||||
before do
|
||||
stub_application_setting(max_pages_size: 200)
|
||||
allow(metadata).to receive(:total_size).and_return(201.megabytes)
|
||||
end
|
||||
|
||||
it_behaves_like 'pages size limit exceeded'
|
||||
end
|
||||
|
||||
context 'when max size setting is greater than internal max size' do
|
||||
before do
|
||||
stub_application_setting(max_pages_size: 3.terabytes / 1.megabyte)
|
||||
allow(metadata).to receive(:total_size).and_return(2.terabytes)
|
||||
end
|
||||
|
||||
it_behaves_like 'pages size limit exceeded'
|
||||
end
|
||||
end
|
||||
|
||||
def deploy_status
|
||||
GenericCommitStatus.find_by(name: 'pages:deploy');
|
||||
end
|
||||
|
||||
def execute
|
||||
subject.execute[:status]
|
||||
end
|
||||
|
|
Loading…
Reference in a new issue