summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/gitlab_net.rb2
-rw-r--r--lib/http_helper.rb26
-rw-r--r--spec/gitlab_net_spec.rb75
3 files changed, 79 insertions, 24 deletions
diff --git a/lib/gitlab_net.rb b/lib/gitlab_net.rb
index bf417a4..584dd93 100644
--- a/lib/gitlab_net.rb
+++ b/lib/gitlab_net.rb
@@ -91,7 +91,7 @@ class GitlabNet # rubocop:disable Metrics/ClassLength
end
def check
- get("#{internal_api_endpoint}/check", read_timeout: CHECK_TIMEOUT)
+ get("#{internal_api_endpoint}/check", options: { read_timeout: CHECK_TIMEOUT })
end
def authorized_key(key)
diff --git a/lib/http_helper.rb b/lib/http_helper.rb
index 75dd76b..62d0c51 100644
--- a/lib/http_helper.rb
+++ b/lib/http_helper.rb
@@ -33,15 +33,19 @@ module HTTPHelper
http
end
- def http_request_for(method, uri, params = {})
+ def http_request_for(method, uri, params: {}, headers: {}, options: {})
request_klass = method == :get ? Net::HTTP::Get : Net::HTTP::Post
- request = request_klass.new(uri.request_uri)
+ request = request_klass.new(uri.request_uri, headers)
user = config.http_settings['user']
password = config.http_settings['password']
request.basic_auth(user, password) if user && password
- request.set_form_data(params.merge(secret_token: secret_token))
+ if options[:json]
+ request.body = options[:json].merge(secret_token: secret_token).to_json
+ else
+ request.set_form_data(params.merge(secret_token: secret_token))
+ end
if uri.is_a?(URI::HTTPUNIX)
# The HTTPUNIX HTTP client does not set a correct Host header. This can
@@ -52,13 +56,15 @@ module HTTPHelper
request
end
- def request(method, url, params = {}, options = {})
+ def request(method, url, params: {}, headers: {}, options: {})
$logger.debug('Performing request', method: method.to_s.upcase, url: url)
uri = URI.parse(url)
-
http = http_client_for(uri, options)
- request = http_request_for(method, uri, params)
+ request = http_request_for(method, uri,
+ params: params,
+ headers: headers,
+ options: options)
begin
start_time = Time.new
@@ -79,12 +85,12 @@ module HTTPHelper
response
end
- def get(url, options = {})
- request(:get, url, {}, options)
+ def get(url, headers: {}, options: {})
+ request(:get, url, headers: headers, options: options)
end
- def post(url, params)
- request(:post, url, params)
+ def post(url, params, headers: {}, options: {})
+ request(:post, url, params: params, headers: headers, options: options)
end
def cert_store
diff --git a/spec/gitlab_net_spec.rb b/spec/gitlab_net_spec.rb
index 3484807..982c4c5 100644
--- a/spec/gitlab_net_spec.rb
+++ b/spec/gitlab_net_spec.rb
@@ -5,6 +5,7 @@ require_relative '../lib/gitlab_access_status'
describe GitlabNet, vcr: true do
let(:gitlab_net) { GitlabNet.new }
let(:changes) { ['0000000000000000000000000000000000000000 92d0970eefd7acb6d548878925ce2208cfe2d2ec refs/heads/branch4'] }
+ let(:base_api_endpoint) { 'http://localhost:3000/api/v4' }
let(:internal_api_endpoint) { 'http://localhost:3000/api/v4/internal' }
let(:project) { 'gitlab-org/gitlab-test.git' }
let(:key) { 'key-1' }
@@ -12,7 +13,7 @@ describe GitlabNet, vcr: true do
let(:secret) { "0a3938d9d95d807e94d937af3a4fbbea\n" }
before do
- gitlab_net.stub(:internal_api_endpoint).and_return(internal_api_endpoint)
+ gitlab_net.stub(:base_api_endpoint).and_return(base_api_endpoint)
gitlab_net.stub(:secret_token).and_return(secret)
end
@@ -381,24 +382,72 @@ describe GitlabNet, vcr: true do
describe :http_request_for do
context 'with stub' do
- let(:get) do
- double(Net::HTTP::Get).tap do |get|
- Net::HTTP::Get.stub(:new) { get }
- end
- end
+ let(:get) { double(Net::HTTP::Get) }
let(:user) { 'user' }
let(:password) { 'password' }
let(:url) { URI 'http://localhost/' }
- subject { gitlab_net.send :http_request_for, :get, url }
+ let(:params) { { 'key1' => 'value1' } }
+ let(:headers) { { 'Content-Type' => 'application/json'} }
+ let(:options) { { json: { 'key2' => 'value2' } } }
+
+ context 'with no params, options or headers' do
+ subject { gitlab_net.send :http_request_for, :get, url }
+
+ before do
+ gitlab_net.send(:config).http_settings.stub(:[]).with('user') { user }
+ gitlab_net.send(:config).http_settings.stub(:[]).with('password') { password }
+ Net::HTTP::Get.should_receive(:new).with('/', {}).and_return(get)
+ get.should_receive(:basic_auth).with(user, password).once
+ get.should_receive(:set_form_data).with(hash_including(secret_token: secret)).once
+ end
- before do
- gitlab_net.send(:config).http_settings.stub(:[]).with('user') { user }
- gitlab_net.send(:config).http_settings.stub(:[]).with('password') { password }
- get.should_receive(:basic_auth).with(user, password).once
- get.should_receive(:set_form_data).with(hash_including(secret_token: secret)).once
+ it { should_not be_nil }
end
- it { should_not be_nil }
+ context 'with params' do
+ subject { gitlab_net.send :http_request_for, :get, url, params: params, headers: headers }
+
+ before do
+ gitlab_net.send(:config).http_settings.stub(:[]).with('user') { user }
+ gitlab_net.send(:config).http_settings.stub(:[]).with('password') { password }
+ Net::HTTP::Get.should_receive(:new).with('/', headers).and_return(get)
+ get.should_receive(:basic_auth).with(user, password).once
+ get.should_receive(:set_form_data).with({ 'key1' => 'value1', secret_token: secret }).once
+ end
+
+ it { should_not be_nil }
+ end
+
+ context 'with headers' do
+ subject { gitlab_net.send :http_request_for, :get, url, headers: headers }
+
+ before do
+ gitlab_net.send(:config).http_settings.stub(:[]).with('user') { user }
+ gitlab_net.send(:config).http_settings.stub(:[]).with('password') { password }
+ Net::HTTP::Get.should_receive(:new).with('/', headers).and_return(get)
+ get.should_receive(:basic_auth).with(user, password).once
+ get.should_receive(:set_form_data).with(hash_including(secret_token: secret)).once
+ end
+
+ it { should_not be_nil }
+ end
+
+ context 'with options' do
+ context 'with json' do
+ subject { gitlab_net.send :http_request_for, :get, url, options: options }
+
+ before do
+ gitlab_net.send(:config).http_settings.stub(:[]).with('user') { user }
+ gitlab_net.send(:config).http_settings.stub(:[]).with('password') { password }
+ Net::HTTP::Get.should_receive(:new).with('/', {}).and_return(get)
+ get.should_receive(:basic_auth).with(user, password).once
+ get.should_receive(:body=).with({ 'key2' => 'value2', secret_token: secret }.to_json).once
+ get.should_not_receive(:set_form_data)
+ end
+
+ it { should_not be_nil }
+ end
+ end
end
context 'Unix socket' do