summaryrefslogtreecommitdiff
path: root/spec/lib/gitlab/ci/trace_reader_spec.rb
blob: ff5551bf703e1f77baa1378366ba19691b492aeb (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
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
      result = subject.read(last_lines: last_lines)

      expect(result).to eq(expected)
      expect(result.encoding).to eq(Encoding.default_external)
    end
  end

  it 'returns everything if trying to get too many lines' do
    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)
  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