summaryrefslogtreecommitdiffstats
path: root/src/jaegertracing/thrift/lib/rb/spec/thin_http_server_spec.rb
diff options
context:
space:
mode:
Diffstat (limited to 'src/jaegertracing/thrift/lib/rb/spec/thin_http_server_spec.rb')
-rw-r--r--src/jaegertracing/thrift/lib/rb/spec/thin_http_server_spec.rb141
1 files changed, 141 insertions, 0 deletions
diff --git a/src/jaegertracing/thrift/lib/rb/spec/thin_http_server_spec.rb b/src/jaegertracing/thrift/lib/rb/spec/thin_http_server_spec.rb
new file mode 100644
index 000000000..665391b7d
--- /dev/null
+++ b/src/jaegertracing/thrift/lib/rb/spec/thin_http_server_spec.rb
@@ -0,0 +1,141 @@
+#
+# 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'
+require 'thrift/server/thin_http_server'
+
+describe Thrift::ThinHTTPServer do
+
+ let(:processor) { double('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
+ expect(Thin::Server).to receive(:new).with('0.0.0.0', 80, an_instance_of(Rack::Builder))
+ Thrift::ThinHTTPServer.new(processor)
+ end
+
+ it 'creates a ThinHTTPServer::RackApplicationContext' do
+ expect(Thrift::ThinHTTPServer::RackApplication).to receive(:for).with("/", processor, an_instance_of(Thrift::BinaryProtocolFactory)).and_return(anything)
+ Thrift::ThinHTTPServer.new(processor)
+ end
+
+ it "uses the BinaryProtocolFactory" do
+ expect(Thrift::BinaryProtocolFactory).to 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"
+ expect(Thin::Server).to 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
+ expect(Thrift::ThinHTTPServer::RackApplication).to 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 = double('thin server', :start => true)
+ allow(Thin::Server).to receive(:new).and_return(underlying_thin_server)
+
+ thin_thrift_server = Thrift::ThinHTTPServer.new(processor)
+
+ expect(underlying_thin_server).to receive(:start)
+ thin_thrift_server.serve
+ end
+ end
+
+end
+
+describe Thrift::ThinHTTPServer::RackApplication do
+ include Rack::Test::Methods
+
+ let(:processor) { double('processor') }
+ let(:protocol_factory) { double('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 "/"
+ expect(last_response.status).to be 404
+ end
+
+ it 'receives a header other than application/x-thrift' do
+ header('Content-Type', "application/json")
+ post "/"
+ expect(last_response.status).to be 404
+ end
+
+ end
+
+ context "200 response" do
+
+ before do
+ allow(protocol_factory).to receive(:get_protocol)
+ allow(processor).to receive(:process)
+ end
+
+ it 'creates an IOStreamTransport' do
+ header('Content-Type', "application/x-thrift")
+ expect(Thrift::IOStreamTransport).to 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")
+ expect(protocol_factory).to receive(:get_protocol).with(an_instance_of(Thrift::IOStreamTransport))
+ post "/"
+ end
+
+ it 'status code 200' do
+ header('Content-Type', "application/x-thrift")
+ post "/"
+ expect(last_response.ok?).to be_truthy
+ end
+
+ end
+
+end
+