rest-client 1.6.7 → 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
 - data/.gitignore +9 -0
 - data/.mailmap +10 -0
 - data/.rspec +2 -0
 - data/.rubocop +2 -0
 - data/.rubocop-disables.yml +386 -0
 - data/.rubocop.yml +8 -0
 - data/.travis.yml +62 -0
 - data/AUTHORS +106 -0
 - data/Gemfile +11 -0
 - data/LICENSE +21 -0
 - data/README.md +901 -0
 - data/Rakefile +109 -35
 - data/bin/restclient +11 -12
 - data/history.md +244 -1
 - data/lib/restclient.rb +27 -18
 - data/lib/restclient/abstract_response.rb +197 -51
 - data/lib/restclient/exceptions.rb +110 -59
 - data/lib/restclient/params_array.rb +72 -0
 - data/lib/restclient/payload.rb +74 -75
 - data/lib/restclient/platform.rb +49 -0
 - data/lib/restclient/raw_response.rb +21 -6
 - data/lib/restclient/request.rb +747 -183
 - data/lib/restclient/resource.rb +22 -13
 - data/lib/restclient/response.rb +75 -9
 - data/lib/restclient/utils.rb +274 -0
 - data/lib/restclient/version.rb +8 -0
 - data/lib/restclient/windows.rb +8 -0
 - data/lib/restclient/windows/root_certs.rb +105 -0
 - data/rest-client.gemspec +32 -0
 - data/rest-client.windows.gemspec +19 -0
 - data/spec/ISS.jpg +0 -0
 - data/spec/helpers.rb +54 -0
 - data/spec/integration/_lib.rb +1 -0
 - data/spec/integration/capath_digicert/3513523f.0 +22 -0
 - data/spec/integration/capath_digicert/399e7759.0 +22 -0
 - data/spec/integration/capath_digicert/README +8 -0
 - data/spec/integration/capath_digicert/digicert.crt +22 -0
 - data/spec/integration/capath_verisign/415660c1.0 +14 -0
 - data/spec/integration/capath_verisign/7651b327.0 +14 -0
 - data/spec/integration/capath_verisign/README +8 -0
 - data/spec/integration/capath_verisign/verisign.crt +14 -0
 - data/spec/integration/certs/digicert.crt +22 -0
 - data/spec/integration/httpbin_spec.rb +128 -0
 - data/spec/integration/integration_spec.rb +118 -0
 - data/spec/integration/request_spec.rb +109 -7
 - data/spec/spec_helper.rb +29 -0
 - data/spec/unit/_lib.rb +1 -0
 - data/spec/unit/abstract_response_spec.rb +145 -0
 - data/spec/unit/exceptions_spec.rb +108 -0
 - data/spec/unit/params_array_spec.rb +36 -0
 - data/spec/unit/payload_spec.rb +295 -0
 - data/spec/unit/raw_response_spec.rb +22 -0
 - data/spec/unit/request2_spec.rb +54 -0
 - data/spec/unit/request_spec.rb +1238 -0
 - data/spec/unit/resource_spec.rb +134 -0
 - data/spec/unit/response_spec.rb +252 -0
 - data/spec/unit/restclient_spec.rb +80 -0
 - data/spec/unit/utils_spec.rb +147 -0
 - data/spec/unit/windows/root_certs_spec.rb +22 -0
 - metadata +265 -117
 - data/README.rdoc +0 -285
 - data/VERSION +0 -1
 - data/lib/restclient/net_http_ext.rb +0 -55
 - data/spec/abstract_response_spec.rb +0 -85
 - data/spec/base.rb +0 -16
 - data/spec/exceptions_spec.rb +0 -98
 - data/spec/integration/certs/equifax.crt +0 -19
 - data/spec/integration_spec.rb +0 -38
 - data/spec/master_shake.jpg +0 -0
 - data/spec/payload_spec.rb +0 -234
 - data/spec/raw_response_spec.rb +0 -17
 - data/spec/request2_spec.rb +0 -40
 - data/spec/request_spec.rb +0 -529
 - data/spec/resource_spec.rb +0 -134
 - data/spec/response_spec.rb +0 -169
 - data/spec/restclient_spec.rb +0 -73
 
| 
         @@ -0,0 +1,118 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # -*- coding: utf-8 -*-
         
     | 
| 
      
 2 
     | 
    
         
            +
            require_relative '_lib'
         
     | 
| 
      
 3 
     | 
    
         
            +
            require 'base64'
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            describe RestClient do
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
              it "a simple request" do
         
     | 
| 
      
 8 
     | 
    
         
            +
                body = 'abc'
         
     | 
| 
      
 9 
     | 
    
         
            +
                stub_request(:get, "www.example.com").to_return(:body => body, :status => 200)
         
     | 
| 
      
 10 
     | 
    
         
            +
                response = RestClient.get "www.example.com"
         
     | 
| 
      
 11 
     | 
    
         
            +
                expect(response.code).to eq 200
         
     | 
| 
      
 12 
     | 
    
         
            +
                expect(response.body).to eq body
         
     | 
| 
      
 13 
     | 
    
         
            +
              end
         
     | 
| 
      
 14 
     | 
    
         
            +
             
     | 
| 
      
 15 
     | 
    
         
            +
              it "a 404" do
         
     | 
| 
      
 16 
     | 
    
         
            +
                body = "Ho hai ! I'm not here !"
         
     | 
| 
      
 17 
     | 
    
         
            +
                stub_request(:get, "www.example.com").to_return(:body => body, :status => 404)
         
     | 
| 
      
 18 
     | 
    
         
            +
                begin
         
     | 
| 
      
 19 
     | 
    
         
            +
                  RestClient.get "www.example.com"
         
     | 
| 
      
 20 
     | 
    
         
            +
                  raise
         
     | 
| 
      
 21 
     | 
    
         
            +
                rescue RestClient::ResourceNotFound => e
         
     | 
| 
      
 22 
     | 
    
         
            +
                  expect(e.http_code).to eq 404
         
     | 
| 
      
 23 
     | 
    
         
            +
                  expect(e.response.code).to eq 404
         
     | 
