Skip to content
Snippets Groups Projects
Commit 1a7d9346 authored by Shinya Maeda's avatar Shinya Maeda
Browse files

Fix wrong error handling in update page service

parent 0ce07326
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -37,9 +37,10 @@ module Projects
deploy_page!(archive_public_path)
success
end
rescue InvaildStateError, FailedToExtractError => e
register_failure
rescue InvaildStateError => e
error(e.message)
rescue => e
error(e.message, false)
end
 
private
Loading
Loading
@@ -50,12 +51,13 @@ module Projects
super
end
 
def error(message, http_status = nil)
def error(message, delete_artifact = true)
register_failure
log_error("Projects::UpdatePagesService: #{message}")
@status.allow_failure = !latest?
@status.description = message
@status.drop(:script_failure)
delete_artifact!
delete_artifact! if delete_artifact
super
end
 
Loading
Loading
@@ -76,7 +78,7 @@ module Projects
elsif artifacts.ends_with?('.zip')
extract_zip_archive!(temp_path)
else
raise FailedToExtractError, 'unsupported artifacts format'
raise InvaildStateError, 'unsupported artifacts format'
end
end
 
Loading
Loading
@@ -91,13 +93,13 @@ module Projects
end
 
def extract_zip_archive!(temp_path)
raise FailedToExtractError, 'missing artifacts metadata' unless build.artifacts_metadata?
raise InvaildStateError, 'missing artifacts metadata' unless build.artifacts_metadata?
 
# Calculate page size after extract
public_entry = build.artifacts_metadata_entry(SITE_PATH, recursive: true)
 
if public_entry.total_size > max_size
raise FailedToExtractError, "artifacts for pages are too large: #{public_entry.total_size}"
raise InvaildStateError, "artifacts for pages are too large: #{public_entry.total_size}"
end
 
# Requires UnZip at least 6.00 Info-ZIP.
Loading
Loading
Loading
Loading
@@ -169,10 +169,41 @@ describe Projects::UpdatePagesService do
end
 
it 'raises an error' do
expect { execute }.to raise_error(SocketError)
execute
 
build.reload
expect(build.artifacts?).to eq(true)
expect(deploy_status).to be_failed
expect(build.artifacts?).to be_truthy
end
end
context 'when failed to extract zip artifacts' do
before do
allow_any_instance_of(described_class)
.to receive(:extract_zip_archive!)
.and_raise(Projects::UpdatePagesService::FailedToExtractError)
end
it 'raises an error' do
execute
build.reload
expect(deploy_status).to be_failed
expect(build.artifacts?).to be_truthy
end
end
context 'when missing artifacts metadata' do
before do
allow(build).to receive(:artifacts_metadata?).and_return(false)
end
it 'raises an error' do
execute
build.reload
expect(deploy_status).to be_failed
expect(build.artifacts?).to be_falsey
end
end
end
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment