
If the client makes a write that's out of range, by the time we get to validate the message at the server end the client has already stuffed the socket with data we can't use, so we have to flush it. This patch also fixes a potential problem in the acceptance tests where the error field was being returned as an array rather than a value.
33 lines
875 B
Ruby
Executable File
33 lines
875 B
Ruby
Executable File
#!/usr/bin/env ruby
|
|
# encoding: utf-8
|
|
|
|
# Connect, read the hello then make a write request with an impossible
|
|
# (from,len) pair. We expect an error response, and not to be
|
|
# disconnected.
|
|
#
|
|
# We then expect to be able to issue a successful write: the destination
|
|
# has to flush the data in the socket.
|
|
|
|
require 'flexnbd/fake_source'
|
|
include FlexNBD
|
|
|
|
addr, port = *ARGV
|
|
|
|
client = FakeSource.new( addr, port, "Timed out connecting" )
|
|
hello = client.read_hello
|
|
client.write_write_request( hello[:size]+1, 32, "myhandle" )
|
|
client.write_data("1"*32)
|
|
response = client.read_response
|
|
|
|
fail "Not an error" if response[:error] == 0
|
|
fail "Wrong handle" unless "myhandle" == response[:handle]
|
|
|
|
client.write_write_request( 0, 32 )
|
|
client.write_data( "2"*32 )
|
|
success_response = client.read_response
|
|
|
|
fail "Second write failed" unless success_response[:error] == 0
|
|
|
|
client.close
|
|
exit(0)
|