| 
      
 24 
     | 
    
         
            +
                  expect(e.response.body).to eq body
         
     | 
| 
      
 25 
     | 
    
         
            +
                  expect(e.http_body).to eq body
         
     | 
| 
      
 26 
     | 
    
         
            +
                end
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              describe 'charset parsing' do
         
     | 
| 
      
 30 
     | 
    
         
            +
                it 'handles utf-8' do
         
     | 
| 
      
 31 
     | 
    
         
            +
                  body = "λ".force_encoding('ASCII-8BIT')
         
     | 
| 
      
 32 
     | 
    
         
            +
                  stub_request(:get, "www.example.com").to_return(
         
     | 
| 
      
 33 
     | 
    
         
            +
                    :body => body, :status => 200, :headers => {
         
     | 
| 
      
 34 
     | 
    
         
            +
                      'Content-Type' => 'text/plain; charset=UTF-8'
         
     | 
| 
      
 35 
     | 
    
         
            +
                  })
         
     | 
| 
      
 36 
     | 
    
         
            +
                  response = RestClient.get "www.example.com"
         
     | 
| 
      
 37 
     | 
    
         
            +
                  expect(response.encoding).to eq Encoding::UTF_8
         
     | 
| 
      
 38 
     | 
    
         
            +
                  expect(response.valid_encoding?).to eq true
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                it 'handles windows-1252' do
         
     | 
| 
      
 42 
     | 
    
         
            +
                  body = "\xff".force_encoding('ASCII-8BIT')
         
     | 
| 
      
 43 
     | 
    
         
            +
                  stub_request(:get, "www.example.com").to_return(
         
     | 
| 
      
 44 
     | 
    
         
            +
                    :body => body, :status => 200, :headers => {
         
     | 
| 
      
 45 
     | 
    
         
            +
                      'Content-Type' => 'text/plain; charset=windows-1252'
         
     | 
| 
      
 46 
     | 
    
         
            +
                  })
         
     | 
| 
      
 47 
     | 
    
         
            +
                  response = RestClient.get "www.example.com"
         
     | 
| 
      
 48 
     | 
    
         
            +
                  expect(response.encoding).to eq Encoding::WINDOWS_1252
         
     | 
| 
      
 49 
     | 
    
         
            +
                  expect(response.encode('utf-8')).to eq "ÿ"
         
     | 
| 
      
 50 
     | 
    
         
            +
                  expect(response.valid_encoding?).to eq true
         
     | 
| 
      
 51 
     | 
    
         
            +
                end
         
     | 
| 
      
 52 
     | 
    
         
            +
             
     | 
| 
      
 53 
     | 
    
         
            +
                it 'handles binary' do
         
     | 
| 
      
 54 
     | 
    
         
            +
                  body = "\xfe".force_encoding('ASCII-8BIT')
         
     | 
| 
      
 55 
     | 
    
         
            +
                  stub_request(:get, "www.example.com").to_return(
         
     | 
| 
      
 56 
     | 
    
         
            +
                    :body => body, :status => 200, :headers => {
         
     | 
| 
      
 57 
     | 
    
         
            +
                      'Content-Type' => 'application/octet-stream; charset=binary'
         
     | 
| 
      
 58 
     | 
    
         
            +
                  })
         
     | 
| 
      
 59 
     | 
    
         
            +
                  response = RestClient.get "www.example.com"
         
     | 
| 
      
 60 
     | 
    
         
            +
                  expect(response.encoding).to eq Encoding::BINARY
         
     | 
| 
      
 61 
     | 
    
         
            +
                  expect {
         
     | 
| 
      
 62 
     | 
    
         
            +
                    response.encode('utf-8')
         
     | 
| 
      
 63 
     | 
    
         
            +
                  }.to raise_error(Encoding::UndefinedConversionError)
         
     | 
| 
      
 64 
     | 
    
         
            +
                  expect(response.valid_encoding?).to eq true
         
     | 
| 
      
 65 
     | 
    
         
            +
                end
         
     | 
| 
      
 66 
     | 
    
         
            +
             
     | 
| 
      
 67 
     | 
    
         
            +
                it 'handles euc-jp' do
         
     | 
| 
      
 68 
     | 
    
         
            +
                  body = "\xA4\xA2\xA4\xA4\xA4\xA6\xA4\xA8\xA4\xAA".
         
     | 
| 
      
 69 
     | 
    
         
            +
                    force_encoding(Encoding::BINARY)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  body_utf8 = 'あいうえお'
         
     | 
| 
      
 71 
     | 
    
         
            +
                  expect(body_utf8.encoding).to eq Encoding::UTF_8
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  stub_request(:get, 'www.example.com').to_return(
         
     | 
| 
      
 74 
     | 
    
         
            +
                    :body => body, :status => 200, :headers => {
         
     | 
| 
      
 75 
     | 
    
         
            +
                      'Content-Type' => 'text/plain; charset=EUC-JP'
         
     | 
| 
      
 76 
     | 
    
         
            +
                  })
         
     | 
| 
      
 77 
     | 
    
         
            +
                  response = RestClient.get 'www.example.com'
         
     | 
| 
      
 78 
     | 
    
         
            +
                  expect(response.encoding).to eq Encoding::EUC_JP
         
     | 
| 
      
 79 
     | 
    
         
            +
                  expect(response.valid_encoding?).to eq true
         
     | 
| 
      
 80 
     | 
    
         
            +
                  expect(response.length).to eq 5
         
     | 
| 
      
 81 
     | 
    
         
            +
                  expect(response.encode('utf-8')).to eq body_utf8
         
     | 
| 
      
 82 
     | 
    
         
            +
                end
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
                it 'defaults to the default encoding' do
         
     | 
| 
      
 85 
     | 
    
         
            +
                  stub_request(:get, 'www.example.com').to_return(
         
     | 
| 
      
 86 
     | 
    
         
            +
                    body: 'abc', status: 200, headers: {
         
     | 
| 
      
 87 
     | 
    
         
            +
                      'Content-Type' => 'text/plain'
         
     | 
| 
      
 88 
     | 
    
         
            +
                    })
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
                  response = RestClient.get 'www.example.com'
         
     | 
