summaryrefslogtreecommitdiff
path: root/spec/support/http_io/http_io_helpers.rb
blob: 2c68c2cd9a6f959006ea7ba4c83401637008dff4 (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
53
54
55
56
57
58
59
60
61
62
63
64
65
module HttpIOHelpers
  def stub_remote_trace_206
    WebMock.stub_request(:get, remote_trace_url)
      .to_return { |request| remote_trace_response(request, 206) }
  end

  def stub_remote_trace_200
    WebMock.stub_request(:get, remote_trace_url)
      .to_return { |request| remote_trace_response(request, 200) }
  end

  def stub_remote_trace_500
    WebMock.stub_request(:get, remote_trace_url)
      .to_return(status: [500, "Internal Server Error"])
  end

  def remote_trace_url
    "http://trace.com/trace"
  end

  def remote_trace_response(request, responce_status)
    range = request.headers['Range'].match(/bytes=(\d+)-(\d+)/)

    {
      status: responce_status,
      headers: remote_trace_response_headers(responce_status, range[1].to_i, range[2].to_i),
      body: range_trace_body(range[1].to_i, range[2].to_i)
    }
  end

  def remote_trace_response_headers(responce_status, from, to)
    headers = { 'Content-Type' => 'text/plain' }

    if responce_status == 206
      headers.merge('Content-Range' => "bytes #{from}-#{to}/#{remote_trace_size}")
    end

    headers
  end

  def range_trace_body(from, to)
    remote_trace_body[from..to]
  end

  def remote_trace_body
    @remote_trace_body ||= File.read(expand_fixture_path('trace/sample_trace'))
      .force_encoding(Encoding::BINARY)
  end

  def remote_trace_size
    remote_trace_body.bytesize
  end

  def set_smaller_buffer_size_than(file_size)
    blocks = (file_size / 128)
    new_size = (blocks / 2) * 128
    stub_const("Gitlab::Ci::Trace::HttpIO::BUFFER_SIZE", new_size)
  end

  def set_larger_buffer_size_than(file_size)
    blocks = (file_size / 128)
    new_size = (blocks * 2) * 128
    stub_const("Gitlab::Ci::Trace::HttpIO::BUFFER_SIZE", new_size)
  end
end