2016-09-21 04:12:32 -04:00
|
|
|
require 'spec_helper'
|
|
|
|
|
|
|
|
describe Gitlab::Ci::TraceReader do
|
|
|
|
let(:path) { __FILE__ }
|
|
|
|
let(:lines) { File.readlines(path) }
|
|
|
|
let(:bytesize) { lines.sum(&:bytesize) }
|
|
|
|
|
|
|
|
it 'returns last few lines' do
|
|
|
|
10.times do
|
|
|
|
subject = build_subject
|
|
|
|
last_lines = random_lines
|
|
|
|
|
|
|
|
expected = lines.last(last_lines).join
|
2017-01-26 05:23:01 -05:00
|
|
|
result = subject.read(last_lines: last_lines)
|
2016-09-21 04:12:32 -04:00
|
|
|
|
2017-01-26 05:23:01 -05:00
|
|
|
expect(result).to eq(expected)
|
|
|
|
expect(result.encoding).to eq(Encoding.default_external)
|
2016-09-21 04:12:32 -04:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns everything if trying to get too many lines' do
|
2017-01-26 05:23:01 -05:00
|
|
|
result = build_subject.read(last_lines: lines.size * 2)
|
|
|
|
|
|
|
|
expect(result).to eq(lines.join)
|
|
|
|
expect(result.encoding).to eq(Encoding.default_external)
|
|
|
|
end
|
|
|
|
|
|
|
|
it 'returns all contents if last_lines is not specified' do
|
|
|
|
result = build_subject.read
|
|
|
|
|
|
|
|
expect(result).to eq(lines.join)
|
|
|
|
expect(result.encoding).to eq(Encoding.default_external)
|
2016-09-21 04:12:32 -04:00
|
|
|
end
|
|
|
|
|
|
|
|
it 'raises an error if not passing an integer for last_lines' do
|
|
|
|
expect do
|
|
|
|
build_subject.read(last_lines: lines)
|
|
|
|
end.to raise_error(ArgumentError)
|
|
|
|
end
|
|
|
|
|
|
|
|
def random_lines
|
|
|
|
Random.rand(lines.size) + 1
|
|
|
|
end
|
|
|
|
|
|
|
|
def random_buffer
|
|
|
|
Random.rand(bytesize) + 1
|
|
|
|
end
|
|
|
|
|
|
|
|
def build_subject
|
|
|
|
described_class.new(__FILE__, buffer_size: random_buffer)
|
|
|
|
end
|
|
|
|
end
|