| 
      
 91 
     | 
    
         
            +
                  # expect(response.encoding).to eq Encoding.default_external
         
     | 
| 
      
 92 
     | 
    
         
            +
                  expect(response.encoding).to eq Encoding::UTF_8
         
     | 
| 
      
 93 
     | 
    
         
            +
                end
         
     | 
| 
      
 94 
     | 
    
         
            +
             
     | 
| 
      
 95 
     | 
    
         
            +
                it 'handles invalid encoding' do
         
     | 
| 
      
 96 
     | 
    
         
            +
                  stub_request(:get, 'www.example.com').to_return(
         
     | 
| 
      
 97 
     | 
    
         
            +
                    body: 'abc', status: 200, headers: {
         
     | 
| 
      
 98 
     | 
    
         
            +
                      'Content-Type' => 'text; charset=plain'
         
     | 
| 
      
 99 
     | 
    
         
            +
                    })
         
     | 
| 
      
 100 
     | 
    
         
            +
             
     | 
| 
      
 101 
     | 
    
         
            +
                  response = RestClient.get 'www.example.com'
         
     | 
| 
      
 102 
     | 
    
         
            +
                  # expect(response.encoding).to eq Encoding.default_external
         
     | 
| 
      
 103 
     | 
    
         
            +
                  expect(response.encoding).to eq Encoding::UTF_8
         
     | 
| 
      
 104 
     | 
    
         
            +
                end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
                it 'leaves images as binary' do
         
     | 
| 
      
 107 
     | 
    
         
            +
                  gif = Base64.strict_decode64('R0lGODlhAQABAAAAADs=')
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
                  stub_request(:get, 'www.example.com').to_return(
         
     | 
| 
      
 110 
     | 
    
         
            +
                    body: gif, status: 200, headers: {
         
     | 
| 
      
 111 
     | 
    
         
            +
                      'Content-Type' => 'image/gif'
         
     | 
| 
      
 112 
     | 
    
         
            +
                    })
         
     | 
| 
      
 113 
     | 
    
         
            +
             
     | 
| 
      
 114 
     | 
    
         
            +
                  response = RestClient.get 'www.example.com'
         
     | 
| 
      
 115 
     | 
    
         
            +
                  expect(response.encoding).to eq Encoding::BINARY
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
              end
         
     | 
| 
      
 118 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,25 +1,127 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
             
     | 
| 
      
 1 
     | 
    
         
            +
            require_relative '_lib'
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            describe RestClient::Request do
         
     | 
| 
      
 4 
     | 
    
         
            +
              before(:all) do
         
     | 
| 
      
 5 
     | 
    
         
            +
                WebMock.disable!
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              after(:all) do
         
     | 
| 
      
 9 
     | 
    
         
            +
                WebMock.enable!
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
       4 
12 
     | 
    
         
             
              describe "ssl verification" do
         
     | 
| 
       5 
13 
     | 
    
         
             
                it "is successful with the correct ca_file" do
         
     | 
| 
       6 
14 
     | 
    
         
             
                  request = RestClient::Request.new(
         
     | 
| 
       7 
15 
     | 
    
         
             
                    :method => :get,
         
     | 
| 
       8 
     | 
    
         
            -
                    :url => 'https://www.mozilla. 
     | 
| 
       9 
     | 
    
         
            -
                    : 
     | 
| 
       10 
     | 
    
         
            -
                    :ssl_ca_file => File.join(File.dirname(__FILE__), "certs", "equifax.crt")
         
     | 
| 
      
 16 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 17 
     | 
    
         
            +
                    :ssl_ca_file => File.join(File.dirname(__FILE__), "certs", "digicert.crt")
         
     | 
| 
       11 
18 
     | 
    
         
             
                  )
         
     | 
| 
       12 
19 
     | 
    
         
             
                  expect { request.execute }.to_not raise_error
         
     | 
| 
       13 
20 
     | 
    
         
             
                end
         
     | 
| 
       14 
21 
     | 
    
         | 
| 
       15 
     | 
    
         
            -
                it "is  
     | 
| 
      
 22 
     | 
    
         
            +
                it "is successful with the correct ca_path" do
         
     | 
| 
       16 
23 
     | 
    
         
             
                  request = RestClient::Request.new(
         
     | 
| 
       17 
24 
     | 
    
         
             
                    :method => :get,
         
     | 
| 
       18 
     | 
    
         
            -
                    :url => 'https://www.mozilla. 
     | 
| 
       19 
     | 
    
         
            -
                    : 
     | 
| 
      
 25 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 26 
     | 
    
         
            +
                    :ssl_ca_path => File.join(File.dirname(__FILE__), "capath_digicert")
         
     | 
| 
      
 27 
     | 
    
         
            +
                  )
         
     | 
| 
      
 28 
     | 
    
         
            +
                  expect { request.execute }.to_not raise_error
         
     | 
| 
      
 29 
     | 
    
         
            +
                end
         
     | 
| 
      
 30 
     | 
    
         
            +
             
     | 
| 
      
 31 
     | 
    
         
            +
                # TODO: deprecate and remove RestClient::SSLCertificateNotVerified and just
         
     | 
| 
      
 32 
     | 
    
         
            +
                # pass through OpenSSL::SSL::SSLError directly. See note in
         
     | 
| 
      
 33 
     | 
    
         
            +
                # lib/restclient/request.rb.
         
     | 
| 
      
 34 
     | 
    
         
            +
                #
         
     | 
| 
      
 35 
     | 
    
         
            +
                # On OS X, this test fails since Apple has patched OpenSSL to always fall
         
     | 
| 
      
 36 
     | 
    
         
            +
                # back on the system CA store.
         
     | 
| 
      
 37 
     | 
    
         
            +
                it "is unsuccessful with an incorrect ca_file", :unless => RestClient::Platform.mac_mri? do
         
     | 
| 
      
 38 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 39 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 40 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
       20 
