diff --git a/tests/acceptance/fakes/dest/close_after_writes.rb b/tests/acceptance/fakes/dest/close_after_writes.rb new file mode 100755 index 0000000..4c11d67 --- /dev/null +++ b/tests/acceptance/fakes/dest/close_after_writes.rb @@ -0,0 +1,27 @@ +#!/usr/bin/env ruby +# encoding: utf-8 + +# Open a server, accept a client, then we expect a single write +# followed by an entrust. However, we disconnect after the write so +# the entrust will fail. We expect a reconnection. + +require 'flexnbd/fake_dest' +include FlexNBD + +addr, port, src_pid = *ARGV +server = FakeDest.new( addr, port ) +client = server.accept + +client.write_hello +req = client.read_request +data = client.read_data( req[:len] ) + +Process.kill("STOP", src_pid.to_i) +client.write_reply( req[:handle], 0 ) +client.close +Process.kill("CONT", src_pid.to_i) + +client2 = server.accept +client2.close + +exit(0) diff --git a/tests/acceptance/test_source_error_handling.rb b/tests/acceptance/test_source_error_handling.rb index 835bc38..d456a3a 100644 --- a/tests/acceptance/test_source_error_handling.rb +++ b/tests/acceptance/test_source_error_handling.rb @@ -96,6 +96,13 @@ class TestSourceErrorHandling < Test::Unit::TestCase end + def test_pre_entrust_disconnect_causes_retry + run_fake( "dest/close_after_writes" ) + @env.mirror12_unchecked + assert_success + end + + private def run_fake(name) @env.run_fake( name, @env.ip, @env.port2 )