summaryrefslogtreecommitdiff
path: root/lib/rb/spec
diff options
context:
space:
mode:
authorJake Farrell <jfarrell@apache.org>2013-03-04 20:59:38 -0500
committerJake Farrell <jfarrell@apache.org>2013-03-04 20:59:38 -0500
commit073f9eb9b920bda948b306ee16e78743e42b7cd1 (patch)
tree0a1ddf53bb36127d023e2c2445e3d8df0f6b7f23 /lib/rb/spec
parent04f83112f6a84d5f572921990adf4b122e15d377 (diff)
downloadthrift-073f9eb9b920bda948b306ee16e78743e42b7cd1.tar.gz
Thrift-1629:Ruby 1.9 Compatibility during Thrift configure, make, install
Client: Ruby Patch: Nick Zalabak Updated ruby client to use thin serber over mongrel.
Diffstat (limited to 'lib/rb/spec')
-rw-r--r--lib/rb/spec/mongrel_http_server_spec.rb114
-rw-r--r--lib/rb/spec/thin_http_server_spec.rb140
2 files changed, 140 insertions, 114 deletions
diff --git a/lib/rb/spec/mongrel_http_server_spec.rb b/lib/rb/spec/mongrel_http_server_spec.rb
deleted file mode 100644
index fa11b35f5..000000000
--- a/lib/rb/spec/mongrel_http_server_spec.rb
+++ /dev/null
@@ -1,114 +0,0 @@
-#
-# Licensed to the Apache Software Foundation (ASF) under one
-# or more contributor license agreements. See the NOTICE file
-# distributed with this work for additional information
-# regarding copyright ownership. The ASF licenses this file
-# to you under the Apache License, Version 2.0 (the
-# "License"); you may not use this file except in compliance
-# with the License. You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing,
-# software distributed under the License is distributed on an
-# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-# KIND, either express or implied. See the License for the
-# specific language governing permissions and limitations
-# under the License.
-#
-
-require 'spec_helper'
-require 'thrift/server/mongrel_http_server'
-
-describe 'HTTPServer' do
-
- describe Thrift::MongrelHTTPServer do
- it "should have appropriate defaults" do
- mock_factory = mock("BinaryProtocolFactory")
- mock_proc = mock("Processor")
- Thrift::BinaryProtocolFactory.should_receive(:new).and_return(mock_factory)
- Mongrel::HttpServer.should_receive(:new).with("0.0.0.0", 80).and_return do
- mock("Mongrel::HttpServer").tap do |mock|
- handler = mock("Handler")
- Thrift::MongrelHTTPServer::Handler.should_receive(:new).with(mock_proc, mock_factory).and_return(handler)
- mock.should_receive(:register).with("/", handler)
- end
- end
- Thrift::MongrelHTTPServer.new(mock_proc)
- end
-
- it "should understand :ip, :port, :path, and :protocol_factory" do
- mock_proc = mock("Processor")
- mock_factory = mock("ProtocolFactory")
- Mongrel::HttpServer.should_receive(:new).with("1.2.3.4", 1234).and_return do
- mock("Mongrel::HttpServer").tap do |mock|
- handler = mock("Handler")
- Thrift::MongrelHTTPServer::Handler.should_receive(:new).with(mock_proc, mock_factory).and_return(handler)
- mock.should_receive(:register).with("/foo", handler)
- end
- end
- Thrift::MongrelHTTPServer.new(mock_proc, :ip => "1.2.3.4", :port => 1234, :path => "foo",
- :protocol_factory => mock_factory)
- end
-
- it "should serve using Mongrel::HttpServer" do
- Thrift::BinaryProtocolFactory.stub!(:new)
- Mongrel::HttpServer.should_receive(:new).and_return do
- mock("Mongrel::HttpServer").tap do |mock|
- Thrift::MongrelHTTPServer::Handler.stub!(:new)
- mock.stub!(:register)
- mock.should_receive(:run).and_return do
- mock("Mongrel::HttpServer.run").tap do |runner|
- runner.should_receive(:join)
- end
- end
- end
- end
- Thrift::MongrelHTTPServer.new(nil).serve
- end
- end
-
- describe Thrift::MongrelHTTPServer::Handler do
- before(:each) do
- @processor = mock("Processor")
- @factory = mock("ProtocolFactory")
- @handler = described_class.new(@processor, @factory)
- end
-
- it "should return 404 for non-POST requests" do
- request = mock("request", :params => {"REQUEST_METHOD" => "GET"})
- response = mock("response")
- response.should_receive(:start).with(404)
- response.should_not_receive(:start).with(200)
- @handler.process(request, response)
- end
-
- it "should serve using application/x-thrift" do
- request = mock("request", :params => {"REQUEST_METHOD" => "POST"}, :body => nil)
- response = mock("response")
- head = mock("head")
- head.should_receive(:[]=).with("Content-Type", "application/x-thrift")
- Thrift::IOStreamTransport.stub!(:new)
- @factory.stub!(:get_protocol)
- @processor.stub!(:process)
- response.should_receive(:start).with(200).and_yield(head, nil)
- @handler.process(request, response)
- end
-
- it "should use the IOStreamTransport" do
- body = mock("body")
- request = mock("request", :params => {"REQUEST_METHOD" => "POST"}, :body => body)
- response = mock("response")
- head = mock("head")
- head.stub!(:[]=)
- out = mock("out")
- protocol = mock("protocol")
- transport = mock("transport")
- Thrift::IOStreamTransport.should_receive(:new).with(body, out).and_return(transport)
- @factory.should_receive(:get_protocol).with(transport).and_return(protocol)
- @processor.should_receive(:process).with(protocol, protocol)
- response.should_receive(:start).with(200).and_yield(head, out)
- @handler.process(request, response)
- end
- end
-end
diff --git a/lib/rb/spec/thin_http_server_spec.rb b/lib/rb/spec/thin_http_server_spec.rb
new file mode 100644
index 000000000..f17ea924b
--- /dev/null
+++ b/lib/rb/spec/thin_http_server_spec.rb
@@ -0,0 +1,140 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+
+require 'spec_helper'
+require 'rack/test'
+
+describe Thrift::ThinHTTPServer do
+
+ let(:processor) { mock('processor') }
+
+ describe "#initialize" do
+
+ context "when using the defaults" do
+
+ it "binds to port 80, with host 0.0.0.0, a path of '/'" do
+ Thin::Server.should_receive(:new).with('0.0.0.0', 80, an_instance_of(Rack::Builder))
+ Thrift::ThinHTTPServer.new(processor)
+ end
+
+ it 'creates a ThinHTTPServer::RackApplicationContext' do
+ Thrift::ThinHTTPServer::RackApplication.should_receive(:for).with("/", processor, an_instance_of(Thrift::BinaryProtocolFactory)).and_return(anything)
+ Thrift::ThinHTTPServer.new(processor)
+ end
+
+ it "uses the BinaryProtocolFactory" do
+ Thrift::BinaryProtocolFactory.should_receive(:new)
+ Thrift::ThinHTTPServer.new(processor)
+ end
+
+ end
+
+ context "when using the options" do
+
+ it 'accepts :ip, :port, :path' do
+ ip = "192.168.0.1"
+ port = 3000
+ path = "/thin"
+ Thin::Server.should_receive(:new).with(ip, port, an_instance_of(Rack::Builder))
+ Thrift::ThinHTTPServer.new(processor,
+ :ip => ip,
+ :port => port,
+ :path => path)
+ end
+
+ it 'creates a ThinHTTPServer::RackApplicationContext with a different protocol factory' do
+ Thrift::ThinHTTPServer::RackApplication.should_receive(:for).with("/", processor, an_instance_of(Thrift::JsonProtocolFactory)).and_return(anything)
+ Thrift::ThinHTTPServer.new(processor,
+ :protocol_factory => Thrift::JsonProtocolFactory.new)
+ end
+
+ end
+
+ end
+
+ describe "#serve" do
+
+ it 'starts the Thin server' do
+ underlying_thin_server = mock('thin server', :start => true)
+ Thin::Server.stub(:new).and_return(underlying_thin_server)
+
+ thin_thrift_server = Thrift::ThinHTTPServer.new(processor)
+
+ underlying_thin_server.should_receive(:start)
+ thin_thrift_server.serve
+ end
+ end
+
+end
+
+describe Thrift::ThinHTTPServer::RackApplication do
+ include Rack::Test::Methods
+
+ let(:processor) { mock('processor') }
+ let(:protocol_factory) { mock('protocol factory') }
+
+ def app
+ Thrift::ThinHTTPServer::RackApplication.for("/", processor, protocol_factory)
+ end
+
+ context "404 response" do
+
+ it 'receives a non-POST' do
+ header('Content-Type', "application/x-thrift")
+ get "/"
+ last_response.status.should be 404
+ end
+
+ it 'receives a header other than application/x-thrift' do
+ header('Content-Type', "application/json")
+ post "/"
+ last_response.status.should be 404
+ end
+
+ end
+
+ context "200 response" do
+
+ before do
+ protocol_factory.stub(:get_protocol)
+ processor.stub(:process)
+ end
+
+ it 'creates an IOStreamTransport' do
+ header('Content-Type', "application/x-thrift")
+ Thrift::IOStreamTransport.should_receive(:new).with(an_instance_of(Rack::Lint::InputWrapper), an_instance_of(Rack::Response))
+ post "/"
+ end
+
+ it 'fetches the right protocol based on the Transport' do
+ header('Content-Type', "application/x-thrift")
+ protocol_factory.should_receive(:get_protocol).with(an_instance_of(Thrift::IOStreamTransport))
+ post "/"
+ end
+
+ it 'status code 200' do
+ header('Content-Type', "application/x-thrift")
+ post "/"
+ last_response.ok?.should be_true
+ end
+
+ end
+
+end
+