41 
     | 
    
         
             
                    :ssl_ca_file => File.join(File.dirname(__FILE__), "certs", "verisign.crt")
         
     | 
| 
       21 
42 
     | 
    
         
             
                  )
         
     | 
| 
       22 
43 
     | 
    
         
             
                  expect { request.execute }.to raise_error(RestClient::SSLCertificateNotVerified)
         
     | 
| 
       23 
44 
     | 
    
         
             
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                # On OS X, this test fails since Apple has patched OpenSSL to always fall
         
     | 
| 
      
 47 
     | 
    
         
            +
                # back on the system CA store.
         
     | 
| 
      
 48 
     | 
    
         
            +
                it "is unsuccessful with an incorrect ca_path", :unless => RestClient::Platform.mac_mri? do
         
     | 
| 
      
 49 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 50 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 51 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 52 
     | 
    
         
            +
                    :ssl_ca_path => File.join(File.dirname(__FILE__), "capath_verisign")
         
     | 
| 
      
 53 
     | 
    
         
            +
                  )
         
     | 
| 
      
 54 
     | 
    
         
            +
                  expect { request.execute }.to raise_error(RestClient::SSLCertificateNotVerified)
         
     | 
| 
      
 55 
     | 
    
         
            +
                end
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                it "is successful using the default system cert store" do
         
     | 
| 
      
 58 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 59 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 60 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 61 
     | 
    
         
            +
                    :verify_ssl => true,
         
     | 
| 
      
 62 
     | 
    
         
            +
                  )
         
     | 
| 
      
 63 
     | 
    
         
            +
                  expect {request.execute }.to_not raise_error
         
     | 
| 
      
 64 
     | 
    
         
            +
                end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                it "executes the verify_callback" do
         
     | 
| 
      
 67 
     | 
    
         
            +
                  ran_callback = false
         
     | 
| 
      
 68 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 69 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 70 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 71 
     | 
    
         
            +
                    :verify_ssl => true,
         
     | 
| 
      
 72 
     | 
    
         
            +
                    :ssl_verify_callback => lambda { |preverify_ok, store_ctx|
         
     | 
| 
      
 73 
     | 
    
         
            +
                      ran_callback = true
         
     | 
| 
      
 74 
     | 
    
         
            +
                      preverify_ok
         
     | 
| 
      
 75 
     | 
    
         
            +
                    },
         
     | 
| 
      
 76 
     | 
    
         
            +
                  )
         
     | 
| 
      
 77 
     | 
    
         
            +
                  expect {request.execute }.to_not raise_error
         
     | 
| 
      
 78 
     | 
    
         
            +
                  expect(ran_callback).to eq(true)
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                it "fails verification when the callback returns false",
         
     | 
| 
      
 82 
     | 
    
         
            +
                   :unless => RestClient::Platform.mac_mri? do
         
     | 
| 
      
 83 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 84 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 85 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 86 
     | 
    
         
            +
                    :verify_ssl => true,
         
     | 
| 
      
 87 
     | 
    
         
            +
                    :ssl_verify_callback => lambda { |preverify_ok, store_ctx| false },
         
     | 
| 
      
 88 
     | 
    
         
            +
                  )
         
     | 
| 
      
 89 
     | 
    
         
            +
                  expect { request.execute }.to raise_error(RestClient::SSLCertificateNotVerified)
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                it "succeeds verification when the callback returns true",
         
     | 
| 
      
 93 
     | 
    
         
            +
                   :unless => RestClient::Platform.mac_mri? do
         
     | 
| 
      
 94 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 95 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 96 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 97 
     | 
    
         
            +
                    :verify_ssl => true,
         
     | 
| 
      
 98 
     | 
    
         
            +
                    :ssl_ca_file => File.join(File.dirname(__FILE__), "certs", "verisign.crt"),
         
     | 
| 
      
 99 
     | 
    
         
            +
                    :ssl_verify_callback => lambda { |preverify_ok, store_ctx| true },
         
     | 
| 
      
 100 
     | 
    
         
            +
                  )
         
     | 
| 
      
 101 
     | 
    
         
            +
                  expect { request.execute }.to_not raise_error
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
       24 
103 
     | 
    
         
             
              end
         
     | 
| 
      
 104 
     | 
    
         
            +
             
     | 
| 
      
 105 
     | 
    
         
            +
              describe "timeouts" do
         
     | 
| 
      
 106 
     | 
    
         
            +
                it "raises OpenTimeout when it hits an open timeout" do
         
     | 
| 
      
 107 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 108 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 109 
     | 
    
         
            +
                    :url => 'http://www.mozilla.org',
         
     | 
| 
      
 110 
     | 
    
         
            +
                    :open_timeout => 1e-10,
         
     | 
| 
      
 111 
     | 
    
         
            +
                  )
         
     | 
| 
      
 112 
     | 
    
         
            +
                  expect { request.execute }.to(
         
     | 
| 
      
 113 
     | 
    
         
            +
                    raise_error(RestClient::Exceptions::OpenTimeout))
         
     | 
| 
      
 114 
     | 
    
         
            +
                end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
                it "raises ReadTimeout when it hits a read timeout via :read_timeout" do
         
     | 
| 
      
 117 
     | 
    
         
            +
                  request = RestClient::Request.new(
         
     | 
| 
      
 118 
     | 
    
         
            +
                    :method => :get,
         
     | 
| 
      
 119 
     | 
    
         
            +
                    :url => 'https://www.mozilla.org',
         
     | 
| 
      
 120 
     | 
    
         
            +
                    :read_timeout => 1e-10,
         
     | 
| 
      
 121 
     | 
    
         
            +
                  )
         
     | 
| 
      
 122 
     | 
    
         
            +
                  expect { request.execute }.to(
         
     | 
| 
      
 123 
     | 
    
         
            +
                    raise_error(RestClient::Exceptions::ReadTimeout))
         
     | 
| 
      
 124 
     | 
    
         
            +
                end
         
     | 
| 
      
 125 
     | 
    
         
            +
              end
         
     | 
| 
      
 126 
     | 
    
         
            +
             
     | 
| 
       25 
