summaryrefslogtreecommitdiff
path: root/spec/lib
diff options
context:
space:
mode:
authorLin Jen-Shin <godfat@godfat.org>2016-09-21 16:12:32 +0800
committerLin Jen-Shin <godfat@godfat.org>2016-09-21 16:12:32 +0800
commit63e03dada7e754a92ca088c683f4189424ab34b1 (patch)
treeb1fa43c9dbf6bffd05c42eced7c943bcc6f3cfd7 /spec/lib
parent5869fb201459f0e44c4544076758e02299fa9227 (diff)
downloadgitlab-ce-63e03dada7e754a92ca088c683f4189424ab34b1.tar.gz
Make various trace methods take last_lines argument:
So that we could read last few lines rather than read the entire file which could be huge.
Diffstat (limited to 'spec/lib')
-rw-r--r--spec/lib/gitlab/ci/trace_reader_spec.rb40
1 files changed, 40 insertions, 0 deletions
diff --git a/spec/lib/gitlab/ci/trace_reader_spec.rb b/spec/lib/gitlab/ci/trace_reader_spec.rb
new file mode 100644
index 00000000000..f06d78694d6
--- /dev/null
+++ b/spec/lib/gitlab/ci/trace_reader_spec.rb
@@ -0,0 +1,40 @@
+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
+
+ expect(subject.read(last_lines: last_lines)).to eq(expected)
+ end
+ end
+
+ it 'returns everything if trying to get too many lines' do
+ expect(build_subject.read(last_lines: lines.size * 2)).to eq(lines.join)
+ 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