diff options
| author | Stan Hu <stanhu@gmail.com> | 2018-09-13 19:08:07 +0000 |
|---|---|---|
| committer | Stan Hu <stanhu@gmail.com> | 2018-09-13 19:08:07 +0000 |
| commit | 3cd6939527525f8d191bc0ae519059b4e3a492ad (patch) | |
| tree | b36b9c35e13c8ebef3c6af1276dff80799fcbcb4 /spec | |
| parent | 35807fa052fed36228991a41b78a1ca09f4f0601 (diff) | |
| parent | 14738fae29d5b89d558613bb603e416a9d0ccc07 (diff) | |
| download | gitlab-shell-3cd6939527525f8d191bc0ae519059b4e3a492ad.tar.gz | |
Merge branch 'ash.mckenzie/display-feedback' into 'master'
Display helpful feedback when proxying an SSH git push to secondary request
See merge request gitlab-org/gitlab-shell!244
Diffstat (limited to 'spec')
| -rw-r--r-- | spec/action/custom_spec.rb | 71 | ||||
| -rw-r--r-- | spec/vcr_cassettes/custom-action-ok-with-message.yml | 99 | ||||
| -rw-r--r-- | spec/vcr_cassettes/custom-action-ok.yml | 4 |
3 files changed, 152 insertions, 22 deletions
diff --git a/spec/action/custom_spec.rb b/spec/action/custom_spec.rb index e85df71..78533c3 100644 --- a/spec/action/custom_spec.rb +++ b/spec/action/custom_spec.rb @@ -26,31 +26,62 @@ describe Action::Custom do end context 'that are valid' do - let(:payload) do - { - 'action' => 'geo_proxy_to_primary', - 'data' => { - 'api_endpoints' => %w{/api/v4/fake/info_refs /api/v4/fake/push}, - 'gl_username' => 'user1', - 'primary_repo' => 'http://localhost:3001/user1/repo1.git' - } - } + where(:primary_repo_data) do + [ + [ 'http://localhost:3001/user1/repo1.git' ], + [{ 'http' => 'http://localhost:3001/user1/repo1.git' }], + [{ 'http' => 'http://localhost:3001/user1/repo1.git', 'ssh' => 'ssh://user@localhost:3002/user1/repo1.git' }] + ] end - context 'and responds correctly' do - it 'returns an instance of Net::HTTPCreated' do - VCR.use_cassette("custom-action-ok") do - expect(subject.execute).to be_instance_of(Net::HTTPCreated) - end + with_them do + let(:payload) do + { + 'action' => 'geo_proxy_to_primary', + 'data' => { + 'api_endpoints' => %w{/api/v4/fake/info_refs /api/v4/fake/push}, + 'gl_username' => 'user1', + 'primary_repo' => primary_repo_data + } + } end - end - context 'but responds incorrectly' do - it 'raises an UnsuccessfulError exception' do - VCR.use_cassette("custom-action-ok-not-json") do - expect { + context 'and responds correctly' do + it 'prints a Base64 encoded result to $stdout' do + VCR.use_cassette("custom-action-ok") do + expect($stdout).to receive(:print).with('info_refs-result').ordered + expect($stdout).to receive(:print).with('push-result').ordered subject.execute - }.to raise_error(Action::Custom::UnsuccessfulError, 'Response was not valid JSON') + end + end + + context 'with results printed to $stdout' do + before do + allow($stdout).to receive(:print).with('info_refs-result') + allow($stdout).to receive(:print).with('push-result') + end + + it 'prints a message to $stderr' do + VCR.use_cassette("custom-action-ok-with-message") do + expect { subject.execute }.to output(/NOTE: Message here/).to_stderr + end + end + + it 'returns an instance of Net::HTTPCreated' do + VCR.use_cassette("custom-action-ok") do + expect(subject.execute ).to be_instance_of(Net::HTTPCreated) + end + end + end + end + + context 'but responds incorrectly' do + it 'raises an UnsuccessfulError exception' do + VCR.use_cassette("custom-action-ok-not-json") do + expect { + subject.execute + }.to raise_error(Action::Custom::UnsuccessfulError, 'Response was not valid JSON') + end end end end diff --git a/spec/vcr_cassettes/custom-action-ok-with-message.yml b/spec/vcr_cassettes/custom-action-ok-with-message.yml new file mode 100644 index 0000000..c2dbd58 --- /dev/null +++ b/spec/vcr_cassettes/custom-action-ok-with-message.yml @@ -0,0 +1,99 @@ +--- +http_interactions: +- request: + method: post + uri: http://localhost:3000/api/v4/fake/info_refs + body: + encoding: UTF-8 + string: '{"data":{"gl_username":"user1","primary_repo":"http://localhost:3001/user1/repo1.git","gl_id":"key-1"},"output":"","secret_token":"0a3938d9d95d807e94d937af3a4fbbea"}' + headers: + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + Host: + - localhost + response: + status: + code: 200 + message: OK + headers: + Date: + - Fri, 20 Jul 2018 06:18:58 GMT + Connection: + - close + X-Frame-Options: + - SAMEORIGIN + X-Content-Type-Options: + - nosniff + Content-Type: + - application/json + Content-Length: + - '172' + Vary: + - Origin + Etag: + - W/"7d01e1e3dbcbe7cca9607461352f8244" + Cache-Control: + - max-age=0, private, must-revalidate + X-Request-Id: + - 03afa234-b6be-49ab-9392-4aa35c5dee25 + X-Runtime: + - '1.436040' + body: + encoding: UTF-8 + string: '{"result":"aW5mb19yZWZzLXJlc3VsdA==\n", "message":"NOTE: Message here"}' + http_version: + recorded_at: Fri, 20 Jul 2018 06:18:58 GMT +- request: + method: post + uri: http://localhost:3000/api/v4/fake/push + body: + encoding: UTF-8 + string: '{"data":{"gl_username":"user1","primary_repo":"http://localhost:3001/user1/repo1.git","gl_id":"key-1"},"output":"info_refs-result","secret_token":"0a3938d9d95d807e94d937af3a4fbbea"}' + headers: + Content-Type: + - application/json + Accept-Encoding: + - gzip;q=1.0,deflate;q=0.6,identity;q=0.3 + Accept: + - "*/*" + User-Agent: + - Ruby + Host: + - localhost + response: + status: + code: 201 + message: Created + headers: + Date: + - Fri, 20 Jul 2018 06:19:08 GMT + Connection: + - close + X-Frame-Options: + - SAMEORIGIN + X-Content-Type-Options: + - nosniff + Content-Type: + - application/json + Content-Length: + - '13' + Vary: + - Origin + Cache-Control: + - no-cache + X-Request-Id: + - 0c6894ac-7f8e-4cdb-871f-4cb64d3731ca + X-Runtime: + - '0.786754' + body: + encoding: UTF-8 + string: '{"result":"cHVzaC1yZXN1bHQ=\n"}' + http_version: + recorded_at: Fri, 20 Jul 2018 06:19:08 GMT +recorded_with: VCR 2.4.0 diff --git a/spec/vcr_cassettes/custom-action-ok.yml b/spec/vcr_cassettes/custom-action-ok.yml index a057441..9d44a37 100644 --- a/spec/vcr_cassettes/custom-action-ok.yml +++ b/spec/vcr_cassettes/custom-action-ok.yml @@ -46,7 +46,7 @@ http_interactions: - '1.436040' body: encoding: UTF-8 - string: '{"result":"info_refs-result"}' + string: '{"result":"aW5mb19yZWZzLXJlc3VsdA==\n"}' http_version: recorded_at: Fri, 20 Jul 2018 06:18:58 GMT - request: @@ -93,7 +93,7 @@ http_interactions: - '0.786754' body: encoding: UTF-8 - string: '{"result":"push-result"}' + string: '{"result":"cHVzaC1yZXN1bHQ=\n"}' http_version: recorded_at: Fri, 20 Jul 2018 06:19:08 GMT recorded_with: VCR 2.4.0 |
