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 d1792f7..d4c1b2b 100644
--- a/lib/rb/lib/thrift/transport.rb
+++ b/lib/rb/lib/thrift/transport.rb
@@ -50,6 +50,7 @@
deprecate! :readAll => :read_all
def write(buf); end
+ alias_method :<<, :write
def flush; end
end
@@ -182,8 +183,12 @@
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 @@
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 5c1c4b1..37dda9b 100644
--- a/lib/rb/lib/thrift/transport/socket.rb
+++ b/lib/rb/lib/thrift/transport/socket.rb
@@ -17,9 +17,7 @@
@handle = nil
end
- def set_handle(handle)
- @handle = handle
- end
+ attr_accessor :handle
def open
begin
@@ -66,6 +64,8 @@
@handle = nil
end
+ attr_reader :handle
+
def listen
@handle = TCPServer.new(nil, @port)
end
@@ -74,7 +74,7 @@
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 5406453..b6e2a14 100644
--- a/lib/rb/spec/socket_spec.rb
+++ b/lib/rb/spec/socket_spec.rb
@@ -29,9 +29,9 @@
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 @@
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 @@
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 941df28..5d5c92f 100644
--- a/lib/rb/spec/transport_spec.rb
+++ b/lib/rb/spec/transport_spec.rb
@@ -26,6 +26,10 @@
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 @@
@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 @@
@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"