127 
     | 
    
         
             
            end
         
     | 
    
        data/spec/spec_helper.rb
    ADDED
    
    | 
         @@ -0,0 +1,29 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'webmock/rspec'
         
     | 
| 
      
 2 
     | 
    
         
            +
            require 'rest-client'
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
            require_relative './helpers'
         
     | 
| 
      
 5 
     | 
    
         
            +
             
     | 
| 
      
 6 
     | 
    
         
            +
            # See http://rubydoc.info/gems/rspec-core/RSpec/Core/Configuration
         
     | 
| 
      
 7 
     | 
    
         
            +
            RSpec.configure do |config|
         
     | 
| 
      
 8 
     | 
    
         
            +
              config.raise_errors_for_deprecations!
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
              # Run specs in random order to surface order dependencies. If you find an
         
     | 
| 
      
 11 
     | 
    
         
            +
              # order dependency and want to debug it, you can fix the order by providing
         
     | 
| 
      
 12 
     | 
    
         
            +
              # the seed, which is printed after each run.
         
     | 
| 
      
 13 
     | 
    
         
            +
              #     --seed 1234
         
     | 
| 
      
 14 
     | 
    
         
            +
              config.order = 'random'
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              # always run with ruby warnings enabled
         
     | 
| 
      
 17 
     | 
    
         
            +
              # TODO: figure out why this is so obscenely noisy (rspec bug?)
         
     | 
| 
      
 18 
     | 
    
         
            +
              # config.warnings = true
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              # add helpers
         
     | 
| 
      
 21 
     | 
    
         
            +
              config.include Helpers, :include_helpers
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
              config.mock_with :rspec do |mocks|
         
     | 
| 
      
 24 
     | 
    
         
            +
                mocks.yield_receiver_to_any_instance_implementation_blocks = true
         
     | 
| 
      
 25 
     | 
    
         
            +
              end
         
     | 
| 
      
 26 
     | 
    
         
            +
            end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            # always run with ruby warnings enabled (see above)
         
     | 
| 
      
 29 
     | 
    
         
            +
            $VERBOSE = true
         
     | 
    
        data/spec/unit/_lib.rb
    ADDED
    
    | 
         @@ -0,0 +1 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative '../spec_helper'
         
     | 
| 
         @@ -0,0 +1,145 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative '_lib'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe RestClient::AbstractResponse, :include_helpers do
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              # Sample class implementing AbstractResponse used for testing.
         
     | 
| 
      
 6 
     | 
    
         
            +
              class MyAbstractResponse
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
                include RestClient::AbstractResponse
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                attr_accessor :size
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
                def initialize(net_http_res, request)
         
     | 
| 
      
 13 
     | 
    
         
            +
                  response_set_vars(net_http_res, request, Time.now - 1)
         
     | 
| 
      
 14 
     | 
    
         
            +
                end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              end
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
              before do
         
     | 
| 
      
 19 
     | 
    
         
            +
                @net_http_res = res_double()
         
     | 
| 
      
 20 
     | 
    
         
            +
                @request = request_double(url: 'http://example.com', method: 'get')
         
     | 
| 
      
 21 
     | 
    
         
            +
                @response = MyAbstractResponse.new(@net_http_res, @request)
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              it "fetches the numeric response code" do
         
     | 
| 
      
 25 
     | 
    
         
            +
                expect(@net_http_res).to receive(:code).and_return('200')
         
     | 
| 
      
 26 
     | 
    
         
            +
                expect(@response.code).to eq 200
         
     | 
| 
      
 27 
     | 
    
         
            +
              end
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
              it "has a nice description" do
         
     | 
| 
      
 30 
     | 
    
         
            +
                expect(@net_http_res).to receive(:to_hash).and_return({'Content-Type' => ['application/pdf']})
         
     | 
| 
      
 31 
     | 
    
         
            +
                expect(@net_http_res).to receive(:code).and_return('200')
         
     | 
| 
      
 32 
     | 
    
         
            +
                expect(@response.description).to eq "200 OK | application/pdf  bytes\n"
         
     | 
| 
      
 33 
     | 
    
         
            +
              end
         
     | 
| 
      
 34 
     | 
    
         
            +
             
     | 
| 
      
 35 
     | 
    
         
            +
              describe '.beautify_headers' do
         
     | 
| 
      
 36 
     | 
    
         
            +
                it "beautifies the headers by turning the keys to symbols" do
         
     | 
| 
      
 37 
     | 
    
         
            +
                  h = RestClient::AbstractResponse.beautify_headers('content-type' => [ 'x' ])
         
     | 
| 
      
 38 
     | 
    
         
            +
                  expect(h.keys.first).to eq :content_type
         
     | 
| 
      
 39 
     | 
    
         
            +
                end
         
     | 
| 
      
 40 
     | 
    
         
            +
             
     | 
| 
      
 41 
     | 
    
         
            +
                it "beautifies the headers by turning the values to strings instead of one-element arrays" do
         
     | 
| 
      
 42 
     | 
    
         
            +
                  h = RestClient::AbstractResponse.beautify_headers('x' => [ 'text/html' ] )
         
     | 
| 
      
 43 
     | 
    
         
            +
                  expect(h.values.first).to eq 'text/html'
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
                it 'joins multiple header values by comma' do
         
     | 
| 
      
 47 
     | 
    
         
            +
                  expect(RestClient::AbstractResponse.beautify_headers(
         
     | 
| 
      
 48 
     | 
    
         
            +
                    {'My-Header' => ['one', 'two']}
         
     | 
| 
      
 49 
     | 
    
         
            +
                  )).to eq({:my_header => 'one, two'})
         
     | 
| 
      
 50 
     | 
    
         
            +
                end
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                it 'leaves set-cookie headers as array' do
         
     | 
| 
      
 53 
     | 
    
         
            +
                  expect(RestClient::AbstractResponse.beautify_headers(
         
     | 
| 
      
 54 
     | 
    
         
            +
                    {'Set-Cookie' => ['cookie1=foo', 'cookie2=bar']}
         
     | 
| 
      
 55 
     | 
    
         
            +
                  )).to eq({:set_cookie => ['cookie1=foo', 'cookie2=bar']})
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              it "fetches the headers" do
         
     | 
| 
      
 60 
     | 
    
         
            +
                expect(@net_http_res).to receive(:to_hash).and_return('content-type' => [ 'text/html' ])
         
     | 
| 
      
 61 
     | 
    
         
            +
                expect(@response.headers).to eq({ :content_type => 'text/html' })
         
     | 
| 
      
 62 
     | 
    
         
            +
              end
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
              it "extracts cookies from response headers" do
         
     | 
| 
      
 65 
     | 
    
         
            +
                expect(@net_http_res).to receive(:to_hash).and_return('set-cookie' => ['session_id=1; path=/'])
         
     | 
| 
      
 66 
     | 
    
         
            +
                expect(@response.cookies).to eq({ 'session_id' => '1' })
         
     | 
| 
      
 67 
     | 
    
         
            +
              end
         
     | 
| 
      
 68 
     | 
    
         
            +
             
     | 
| 
      
 69 
     | 
    
         
            +
              it "extract strange cookies" do
         
     | 
| 
      
 70 
     | 
    
         
            +
                expect(@net_http_res).to receive(:to_hash).and_return('set-cookie' => ['session_id=ZJ/HQVH6YE+rVkTpn0zvTQ==; path=/'])
         
     | 
| 
      
 71 
     | 
    
         
            +
                expect(@response.headers).to eq({:set_cookie => ['session_id=ZJ/HQVH6YE+rVkTpn0zvTQ==; path=/']})
         
     | 
| 
      
 72 
     | 
    
         
            +
                expect(@response.cookies).to eq({ 'session_id' => 'ZJ/HQVH6YE+rVkTpn0zvTQ==' })
         
     | 
| 
      
 73 
     | 
    
         
            +
              end
         
     | 
| 
      
 74 
     | 
    
         
            +
             
     | 
| 
      
 75 
     | 
    
         
            +
              it "doesn't escape cookies" do
         
     | 
| 
      
 76 
     | 
    
         
            +
                expect(@net_http_res).to receive(:to_hash).and_return('set-cookie' => ['session_id=BAh7BzoNYXBwX25hbWUiEGFwcGxpY2F0aW9uOgpsb2dpbiIKYWRtaW4%3D%0A--08114ba654f17c04d20dcc5228ec672508f738ca; path=/'])
         
     | 
| 
      
 77 
     | 
    
         
            +
                expect(@response.cookies).to eq({ 'session_id' => 'BAh7BzoNYXBwX25hbWUiEGFwcGxpY2F0aW9uOgpsb2dpbiIKYWRtaW4%3D%0A--08114ba654f17c04d20dcc5228ec672508f738ca' })
         
     | 
| 
      
 78 
     | 
    
         
            +
              end
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
              describe '.cookie_jar' do
         
     | 
| 
      
 81 
     | 
    
         
            +
                it 'extracts cookies into cookie jar' do
         
     | 
| 
      
 82 
     | 
    
         
            +
                  expect(@net_http_res).to receive(:to_hash).and_return('set-cookie' => ['session_id=1; path=/'])
         
     | 
| 
      
 83 
     | 
    
         
            +
                  expect(@response.cookie_jar).to be_a HTTP::CookieJar
         
     | 
| 
      
 84 
     | 
    
         
            +
             
     | 
| 
      
 85 
     | 
    
         
            +
                  cookie = @response.cookie_jar.cookies.first
         
     | 
| 
      
 86 
     | 
    
         
            +
                  expect(cookie.domain).to eq 'example.com'
         
     | 
| 
      
 87 
     | 
    
         
            +
                  expect(cookie.name).to eq 'session_id'
         
     | 
| 
      
 88 
     | 
    
         
            +
                  expect(cookie.value).to eq '1'
         
     | 
| 
      
 89 
     | 
    
         
            +
                  expect(cookie.path).to eq '/'
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
      
 92 
     | 
    
         
            +
                it 'handles cookies when URI scheme is implicit' do
         
     | 
| 
      
 93 
     | 
    
         
            +
                  net_http_res = double('net http response')
         
     | 
| 
      
 94 
     | 
    
         
            +
                  expect(net_http_res).to receive(:to_hash).and_return('set-cookie' => ['session_id=1; path=/'])
         
     | 
| 
      
 95 
     | 
    
         
            +
                  request = double('request', url: 'example.com', uri: URI.parse('http://example.com'),
         
     | 
| 
      
 96 
     | 
    
         
            +
                                   method: 'get', cookie_jar: HTTP::CookieJar.new, redirection_history: nil)
         
     | 
| 
      
 97 
     | 
    
         
            +
                  response = MyAbstractResponse.new(net_http_res, request)
         
     | 
| 
      
 98 
     | 
    
         
            +
                  expect(response.cookie_jar).to be_a HTTP::CookieJar
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
      
 100 
     | 
    
         
            +
                  cookie = response.cookie_jar.cookies.first
         
     | 
| 
      
 101 
     | 
    
         
            +
                  expect(cookie.domain).to eq 'example.com'
         
     | 
| 
      
 102 
     | 
    
         
            +
                  expect(cookie.name).to eq 'session_id'
         
     | 
| 
      
 103 
     | 
    
         
            +
                  expect(cookie.value).to eq '1'
         
     | 
| 
      
 104 
     | 
    
         
            +
                  expect(cookie.path).to eq '/'
         
     | 
| 
      
 105 
     | 
    
         
            +
                end
         
     | 
| 
      
 106 
     | 
    
         
            +
              end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
              it "can access the net http result directly" do
         
     | 
| 
      
 109 
     | 
    
         
            +
                expect(@response.net_http_res).to eq @net_http_res
         
     | 
| 
      
 110 
     | 
    
         
            +
              end
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
              describe "#return!" do
         
     | 
| 
      
 113 
     | 
    
         
            +
                it "should return the response itself on 200-codes" do
         
     | 
| 
      
 114 
     | 
    
         
            +
                  expect(@net_http_res).to receive(:code).and_return('200')
         
     | 
| 
      
 115 
     | 
    
         
            +
                  expect(@response.return!).to be_equal(@response)
         
     | 
| 
      
 116 
     | 
    
         
            +
                end
         
     | 
| 
      
 117 
     | 
    
         
            +
             
     | 
| 
      
 118 
     | 
    
         
            +
                it "should raise RequestFailed on unknown codes" do
         
     | 
| 
      
 119 
     | 
    
         
            +
                  expect(@net_http_res).to receive(:code).and_return('1000')
         
     | 
| 
      
 120 
     | 
    
         
            +
                  expect { @response.return! }.to raise_error RestClient::RequestFailed
         
     | 
| 
      
 121 
     | 
    
         
            +
                end
         
     | 
| 
      
 122 
     | 
    
         
            +
             
     | 
| 
      
 123 
     | 
    
         
            +
                it "should raise an error on a redirection after non-GET/HEAD requests" do
         
     | 
| 
      
 124 
     | 
    
         
            +
                  expect(@net_http_res).to receive(:code).and_return('301')
         
     | 
| 
      
 125 
     | 
    
         
            +
                  expect(@request).to receive(:method).and_return('put')
         
     | 
| 
      
 126 
     | 
    
         
            +
                  expect(@response).not_to receive(:follow_redirection)
         
     | 
| 
      
 127 
     | 
    
         
            +
                  expect { @response.return! }.to raise_error RestClient::RequestFailed
         
     | 
| 
      
 128 
     | 
    
         
            +
                end
         
     | 
| 
      
 129 
     | 
    
         
            +
             
     | 
| 
      
 130 
     | 
    
         
            +
                it "should follow 302 redirect" do
         
     | 
| 
      
 131 
     | 
    
         
            +
                  expect(@net_http_res).to receive(:code).and_return('302')
         
     | 
| 
      
 132 
     | 
    
         
            +
                  expect(@response).to receive(:check_max_redirects).and_return('fake-check')
         
     | 
| 
      
 133 
     | 
    
         
            +
                  expect(@response).to receive(:follow_redirection).and_return('fake-redirection')
         
     | 
| 
      
 134 
     | 
    
         
            +
                  expect(@response.return!).to eq 'fake-redirection'
         
     | 
| 
      
 135 
     | 
    
         
            +
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                it "should gracefully handle 302 redirect with no location header" do
         
     | 
| 
      
 138 
     | 
    
         
            +
                  @net_http_res = res_double(code: 302)
         
     | 
| 
      
 139 
     | 
    
         
            +
                  @request = request_double()
         
     | 
| 
      
 140 
     | 
    
         
            +
                  @response = MyAbstractResponse.new(@net_http_res, @request)
         
     | 
| 
      
 141 
     | 
    
         
            +
                  expect(@response).to receive(:check_max_redirects).and_return('fake-check')
         
     | 
| 
      
 142 
     | 
    
         
            +
                  expect { @response.return! }.to raise_error RestClient::Found
         
     | 
| 
      
 143 
     | 
    
         
            +
                end
         
     | 
| 
      
 144 
     | 
    
         
            +
              end
         
     | 
| 
      
 145 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,108 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require_relative '_lib'
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            describe RestClient::Exception do
         
     | 
| 
      
 4 
     | 
    
         
            +
              it "returns a 'message' equal to the class name if the message is not set, because 'message' should not be nil" do
         
     | 
| 
      
 5 
     | 
    
         
            +
                e = RestClient::Exception.new
         
     | 
| 
      
 6 
     | 
    
         
            +
                expect(e.message).to eq "RestClient::Exception"
         
     | 
| 
      
 7 
     | 
    
         
            +
              end
         
     | 
| 
      
 8 
     | 
    
         
            +
             
     | 
| 
      
 9 
     | 
    
         
            +
              it "returns the 'message' that was set" do
         
     | 
| 
      
 10 
     | 
    
         
            +
                e = RestClient::Exception.new
         
     | 
| 
      
 11 
     | 
    
         
            +
                message = "An explicitly set message"
         
     | 
| 
      
 12 
     | 
    
         
            +
                e.message = message
         
     | 
| 
      
 13 
     | 
    
         
            +
                expect(e.message).to eq message
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              it "sets the exception message to ErrorMessage" do
         
     | 
| 
      
 17 
     | 
    
         
            +
                expect(RestClient::ResourceNotFound.new.message).to eq 'Not Found'
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              it "contains exceptions in RestClient" do
         
     | 
| 
      
 21 
     | 
    
         
            +
                expect(RestClient::Unauthorized.new).to be_a_kind_of(RestClient::Exception)
         
     | 
| 
      
 22 
     | 
    
         
            +
                expect(RestClient::ServerBrokeConnection.new).to be_a_kind_of(RestClient::Exception)
         
     | 
| 
      
 23 
     | 
    
         
            +
              end
         
     | 
| 
      
 24 
     | 
    
         
            +
            end
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            describe RestClient::ServerBrokeConnection do
         
     | 
| 
      
 27 
     | 
    
         
            +
              it "should have a default message of 'Server broke connection'" do
         
     | 
| 
      
 28 
     | 
    
         
            +
                e = RestClient::ServerBrokeConnection.new
         
     | 
| 
      
 29 
     | 
    
         
            +
                expect(e.message).to eq 'Server broke connection'
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
            end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
            describe RestClient::RequestFailed do
         
     | 
| 
      
 34 
     | 
    
         
            +
              before do
         
     | 
| 
      
 35 
     | 
    
         
            +
                @response = double('HTTP Response', :code => '502')
         
     | 
| 
      
 36 
     | 
    
         
            +
              end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
              it "stores the http response on the exception" do
         
     | 
| 
      
 39 
     | 
    
         
            +
                response = "response"
         
     | 
| 
      
 40 
     | 
    
         
            +
                begin
         
     | 
| 
      
 41 
     | 
    
         
            +
                  raise RestClient::RequestFailed, response
         
     | 
| 
      
 42 
     | 
    
         
            +
                rescue RestClient::RequestFailed => e
         
     | 
