summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlejandro Rodríguez <alejorro70@gmail.com>2017-02-10 08:11:57 -0300
committerAlejandro Rodríguez <alejorro70@gmail.com>2017-02-10 14:12:27 -0300
commit09e4814483863b3cb570a98746c684a2709eece8 (patch)
tree04e97e944380fbe114d410f084c7fa4cc05e89bb
parentb98d59acdf6453708ec53e38146238cab9f9754c (diff)
downloadgitlab-shell-gitaly-post-receive-2.tar.gz
Use api/v4 for gitaly notification and add testsgitaly-post-receive-2
-rw-r--r--lib/gitlab_net.rb22
-rw-r--r--spec/gitlab_net_spec.rb25
-rw-r--r--spec/vcr_cassettes/notify-post-receive.yml44
3 files changed, 79 insertions, 12 deletions
diff --git a/lib/gitlab_net.rb b/lib/gitlab_net.rb
index e8377cc..438c626 100644
--- a/lib/gitlab_net.rb
+++ b/lib/gitlab_net.rb
@@ -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'
@@ -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
@@ -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)
@@ -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
@@ -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
@@ -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)
diff --git a/spec/gitlab_net_spec.rb b/spec/gitlab_net_spec.rb
index e3ab16c..1b64567 100644
--- a/spec/gitlab_net_spec.rb
+++ b/spec/gitlab_net_spec.rb
@@ -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
@@ -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
@@ -234,6 +245,14 @@ describe GitlabNet, vcr: true do
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
@@ -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
diff --git a/spec/vcr_cassettes/notify-post-receive.yml b/spec/vcr_cassettes/notify-post-receive.yml
new file mode 100644
index 0000000..9eeb297
--- /dev/null
+++ b/spec/vcr_cassettes/notify-post-receive.yml
@@ -0,0 +1,44 @@
+---
+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