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

Introduce FailedToExtractError. Fix spec. Add DNS test mock.

parent 031794f5
No related branches found
No related tags found
No related merge requests found
module Projects
class UpdatePagesService < BaseService
InvaildStateError = Class.new(StandardError)
FailedToExtractError = Class.new(StandardError)
 
BLOCK_SIZE = 32.kilobytes
MAX_SIZE = 1.terabyte
Loading
Loading
@@ -30,13 +31,13 @@ module Projects
 
# Check if we did extract public directory
archive_public_path = File.join(archive_path, 'public')
raise InvaildStateError, 'pages miss the public folder' unless Dir.exist?(archive_public_path)
raise FailedToExtractError, 'pages miss the public folder' unless Dir.exist?(archive_public_path)
raise InvaildStateError, 'pages are outdated' unless latest?
 
deploy_page!(archive_public_path)
success
end
rescue InvaildStateError => e
rescue InvaildStateError, FailedToExtractError => e
register_failure
error(e.message)
end
Loading
Loading
@@ -75,7 +76,7 @@ module Projects
elsif artifacts.ends_with?('.zip')
extract_zip_archive!(temp_path)
else
raise 'unsupported artifacts format'
raise FailedToExtractError, 'unsupported artifacts format'
end
end
 
Loading
Loading
@@ -84,17 +85,17 @@ module Projects
%W(dd bs=#{BLOCK_SIZE} count=#{blocks}),
%W(tar -x -C #{temp_path} #{SITE_PATH}),
err: '/dev/null')
raise 'pages failed to extract' unless results.compact.all?(&:success?)
raise FailedToExtractError, 'pages failed to extract' unless results.compact.all?(&:success?)
end
 
def extract_zip_archive!(temp_path)
raise 'missing artifacts metadata' unless build.artifacts_metadata?
raise FailedToExtractError, '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 "artifacts for pages are too large: #{public_entry.total_size}"
raise FailedToExtractError, "artifacts for pages are too large: #{public_entry.total_size}"
end
 
# Requires UnZip at least 6.00 Info-ZIP.
Loading
Loading
@@ -103,7 +104,7 @@ module Projects
# We add * to end of SITE_PATH, because we want to extract SITE_PATH and all subdirectories
site_path = File.join(SITE_PATH, '*')
unless system(*%W(unzip -qq -n #{artifacts} #{site_path} -d #{temp_path}))
raise 'pages failed to extract'
raise FailedToExtractError, 'pages failed to extract'
end
end
 
Loading
Loading
Loading
Loading
@@ -31,7 +31,5 @@ describe 'User browses a job', :js do
page.within('.erased') do
expect(page).to have_content('Job has been erased')
end
expect(build.project.running_or_pending_build_count).to eq(build.project.builds.running_or_pending.count(:all))
end
end
Loading
Loading
@@ -258,7 +258,7 @@ feature 'Pages' do
end
 
let(:ci_build) do
build(
create(
:ci_build,
project: project,
pipeline: pipeline,
Loading
Loading
Loading
Loading
@@ -34,6 +34,7 @@ describe Projects::UpdatePagesService do
context 'with expiry date' do
before do
build.artifacts_expire_in = "2 days"
build.save!
end
 
it "doesn't delete artifacts" do
Loading
Loading
@@ -105,6 +106,7 @@ describe Projects::UpdatePagesService do
context 'with expiry date' do
before do
build.artifacts_expire_in = "2 days"
build.save!
end
 
it "doesn't delete artifacts" do
Loading
Loading
@@ -159,6 +161,17 @@ describe Projects::UpdatePagesService do
 
expect(execute).not_to eq(:success)
end
context 'when timeout happens by DNS error' do
before do
allow_any_instance_of(Projects::UpdatePagesService)
.to receive(:extract_zip_archive!).and_raise(SocketError)
end
it 'raises an error' do
expect { execute }.to raise_error(SocketError)
end
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