diff --git a/tests/acceptance/flexnbd/fake_source.rb b/tests/acceptance/flexnbd/fake_source.rb index 888ac33..793b647 100644 --- a/tests/acceptance/flexnbd/fake_source.rb +++ b/tests/acceptance/flexnbd/fake_source.rb @@ -53,6 +53,10 @@ module FlexNBD def write_write_request(from, len, handle = 'myhandle') send_request(1, handle, from, len) end + + def write_flush_request(handle = 'myhandle') + send_request(3, handle, 0, 0) + end def write_entrust_request(handle = 'myhandle') send_request(65_536, handle) @@ -95,6 +99,10 @@ module FlexNBD write_data(data) end + def flush + write_flush_request + end + def read_response magic = @sock.read(4) error_s = @sock.read(4) diff --git a/tests/acceptance/test_serve_mode.rb b/tests/acceptance/test_serve_mode.rb index 1d12dd9..faa0ce0 100644 --- a/tests/acceptance/test_serve_mode.rb +++ b/tests/acceptance/test_serve_mode.rb @@ -24,7 +24,9 @@ class TestServeMode < Test::Unit::TestCase assert_equal 'NBDMAGIC', result[:passwd] assert_equal 0x00420281861253, result[:magic] assert_equal @env.file1.size, result[:size] - assert_equal 13, result[:flags] + # See src/common/nbdtypes.h for the various flags. At the moment we + # support HAS_FLAGS (1), SEND_FLUSH (4), SEND_FUA (8) + assert_equal (1 | 4 | 8), result[:flags] assert_equal "\x0" * 124, result[:reserved] yield client ensure @@ -106,4 +108,14 @@ class TestServeMode < Test::Unit::TestCase assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic] end end + + def test_flush_is_accepted + connect_to_server do |client| + # Start with a file of all-zeroes. + client.flush + rsp = client.read_response + assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic] + assert_equal 0, rsp[:error] + end + end end