Files
flexnbd-c/tests/acceptance/fakes/source/hang_after_hello.rb
Patrick J Cherry 9c48da82cc Rubocop
2018-02-02 21:34:14 +00:00

40 lines
1.1 KiB
Ruby
Executable File

#!/usr/bin/env ruby
# Simulate the hello message going astray, or the source hanging after
# receiving it.
#
# We then connect again, to confirm that the destination is still
# listening for an incoming migration.
addr, port = *ARGV
require 'flexnbd/fake_source'
include FlexNBD
client = FakeSource.new(addr, port, 'Timed out connecting')
client.read_hello
# Now we do two things:
# - In the parent process, we sleep for CLIENT_MAX_WAIT_SECS+5, which
# will make the destination give up and close the connection.
# - In the child process, we sleep for CLIENT_MAX_WAIT_SECS+1, which
# should be able to reconnect despite the parent process not having
# closed its end yet.
kidpid = fork do
client.close
new_client = nil
sleep(FlexNBD::CLIENT_MAX_WAIT_SECS + 1)
new_client = FakeSource.new(addr, port, 'Timed out reconnecting.')
new_client.read_hello
exit 0
end
# Sleep for longer than the child, to give the flexnbd process a bit
# of slop
sleep(FlexNBD::CLIENT_MAX_WAIT_SECS + 3)
client.close
_, status = Process.waitpid2(kidpid)
exit status.exitstatus