
If the mirror attempt connects ok, but is rejected (say, for reporting the wrong size), the client socket needs to be closed. The destination end can't close its socket and accept another connection attempt unless it does.
30 lines
658 B
Ruby
Executable File
30 lines
658 B
Ruby
Executable File
#!/usr/bin/env ruby
|
|
|
|
# Simulate a server which has a disc of the wrong size attached: send
|
|
# a valid NBD hello with a random size, then check that we have see an
|
|
# EOF on read.
|
|
|
|
require 'flexnbd/fake_dest'
|
|
include FlexNBD
|
|
|
|
addr, port = *ARGV
|
|
server = FakeDest.new( addr, port )
|
|
client = server.accept
|
|
|
|
t = Thread.new do
|
|
client2 = server.accept( "Timed out waiting for a reconnection",
|
|
FlexNBD::MS_RETRY_DELAY_SECS + 1 )
|
|
client2.close
|
|
end
|
|
|
|
client.write_hello( :size => :wrong )
|
|
|
|
t.join
|
|
|
|
# Now check that the source closed the first socket (yes, this was an
|
|
# actual bug)
|
|
|
|
fail "Didn't close socket" unless client.disconnected?
|
|
|
|
exit 0
|
|
|