Commit dd29283a authored by Tomasz Maczukin's avatar Tomasz Maczukin

Make sure that appending is done on a valid length

parent 360bd831
......@@ -231,10 +231,10 @@ module Ci
end
def trace_length
unless trace.present?
0
if raw_trace
raw_trace.length
else
trace.length
0
end
end
......@@ -250,9 +250,10 @@ module Ci
end
private :recreate_trace_dir
def append_trace(trace_part)
def append_trace(trace_part, offset)
recreate_trace_dir
File.truncate(path_to_trace, offset)
File.open(path_to_trace, 'a') do |f|
f.write(trace_part)
end
......
......@@ -50,6 +50,16 @@ module Ci
end
end
# Send incremental log update - Runners only
#
# Parameters:
# id (required) - The ID of a build
# Body:
# content of logs to append
# Headers:
# Content-Range: range of conntent that was sent
# Example Request:
# PATCH /builds/:id/trace.txt
patch ":id/trace.txt" do
build = Ci::Build.find_by_id(params[:id])
not_found! unless build
......@@ -64,7 +74,7 @@ module Ci
return error!('416 Range Not Satisfiable', 416, { 'Range' => "0-#{build.trace_length}" })
end
build.append_trace(request.body.read)
build.append_trace(request.body.read, content_range[0].to_i)
status 202
header 'Build-Status', build.status
......
......@@ -195,7 +195,7 @@ describe Ci::API::API do
it { expect(response.status).to eq 400 }
end
context 'when build has been erased' do
context 'when build has been errased' do
let(:build) { create(:ci_build, runner_id: runner.id, erased_at: Time.now) }
it { expect(response.status).to eq 403 }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment