Skip to content
Snippets Groups Projects
Commit 09e48144 authored by Alejandro Rodríguez's avatar Alejandro Rodríguez
Browse files

Use api/v4 for gitaly notification and add tests

parent b98d59ac
No related branches found
No related tags found
1 merge request!119Add gitaly notification on post-receive hook
Pipeline #
Loading
Loading
@@ -32,7 +32,7 @@ class GitlabNet
params.merge!(user_id: actor.gsub("user-", ""))
end
 
url = "#{host}/allowed"
url = "#{host_v3}/allowed"
resp = post(url, params)
 
if resp.code == '200'
Loading
Loading
@@ -44,7 +44,7 @@ class GitlabNet
 
def discover(key)
key_id = key.gsub("key-", "")
resp = get("#{host}/discover?key_id=#{key_id}")
resp = get("#{host_v3}/discover?key_id=#{key_id}")
JSON.parse(resp.body) rescue nil
end
 
Loading
Loading
@@ -54,7 +54,7 @@ class GitlabNet
key_id: key.gsub('key-', '')
}
 
resp = post("#{host}/lfs_authenticate", params)
resp = post("#{host_v3}/lfs_authenticate", params)
 
if resp.code == '200'
GitlabLfsAuthentication.build_from_json(resp.body)
Loading
Loading
@@ -62,23 +62,23 @@ class GitlabNet
end
 
def broadcast_message
resp = get("#{host}/broadcast_message")
resp = get("#{host_v3}/broadcast_message")
JSON.parse(resp.body) rescue {}
end
 
def merge_request_urls(repo_path, changes)
changes = changes.join("\n") unless changes.kind_of?(String)
changes = changes.encode('UTF-8', 'ASCII', invalid: :replace, replace: '')
resp = get("#{host}/merge_request_urls?project=#{URI.escape(repo_path)}&changes=#{URI.escape(changes)}")
resp = get("#{host_v3}/merge_request_urls?project=#{URI.escape(repo_path)}&changes=#{URI.escape(changes)}")
JSON.parse(resp.body) rescue []
end
 
def check
get("#{host}/check", read_timeout: CHECK_TIMEOUT)
get("#{host_v3}/check", read_timeout: CHECK_TIMEOUT)
end
 
def authorized_key(key)
resp = get("#{host}/authorized_keys?key=#{URI.escape(key, '+/=')}")
resp = get("#{host_v3}/authorized_keys?key=#{URI.escape(key, '+/=')}")
JSON.parse(resp.body) if resp.code == "200"
rescue
nil
Loading
Loading
@@ -86,7 +86,7 @@ class GitlabNet
 
def two_factor_recovery_codes(key)
key_id = key.gsub('key-', '')
resp = post("#{host}/two_factor_recovery_codes", key_id: key_id)
resp = post("#{host_v3}/two_factor_recovery_codes", key_id: key_id)
 
JSON.parse(resp.body) if resp.code == '200'
rescue
Loading
Loading
@@ -135,10 +135,14 @@ class GitlabNet
@config ||= GitlabConfig.new
end
 
def host
def host_v3
"#{config.gitlab_url}/api/v3/internal"
end
 
def host
"#{config.gitlab_url}/api/v4/internal"
end
def http_client_for(uri, options={})
if uri.is_a?(URI::HTTPUNIX)
http = Net::HTTPUNIX.new(uri.hostname)
Loading
Loading
Loading
Loading
@@ -8,7 +8,8 @@ describe GitlabNet, vcr: true do
let(:changes) { ['0000000000000000000000000000000000000000 92d0970eefd7acb6d548878925ce2208cfe2d2ec refs/heads/branch4'] }
 
before do
gitlab_net.stub(:host).and_return('https://dev.gitlab.org/api/v3/internal')
gitlab_net.stub(:host_v3).and_return('https://dev.gitlab.org/api/v3/internal')
gitlab_net.stub(:host).and_return('https://dev.gitlab.org/api/v4/internal')
gitlab_net.stub(:secret_token).and_return('a123')
end
 
Loading
Loading
@@ -138,6 +139,16 @@ describe GitlabNet, vcr: true do
end
end
 
describe '#notify_post_receive' do
let(:repo_path) { '/path/to/my/repo.git' }
it 'returns true if notification was succesful' do
VCR.use_cassette('notify-post-receive') do
expect(gitlab_net.notify_post_receive(repo_path)).to be_true
end
end
end
describe :check_access do
context 'ssh key with access to project' do
it 'should allow pull access for dev.gitlab.org' do
Loading
Loading
@@ -233,6 +244,14 @@ describe GitlabNet, vcr: true do
let(:net) { GitlabNet.new }
subject { net.send :host }
 
it { should include(net.send(:config).gitlab_url) }
it("uses API version 4") { should include("api/v4") }
end
describe :host_v3 do
let(:net) { GitlabNet.new }
subject { net.send :host_v3 }
it { should include(net.send(:config).gitlab_url) }
it("uses API version 3") { should include("api/v3") }
end
Loading
Loading
@@ -258,14 +277,14 @@ describe GitlabNet, vcr: true do
let(:password) { 'password' }
let(:url) { URI 'http://localhost/' }
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 }
get.should_receive(:basic_auth).with(user, password).once
get.should_receive(:set_form_data).with(hash_including(secret_token: 'a123')).once
end
it { should_not be_nil }
end
 
Loading
Loading
---
http_interactions:
- request:
method: post
uri: https://dev.gitlab.org/api/v4/internal/notify_post_receive
body:
encoding: US-ASCII
string: repo_path=%2Fpath%2Fto%2Fmy%2Frepo.git&secret_token=a123
headers:
Accept-Encoding:
- gzip;q=1.0,deflate;q=0.6,identity;q=0.3
Accept:
- "*/*"
User-Agent:
- Ruby
Content-Type:
- application/x-www-form-urlencoded
response:
status:
code: 200
message: OK
headers:
Cache-Control:
- max-age=0, private, must-revalidate
Content-Length:
- '2'
Content-Type:
- application/json
Date:
- Fri, 10 Feb 2017 17:06:53 GMT
Etag:
- W/"99914b932bd37a50b983c5e7c90ae93b"
Vary:
- Origin
X-Request-Id:
- cfefede6-9400-4ca5-a61d-2a519405295c
X-Runtime:
- '20.623406'
body:
encoding: UTF-8
string: "{}"
http_version:
recorded_at: Fri, 10 Feb 2017 17:06:53 GMT
recorded_with: VCR 2.4.0
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment