spec/httpi/adapter/net_http_spec.rb in httpi-2.4.3 vs spec/httpi/adapter/net_http_spec.rb in httpi-2.4.4

- old
+ new

@@ -1,198 +1,54 @@ require "spec_helper" -require "integration/support/server" +require "httpi/adapter/net_http" +require "httpi/request" -describe HTTPI::Adapter::NetHTTP do +begin + HTTPI::Adapter.load_adapter(:net_http) - subject(:adapter) { :net_http } + describe HTTPI::Adapter::NetHTTP do + let(:adapter) { HTTPI::Adapter::NetHTTP.new(request) } + let(:request) { HTTPI::Request.new("http://example.com") } - context "http requests" do - before :all do - @server = IntegrationServer.run - end - - after :all do - @server.stop - end - - context 'when socks is specified' do - - let(:socks_client) { mock('socks_client') } - let(:request){HTTPI::Request.new(@server.url)} - - it 'uses Net::HTTP.SOCKSProxy as client' do - socks_client.expects(:new).with(URI(@server.url).host, URI(@server.url).port).returns(:socks_client_instance) - Net::HTTP.expects(:SOCKSProxy).with('localhost', 8080).returns socks_client - - request.proxy = 'socks://localhost:8080' - adapter = HTTPI::Adapter::NetHTTP.new(request) - - expect(adapter.client).to eq(:socks_client_instance) + let(:response) { + Object.new.tap do |r| + r.stubs(:code).returns(200) + r.stubs(:body).returns("abc") + r.stubs(:to_hash).returns({"Content-Length" => "3"}) end - end + } - it "sends and receives HTTP headers" do - request = HTTPI::Request.new(@server.url + "x-header") - request.headers["X-Header"] = "HTTPI" - - response = HTTPI.get(request, adapter) - expect(response.body).to include("HTTPI") + before do + Net::HTTP.any_instance.stubs(:start).returns(response) end - it "executes GET requests" do - response = HTTPI.get(@server.url, adapter) - expect(response.body).to eq("get") - expect(response.headers["Content-Type"]).to eq("text/plain") - end + describe "settings" do + describe "open_timeout, read_timeout" do + it "are being set on the client" do + request.open_timeout = 30 + request.read_timeout = 40 - it "executes POST requests" do - response = HTTPI.post(@server.url, "<some>xml</some>", adapter) - expect(response.body).to eq("post") - expect(response.headers["Content-Type"]).to eq("text/plain") - end + adapter.client.expects(:open_timeout=).with(30) + adapter.client.expects(:read_timeout=).with(40) - it "executes HEAD requests" do - response = HTTPI.head(@server.url, adapter) - expect(response.code).to eq(200) - expect(response.headers["Content-Type"]).to eq("text/plain") - end - - it "executes PUT requests" do - response = HTTPI.put(@server.url, "<some>xml</some>", adapter) - expect(response.body).to eq("put") - expect(response.headers["Content-Type"]).to eq("text/plain") - end - - it "executes DELETE requests" do - response = HTTPI.delete(@server.url, adapter) - expect(response.body).to eq("delete") - expect(response.headers["Content-Type"]).to eq("text/plain") - end - - context "supports custom methods supported by Net::HTTP" do - let(:request) do - HTTPI::Request.new(@server.url).tap do|r| - r.body = request_body if request_body + adapter.request(:get) end end - let(:request_body) { nil } - - let(:response) { HTTPI.request(http_method, request, adapter) } - - shared_examples_for 'any supported custom method' do - specify { response.body.should eq http_method.to_s } - specify { response.headers["Content-Type"].should eq('text/plain') } + describe "write_timeout" do + if Net::HTTP.method_defined?(:write_timeout=) + it "is being set on the client" do + request.write_timeout = 50 + adapter.client.expects(:write_timeout=).with(50) + adapter.request(:get) + end + else + it "can not be set on the client" do + request.write_timeout = 50 + expect { adapter.request(:get) } + .to raise_error(HTTPI::NotSupportedError, /write_timeout/) + end + end end - - context 'PATCH' do - let(:http_method) { :patch } - let(:request_body) { "<some>xml</some>" } - - it_behaves_like 'any supported custom method' - end - - context 'UNSUPPORTED method' do - let(:http_method) { :unsupported } - - specify { expect { response }.to raise_error HTTPI::NotSupportedError } - end end - - it "supports basic authentication" do - request = HTTPI::Request.new(@server.url + "basic-auth") - request.auth.basic("admin", "secret") - - response = HTTPI.get(request, adapter) - expect(response.body).to eq("basic-auth") - end - - it "does not support digest authentication" do - request = HTTPI::Request.new(@server.url + "digest-auth") - request.auth.digest("admin", "secret") - - expect { HTTPI.get(request, adapter) }. - to raise_error(HTTPI::NotSupportedError, /does not support HTTP digest authentication/) - end - - it "supports ntlm authentication" do - request = HTTPI::Request.new(@server.url + "ntlm-auth") - request.auth.ntlm("tester", "vReqSoafRe5O") - - response = HTTPI.get(request, adapter) - expect(response.body).to eq("ntlm-auth") - end - - it 'does not support ntlm authentication when Net::NTLM is not available' do - Net.expects(:const_defined?).with(:NTLM).returns false - - request = HTTPI::Request.new(@server.url + 'ntlm-auth') - request.auth.ntlm("testing", "failures") - - expect { HTTPI.get(request, adapter) }. - to raise_error(HTTPI::NotSupportedError, /Net::NTLM is not available/) - end - - it 'does not require ntlm when ntlm authenication is not requested' do - HTTPI::Adapter::NetHTTP.any_instance.stubs(:check_net_ntlm_version!).raises(RuntimeError) - request = HTTPI::Request.new(@server.url) - expect(request.auth.ntlm?).to be false - - # make sure a request doesn't call ntlm check if we don't ask for it. - expect { HTTPI.get(request, adapter) }.not_to raise_error - HTTPI::Adapter::NetHTTP.any_instance.unstub(:check_net_ntlm_version!) - end - - it 'does check ntlm when ntlm authentication is requested' do - request = HTTPI::Request.new(@server.url + "ntlm-auth") - request.auth.ntlm("tester", "vReqSoafRe5O") - - expect { HTTPI.get(request, adapter) }.not_to raise_error - - # the check should also verify that the version of ntlm is supported and still fail if it isn't - HTTPI::Adapter::NetHTTP.any_instance.stubs(:ntlm_version).returns("0.1.1") - - request = HTTPI::Request.new(@server.url + "ntlm-auth") - request.auth.ntlm("tester", "vReqSoafRe5O") - - expect { HTTPI.get(request, adapter) }.to raise_error(ArgumentError, /Invalid version/) - - HTTPI::Adapter::NetHTTP.any_instance.unstub(:ntlm_version) - end - - it "does not crash when authenticate header is missing (on second request)" do - request = HTTPI::Request.new(@server.url + 'ntlm-auth') - request.auth.ntlm("tester", "vReqSoafRe5O") - - expect { HTTPI.get(request, adapter) }. - to_not raise_error - - expect { HTTPI.get(request, adapter) }. - to_not raise_error - end end - - # it does not support digest auth - - if RUBY_PLATFORM =~ /java/ - pending "Puma Server complains: SSL not supported on JRuby" - else - context "https requests" do - before :all do - @server = IntegrationServer.run(:ssl => true) - end - after :all do - @server.stop - end - - # it does not raise when no certificate was set up - it "works when set up properly" do - request = HTTPI::Request.new(@server.url) - request.auth.ssl.ca_cert_file = IntegrationServer.ssl_ca_file - - response = HTTPI.get(request, adapter) - expect(response.body).to eq("get") - end - end - end - end