spec/external_spec.rb in em-http-request-1.0.2 vs spec/external_spec.rb in em-http-request-1.0.3
- old
+ new
@@ -1,128 +1,150 @@
-require 'helper'
-
-requires_connection do
-
- describe EventMachine::HttpRequest do
-
- it "should follow redirects on HEAD method (external)" do
- EventMachine.run {
- http = EventMachine::HttpRequest.new('http://www.google.com/').head :redirects => 1
- http.errback { failed(http) }
- http.callback {
- http.response_header.status.should == 200
- EM.stop
- }
- }
- end
-
- it "should follow redirect to https and initiate the handshake" do
- EventMachine.run {
- http = EventMachine::HttpRequest.new('http://analytics.postrank.com/').get :redirects => 5
-
- http.errback { failed(http) }
- http.callback {
- http.response_header.status.should == 200
- EventMachine.stop
- }
- }
- end
-
- it "should perform a streaming GET" do
- EventMachine.run {
-
- # digg.com uses chunked encoding
- http = EventMachine::HttpRequest.new('http://digg.com/news').get
-
- http.errback { failed(http) }
- http.callback {
- http.response_header.status.should == 200
- EventMachine.stop
- }
- }
- end
-
- it "should handle a 100 continue" do
- EventMachine.run {
- # 8.2.3 Use of the 100 (Continue) Status - http://www.ietf.org/rfc/rfc2616.txt
- #
- # An origin server SHOULD NOT send a 100 (Continue) response if
- # the request message does not include an Expect request-header
- # field with the "100-continue" expectation, and MUST NOT send a
- # 100 (Continue) response if such a request comes from an HTTP/1.0
- # (or earlier) client. There is an exception to this rule: for
- # compatibility with RFC 2068, a server MAY send a 100 (Continue)
- # status in response to an HTTP/1.1 PUT or POST request that does
- # not include an Expect request-header field with the "100-
- # continue" expectation. This exception, the purpose of which is
- # to minimize any client processing delays associated with an
- # undeclared wait for 100 (Continue) status, applies only to
- # HTTP/1.1 requests, and not to requests with any other HTTP-
- # version value.
- #
- # 10.1.1: 100 Continue - http://www.ietf.org/rfc/rfc2068.txt
- # The client may continue with its request. This interim response is
- # used to inform the client that the initial part of the request has
- # been received and has not yet been rejected by the server. The client
- # SHOULD continue by sending the remainder of the request or, if the
- # request has already been completed, ignore this response. The server
- # MUST send a final response after the request has been completed.
-
- url = 'http://ws.serviceobjects.com/lv/LeadValidation.asmx/ValidateLead_V2'
- http = EventMachine::HttpRequest.new(url).post :body => {:name => :test}
-
- http.errback { failed(http) }
- http.callback {
- http.response_header.status.should == 500
- http.response.should match('Missing')
- EventMachine.stop
- }
- }
- end
-
- it "should detect deflate encoding" do
- pending "need an endpoint which supports deflate.. MSN is no longer"
- EventMachine.run {
-
- options = {:head => {"accept-encoding" => "deflate"}, :redirects => 5}
- http = EventMachine::HttpRequest.new('http://www.msn.com').get options
-
- http.errback { failed(http) }
- http.callback {
- http.response_header.status.should == 200
- http.response_header["CONTENT_ENCODING"].should == "deflate"
-
- EventMachine.stop
- }
- }
- end
-
- context "keepalive" do
- it "should default to non-keepalive" do
- EventMachine.run {
- headers = {'If-Modified-Since' => 'Thu, 05 Aug 2010 22:54:44 GMT'}
- http = EventMachine::HttpRequest.new('http://www.google.com/images/logos/ps_logo2.png').get :head => headers
-
- http.errback { fail }
- start = Time.now.to_i
- http.callback {
- (Time.now.to_i - start).should be_within(2).of(0)
- EventMachine.stop
- }
- }
- end
-
- it "should work with keep-alive servers" do
- EventMachine.run {
- http = EventMachine::HttpRequest.new('http://mexicodiario.com/touch.public.json.php').get :keepalive => true
-
- http.errback { failed(http) }
- http.callback {
- http.response_header.status.should == 200
- EventMachine.stop
- }
- }
- end
- end
-
- end
-end
+require 'helper'
+
+requires_connection do
+
+ describe EventMachine::HttpRequest do
+
+ it "should follow redirects on HEAD method (external)" do
+ EventMachine.run {
+ http = EventMachine::HttpRequest.new('http://www.google.com/').head :redirects => 1
+ http.errback { failed(http) }
+ http.callback {
+ http.response_header.status.should == 200
+ EM.stop
+ }
+ }
+ end
+
+ it "should follow redirect to https and initiate the handshake" do
+ EventMachine.run {
+ http = EventMachine::HttpRequest.new('http://analytics.postrank.com/').get :redirects => 5
+
+ http.errback { failed(http) }
+ http.callback {
+ http.response_header.status.should == 200
+ EventMachine.stop
+ }
+ }
+ end
+
+ it "should perform a streaming GET" do
+ EventMachine.run {
+
+ # digg.com uses chunked encoding
+ http = EventMachine::HttpRequest.new('http://digg.com/news').get
+
+ http.errback { failed(http) }
+ http.callback {
+ http.response_header.status.should == 200
+ EventMachine.stop
+ }
+ }
+ end
+
+ it "should handle a 100 continue" do
+ EventMachine.run {
+ # 8.2.3 Use of the 100 (Continue) Status - http://www.ietf.org/rfc/rfc2616.txt
+ #
+ # An origin server SHOULD NOT send a 100 (Continue) response if
+ # the request message does not include an Expect request-header
+ # field with the "100-continue" expectation, and MUST NOT send a
+ # 100 (Continue) response if such a request comes from an HTTP/1.0
+ # (or earlier) client. There is an exception to this rule: for
+ # compatibility with RFC 2068, a server MAY send a 100 (Continue)
+ # status in response to an HTTP/1.1 PUT or POST request that does
+ # not include an Expect request-header field with the "100-
+ # continue" expectation. This exception, the purpose of which is
+ # to minimize any client processing delays associated with an
+ # undeclared wait for 100 (Continue) status, applies only to
+ # HTTP/1.1 requests, and not to requests with any other HTTP-
+ # version value.
+ #
+ # 10.1.1: 100 Continue - http://www.ietf.org/rfc/rfc2068.txt
+ # The client may continue with its request. This interim response is
+ # used to inform the client that the initial part of the request has
+ # been received and has not yet been rejected by the server. The client
+ # SHOULD continue by sending the remainder of the request or, if the
+ # request has already been completed, ignore this response. The server
+ # MUST send a final response after the request has been completed.
+
+ url = 'http://ws.serviceobjects.com/lv/LeadValidation.asmx/ValidateLead_V2'
+ http = EventMachine::HttpRequest.new(url).post :body => {:name => :test}
+
+ http.errback { failed(http) }
+ http.callback {
+ http.response_header.status.should == 500
+ http.response.should match('Missing')
+ EventMachine.stop
+ }
+ }
+ end
+
+ it "should detect deflate encoding" do
+ pending "need an endpoint which supports deflate.. MSN is no longer"
+ EventMachine.run {
+
+ options = {:head => {"accept-encoding" => "deflate"}, :redirects => 5}
+ http = EventMachine::HttpRequest.new('http://www.msn.com').get options
+
+ http.errback { failed(http) }
+ http.callback {
+ http.response_header.status.should == 200
+ http.response_header["CONTENT_ENCODING"].should == "deflate"
+
+ EventMachine.stop
+ }
+ }
+ end
+
+ it "should stream chunked gzipped data" do
+ EventMachine.run {
+ options = {:head => {"accept-encoding" => "gzip"}}
+ # GitHub sends chunked gzip, time for a little Inception ;)
+ http = EventMachine::HttpRequest.new('https://github.com/igrigorik/em-http-request/commits/master').get options
+
+ http.errback { failed(http) }
+ http.callback {
+ http.response_header.status.should == 200
+ http.response_header["CONTENT_ENCODING"].should == "gzip"
+ http.response.should == ''
+
+ EventMachine.stop
+ }
+
+ body = ''
+ http.stream do |chunk|
+ body << chunk
+ end
+ }
+ end
+
+ context "keepalive" do
+ it "should default to non-keepalive" do
+ EventMachine.run {
+ headers = {'If-Modified-Since' => 'Thu, 05 Aug 2010 22:54:44 GMT'}
+ http = EventMachine::HttpRequest.new('http://www.google.com/images/logos/ps_logo2.png').get :head => headers
+
+ http.errback { fail }
+ start = Time.now.to_i
+ http.callback {
+ (Time.now.to_i - start).should be_within(2).of(0)
+ EventMachine.stop
+ }
+ }
+ end
+
+ it "should work with keep-alive servers" do
+ EventMachine.run {
+ http = EventMachine::HttpRequest.new('http://mexicodiario.com/touch.public.json.php').get :keepalive => true
+
+ http.errback { failed(http) }
+ http.callback {
+ http.response_header.status.should == 200
+ EventMachine.stop
+ }
+ }
+ end
+ end
+
+ end
+end