summaryrefslogtreecommitdiff
path: root/lib/gitlab/net_http_adapter.rb
blob: 2f7557f2bc3f5388b6bd74d9691adc5fbdc7e816 (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
# frozen_string_literal: true

module Gitlab
  # Webmock overwrites the Net::HTTP#request method with
  # https://github.com/bblimke/webmock/blob/867f4b290fd133658aa9530cba4ba8b8c52c0d35/lib/webmock/http_lib_adapters/net_http.rb#L74
  # Net::HTTP#request usually calls Net::HTTP#connect but the Webmock overwrite doesn't.
  # This makes sure that, in a test environment, the superclass is the Webmock overwrite.
  parent_class = if defined?(WebMock) && Rails.env.test?
                   WebMock::HttpLibAdapters::NetHttpAdapter.instance_variable_get('@webMockNetHTTP')
                 else
                   Net::HTTP
                 end

  class NetHttpAdapter < parent_class
    extend ::Gitlab::Utils::Override

    private

    override :connect
    def connect
      result = super

      @socket = Gitlab::BufferedIo.new(@socket.io,
        read_timeout: @socket.read_timeout,
        write_timeout: @socket.write_timeout,
        continue_timeout: @socket.continue_timeout,
        debug_output: @socket.debug_output)

      result
    end
  end
end