| 
      
 43 
     | 
    
         
            +
                  expect(e.response).to eq response
         
     | 
| 
      
 44 
     | 
    
         
            +
                end
         
     | 
| 
      
 45 
     | 
    
         
            +
              end
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
              it "http_code convenience method for fetching the code as an integer" do
         
     | 
| 
      
 48 
     | 
    
         
            +
                expect(RestClient::RequestFailed.new(@response).http_code).to eq 502
         
     | 
| 
      
 49 
     | 
    
         
            +
              end
         
     | 
| 
      
 50 
     | 
    
         
            +
             
     | 
| 
      
 51 
     | 
    
         
            +
              it "http_body convenience method for fetching the body (decoding when necessary)" do
         
     | 
| 
      
 52 
     | 
    
         
            +
                expect(RestClient::RequestFailed.new(@response).http_code).to eq 502
         
     | 
| 
      
 53 
     | 
    
         
            +
                expect(RestClient::RequestFailed.new(@response).message).to eq 'HTTP status code 502'
         
     | 
| 
      
 54 
     | 
    
         
            +
              end
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
              it "shows the status code in the message" do
         
     | 
| 
      
 57 
     | 
    
         
            +
                expect(RestClient::RequestFailed.new(@response).to_s).to match(/502/)
         
     | 
| 
      
 58 
     | 
    
         
            +
              end
         
     | 
| 
      
 59 
     | 
    
         
            +
            end
         
     | 
| 
      
 60 
     | 
    
         
            +
             
     | 
| 
      
 61 
     | 
    
         
            +
            describe RestClient::ResourceNotFound do
         
     | 
| 
      
 62 
     | 
    
         
            +
              it "also has the http response attached" do
         
     | 
| 
      
 63 
     | 
    
         
            +
                response = "response"
         
     | 
| 
      
 64 
     | 
    
         
            +
                begin
         
     | 
| 
      
 65 
     | 
    
         
            +
                  raise RestClient::ResourceNotFound, response
         
     | 
| 
      
 66 
     | 
    
         
            +
                rescue RestClient::ResourceNotFound => e
         
     | 
| 
      
 67 
     | 
    
         
            +
                  expect(e.response).to eq response
         
     | 
| 
      
 68 
     | 
    
         
            +
                end
         
     | 
| 
      
 69 
     | 
    
         
            +
              end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
              it 'stores the body on the response of the exception' do
         
     | 
| 
      
 72 
     | 
    
         
            +
                body = "body"
         
     | 
| 
      
 73 
     | 
    
         
            +
                stub_request(:get, "www.example.com").to_return(:body => body, :status => 404)
         
     | 
| 
      
 74 
     | 
    
         
            +
                begin
         
     | 
| 
      
 75 
     | 
    
         
            +
                  RestClient.get "www.example.com"
         
     | 
| 
      
 76 
     | 
    
         
            +
                  raise
         
     | 
| 
      
 77 
     | 
    
         
            +
                rescue RestClient::ResourceNotFound => e
         
     | 
| 
      
 78 
     | 
    
         
            +
                  expect(e.response.body).to eq body
         
     | 
| 
      
 79 
     | 
    
         
            +
                end
         
     | 
| 
      
 80 
     | 
    
         
            +
              end
         
     | 
| 
      
 81 
     | 
    
         
            +
            end
         
     | 
| 
      
 82 
     | 
    
         
            +
             
     | 
| 
      
 83 
     | 
    
         
            +
            describe "backwards compatibility" do
         
     | 
| 
      
 84 
     | 
    
         
            +
              it 'aliases RestClient::NotFound as ResourceNotFound' do
         
     | 
| 
      
 85 
     | 
    
         
            +
                expect(RestClient::ResourceNotFound).to eq RestClient::NotFound
         
     | 
| 
      
 86 
     | 
    
         
            +
              end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
              it 'aliases old names for HTTP 413, 414, 416' do
         
     | 
| 
      
 89 
     | 
    
         
            +
                expect(RestClient::RequestEntityTooLarge).to eq RestClient::PayloadTooLarge
         
     | 
| 
      
 90 
     | 
    
         
            +
                expect(RestClient::RequestURITooLong).to eq RestClient::URITooLong
         
     | 
| 
      
 91 
     | 
    
         
            +
                expect(RestClient::RequestedRangeNotSatisfiable).to eq RestClient::RangeNotSatisfiable
         
     | 
| 
      
 92 
     | 
    
         
            +
              end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
              it 'subclasses NotFound from RequestFailed, ExceptionWithResponse' do
         
     | 
| 
      
 95 
     | 
    
         
            +
                expect(RestClient::NotFound).to be < RestClient::RequestFailed
         
     | 
| 
      
 96 
     | 
    
         
            +
                expect(RestClient::NotFound).to be < RestClient::ExceptionWithResponse
         
     | 
| 
      
 97 
     | 
    
         
            +
              end
         
     | 
| 
      
 98 
     | 
    
         
            +
             
     | 
| 
      
 99 
     | 
    
         
            +
              it 'subclasses timeout from RestClient::RequestTimeout, RequestFailed, EWR' do
         
     | 
| 
      
 100 
     | 
    
         
            +
                expect(RestClient::Exceptions::OpenTimeout).to be < RestClient::Exceptions::Timeout
         
     | 
| 
      
 101 
     | 
    
         
            +
                expect(RestClient::Exceptions::ReadTimeout).to be < RestClient::Exceptions::Timeout
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
                expect(RestClient::Exceptions::Timeout).to be < RestClient::RequestTimeout
         
     | 
| 
      
 104 
     | 
    
         
            +
                expect(RestClient::Exceptions::Timeout).to be < RestClient::RequestFailed
         
     | 
| 
      
 105 
     | 
    
         
            +
                expect(RestClient::Exceptions::Timeout).to be < RestClient::ExceptionWithResponse
         
     | 
| 
      
 106 
     | 
    
         
            +
              end
         
     | 
| 
      
 107 
     | 
    
         
            +
             
     | 
| 
      
 108 
     | 
    
         
            +
            end
         
     |