lib/webmachine/spec/adapter_lint.rb in webmachine-1.2.2 vs lib/webmachine/spec/adapter_lint.rb in webmachine-1.3.0
- old
+ new
@@ -2,124 +2,158 @@
require "net/http"
shared_examples_for :adapter_lint do
attr_accessor :client
- before(:all) do
- configuration = Webmachine::Configuration.default
- dispatcher = Webmachine::Dispatcher.new
- dispatcher.add_route ["test"], Test::Resource
+ let(:address) { "127.0.0.1" }
+ let(:port) { s = TCPServer.new(address, 0); p = s.addr[1]; s.close; p }
- @adapter = described_class.new(configuration, dispatcher)
- @client = Net::HTTP.new(configuration.ip, configuration.port)
+ let(:application) do
+ application = Webmachine::Application.new
+ application.dispatcher.add_route ["test"], Test::Resource
- Thread.abort_on_exception = true
- @server_thread = Thread.new { @adapter.run }
+ application.configure do |c|
+ c.ip = address
+ c.port = port
+ end
+ application
+ end
+
+ let(:client) do
+ client = Net::HTTP.new(application.configuration.ip, port)
# Wait until the server is responsive
timeout(5) do
begin
client.start
rescue Errno::ECONNREFUSED
- sleep(0.1)
+ sleep(0.01)
retry
end
end
+ client
end
- after(:all) do
- @adapter.shutdown
- @client.finish
- @server_thread.join
+ before do
+ @adapter = described_class.new(application)
+
+ Thread.abort_on_exception = true
+ @server_thread = Thread.new { @adapter.run }
+ sleep(0.01)
end
+ after do
+ client.finish
+ @server_thread.kill
+ end
+
+ it "provides the request URI" do
+ request = Net::HTTP::Get.new("/test")
+ request["Accept"] = "test/response.request_uri"
+ response = client.request(request)
+ expect(response.body).to eq("http://#{address}:#{port}/test")
+ end
+
+ context do
+ let(:address) { "::1" }
+
+ it "provides the IPv6 request URI" do
+ if RUBY_VERSION =~ /^2\.(0|1)\./
+ skip "Net::HTTP regression in Ruby 2.(0|1)"
+ end
+
+ request = Net::HTTP::Get.new("/test")
+ request["Accept"] = "test/response.request_uri"
+ response = client.request(request)
+ expect(response.body).to eq("http://[#{address}]:#{port}/test")
+ end
+ end
+
it "provides a string-like request body" do
request = Net::HTTP::Put.new("/test")
request.body = "Hello, World!"
request["Content-Type"] = "test/request.stringbody"
response = client.request(request)
- response["Content-Length"].should eq("21")
- response.body.should eq("String: Hello, World!")
+ expect(response["Content-Length"]).to eq("21")
+ expect(response.body).to eq("String: Hello, World!")
end
it "provides an enumerable request body" do
request = Net::HTTP::Put.new("/test")
request.body = "Hello, World!"
request["Content-Type"] = "test/request.enumbody"
response = client.request(request)
- response["Content-Length"].should eq("19")
- response.body.should eq("Enum: Hello, World!")
+ expect(response["Content-Length"]).to eq("19")
+ expect(response.body).to eq("Enum: Hello, World!")
end
it "handles missing pages" do
request = Net::HTTP::Get.new("/missing")
response = client.request(request)
- response.code.should eq("404")
- response["Content-Type"].should eq("text/html")
+ expect(response.code).to eq("404")
+ expect(response["Content-Type"]).to eq("text/html")
end
it "handles empty response bodies" do
request = Net::HTTP::Post.new("/test")
request.body = ""
response = client.request(request)
- response.code.should eq("204")
- # FIXME: Mongrel/WEBrick fail this test. Is there a bug?
- #response["Content-Type"].should be_nil
- response["Content-Length"].should be_nil
- response.body.should be_nil
+ expect(response.code).to eq("204")
+ expect(["0", nil]).to include(response["Content-Length"])
+ expect(response.body).to be_nil
end
it "handles string response bodies" do
request = Net::HTTP::Get.new("/test")
request["Accept"] = "test/response.stringbody"
response = client.request(request)
- response["Content-Length"].should eq("20")
- response.body.should eq("String response body")
+ expect(response["Content-Length"]).to eq("20")
+ expect(response.body).to eq("String response body")
end
it "handles enumerable response bodies" do
request = Net::HTTP::Get.new("/test")
request["Accept"] = "test/response.enumbody"
response = client.request(request)
- response["Transfer-Encoding"].should eq("chunked")
- response.body.should eq("Enumerable response body")
+ expect(response["Transfer-Encoding"]).to eq("chunked")
+ expect(response.body).to eq("Enumerable response body")
end
it "handles proc response bodies" do
request = Net::HTTP::Get.new("/test")
request["Accept"] = "test/response.procbody"
response = client.request(request)
- response["Transfer-Encoding"].should eq("chunked")
- response.body.should eq("Proc response body")
+ expect(response["Transfer-Encoding"]).to eq("chunked")
+ expect(response.body).to eq("Proc response body")
end
it "handles fiber response bodies" do
request = Net::HTTP::Get.new("/test")
request["Accept"] = "test/response.fiberbody"
response = client.request(request)
- response["Transfer-Encoding"].should eq("chunked")
- response.body.should eq("Fiber response body")
+ expect(response["Transfer-Encoding"]).to eq("chunked")
+ expect(response.body).to eq("Fiber response body")
end
it "handles io response bodies" do
request = Net::HTTP::Get.new("/test")
request["Accept"] = "test/response.iobody"
response = client.request(request)
- response["Content-Length"].should eq("16")
- response.body.should eq("IO response body")
+ expect(response["Content-Length"]).to eq("17")
+ expect(response.body).to eq("IO response body\n")
end
it "handles request cookies" do
request = Net::HTTP::Get.new("/test")
request["Accept"] = "test/response.cookies"
request["Cookie"] = "echo=echocookie"
response = client.request(request)
- response.body.should eq("echocookie")
+ expect(response.body).to eq("echocookie")
end
it "handles response cookies" do
request = Net::HTTP::Get.new("/test")
request["Accept"] = "test/response.cookies"
response = client.request(request)
- response["Set-Cookie"].should eq("cookie=monster, rodeo=clown")
+ expect(response["Set-Cookie"]).to eq("cookie=monster, rodeo=clown")
end
end