From: Kevin Clark Date: Wed, 18 Jun 2008 01:15:25 +0000 (+0000) Subject: Add a few accessors and specs to prepare for the upcoming NonblockingServer X-Git-Tag: 0.2.0~556 X-Git-Url: https://source.supwisdom.com/gerrit/gitweb?a=commitdiff_plain;h=6c30dbbb9280c8b9a2a3b4f9265082cc111bef9f;p=common%2Fthrift.git Add a few accessors and specs to prepare for the upcoming NonblockingServer git-svn-id: https://svn.apache.org/repos/asf/incubator/thrift/trunk@668995 13f79535-47bb-0310-9956-ffa450edef68 --- diff --git a/lib/rb/lib/thrift/transport.rb b/lib/rb/lib/thrift/transport.rb index d1792f74..d4c1b2bc 100644 --- a/lib/rb/lib/thrift/transport.rb +++ b/lib/rb/lib/thrift/transport.rb @@ -50,6 +50,7 @@ module Thrift deprecate! :readAll => :read_all def write(buf); end + alias_method :<<, :write def flush; end end @@ -182,8 +183,12 @@ module Thrift deprecate_class! :TFramedTransportFactory => FramedTransportFactory class MemoryBuffer < Transport - def initialize - @buf = '' + # If you pass a string to this, you should #dup that string + # unless you want it to be modified by #read and #write + #-- + # yes this behavior is intentional + def initialize(buffer = nil) + @buf = buffer || '' end def open? @@ -200,6 +205,7 @@ module Thrift not @buf.empty? end + # this method does not use the passed object directly but copies it def reset_buffer(new_buf = '') @buf.replace new_buf end diff --git a/lib/rb/lib/thrift/transport/socket.rb b/lib/rb/lib/thrift/transport/socket.rb index 5c1c4b12..37dda9bb 100644 --- a/lib/rb/lib/thrift/transport/socket.rb +++ b/lib/rb/lib/thrift/transport/socket.rb @@ -17,9 +17,7 @@ module Thrift @handle = nil end - def set_handle(handle) - @handle = handle - end + attr_accessor :handle def open begin @@ -66,6 +64,8 @@ module Thrift @handle = nil end + attr_reader :handle + def listen @handle = TCPServer.new(nil, @port) end @@ -74,7 +74,7 @@ module Thrift unless @handle.nil? sock = @handle.accept trans = Socket.new - trans.set_handle(sock) + trans.handle = sock trans end end diff --git a/lib/rb/spec/socket_spec.rb b/lib/rb/spec/socket_spec.rb index 5406453c..b6e2a14d 100644 --- a/lib/rb/spec/socket_spec.rb +++ b/lib/rb/spec/socket_spec.rb @@ -29,9 +29,9 @@ class ThriftSocketSpec < Spec::ExampleGroup TCPSocket.should_receive(:new).and_return(@handle) @socket.open @socket.should be_open - @socket.set_handle nil + @socket.handle = nil @socket.should_not be_open - @socket.set_handle @handle + @socket.handle = @handle @handle.should_receive(:close) @socket.close @socket.should_not be_open @@ -85,8 +85,8 @@ class ThriftSocketSpec < Spec::ExampleGroup end it "should create a handle when calling listen" do - TCPServer.should_receive(:new).with(nil, 1234) @socket.listen + @socket.handle.should be_an_instance_of(TCPServer) end it "should create a Thrift::Socket to wrap accepted sockets" do @@ -97,7 +97,7 @@ class ThriftSocketSpec < Spec::ExampleGroup handle.should_receive(:accept).and_return(sock) trans = mock("Socket") Socket.should_receive(:new).and_return(trans) - trans.should_receive(:set_handle).with(sock) + trans.should_receive(:handle=).with(sock) @socket.accept.should == trans end diff --git a/lib/rb/spec/transport_spec.rb b/lib/rb/spec/transport_spec.rb index 941df285..5d5c92f7 100644 --- a/lib/rb/spec/transport_spec.rb +++ b/lib/rb/spec/transport_spec.rb @@ -26,6 +26,10 @@ class ThriftTransportSpec < Spec::ExampleGroup Transport.method_defined?(sym).should be_true end end + + it "should alias << to write" do + Transport.instance_method(:<<).should == Transport.instance_method(:write) + end end describe ServerTransport do @@ -208,6 +212,13 @@ class ThriftTransportSpec < Spec::ExampleGroup @buffer = MemoryBuffer.new end + it "should accept a buffer on input and use it directly" do + s = "this is a test" + @buffer = MemoryBuffer.new(s) + @buffer.read(4).should == "this" + s.should == " is a test" + end + it "should always remain open" do @buffer.should be_open @buffer.close @@ -235,6 +246,15 @@ class ThriftTransportSpec < Spec::ExampleGroup @buffer.available.should == 0 end + it "should copy the given string whne resetting the buffer" do + s = "this is a test" + @buffer.reset_buffer(s) + @buffer.available.should == 14 + @buffer.read(10) + @buffer.available.should == 4 + s.should == "this is a test" + end + it "should return from read what was given in write" do @buffer.write "test data" @buffer.read(4).should == "test"