From 2b584688006d6065c1c2a414d149e2182ddedc0d Mon Sep 17 00:00:00 2001 From: Patrick J Cherry Date: Sat, 3 Feb 2018 20:29:15 +0000 Subject: [PATCH] Added test for FUA acceptance. Although I think this might be a bit useless as servers normally just ingore flags. --- src/server/client.c | 1 + tests/acceptance/flexnbd.rb | 1 + tests/acceptance/flexnbd/fake_source.rb | 16 +++++++++++++--- tests/acceptance/test_serve_mode.rb | 11 ++++++++++- 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/src/server/client.c b/src/server/client.c index 5cc1c17..6d8543b 100644 --- a/src/server/client.c +++ b/src/server/client.c @@ -483,6 +483,7 @@ void client_reply_to_write( struct client* client, struct nbd_request request ) /* multiple of 4K page size */ uint64_t from_rounded = request.from & (!0xfff); uint64_t len_rounded = request.len + (request.from - from_rounded); + debug("Calling msync from=%"PRIu64", len=%"PRIu64"",from_rounded, len_rounded); FATAL_IF_NEGATIVE( msync( client->mapped + from_rounded, diff --git a/tests/acceptance/flexnbd.rb b/tests/acceptance/flexnbd.rb index 04de991..55662d6 100644 --- a/tests/acceptance/flexnbd.rb +++ b/tests/acceptance/flexnbd.rb @@ -195,6 +195,7 @@ module FlexNBD @ctrl = "/tmp/.flexnbd.ctrl.#{Time.now.to_i}.#{rand}" @ip = ip @port = port + @pid = @wait_thread = nil @kill = [] @prefetch_proxy = false end diff --git a/tests/acceptance/flexnbd/fake_source.rb b/tests/acceptance/flexnbd/fake_source.rb index 793b647..1691c4c 100644 --- a/tests/acceptance/flexnbd/fake_source.rb +++ b/tests/acceptance/flexnbd/fake_source.rb @@ -40,11 +40,12 @@ module FlexNBD end end - def send_request(type, handle = 'myhandle', from = 0, len = 0, magic = REQUEST_MAGIC) + def send_request(type, handle = 'myhandle', from = 0, len = 0, magic = REQUEST_MAGIC, flags = 0) raise 'Bad handle' unless handle.length == 8 @sock.write(magic) - @sock.write([type].pack('N')) + @sock.write([flags].pack('n')) + @sock.write([type].pack('n')) @sock.write(handle) @sock.write([n64(from)].pack('q')) @sock.write([len].pack('N')) @@ -53,7 +54,11 @@ module FlexNBD def write_write_request(from, len, handle = 'myhandle') send_request(1, handle, from, len) end - + + def write_write_request_with_fua(from, len, handle = 'myhandle') + send_request(1, handle, from, len, REQUEST_MAGIC, 1) + end + def write_flush_request(handle = 'myhandle') send_request(3, handle, 0, 0) end @@ -99,6 +104,11 @@ module FlexNBD write_data(data) end + def write_with_fua(from, data) + write_write_request_with_fua(from, data.length) + write_data(data) + end + def flush write_flush_request end diff --git a/tests/acceptance/test_serve_mode.rb b/tests/acceptance/test_serve_mode.rb index faa0ce0..b52eb1a 100644 --- a/tests/acceptance/test_serve_mode.rb +++ b/tests/acceptance/test_serve_mode.rb @@ -1,7 +1,6 @@ require 'test/unit' require 'environment' require 'flexnbd/fake_source' -require 'pp' class TestServeMode < Test::Unit::TestCase def setup @@ -118,4 +117,14 @@ class TestServeMode < Test::Unit::TestCase assert_equal 0, rsp[:error] end end + + def test_write_with_fua_is_accepted + connect_to_server do |client| + # Start with a file of all-zeroes. + client.write_with_fua(0, "\x00" * @env.file1.size) + rsp = client.read_response + assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic] + assert_equal 0, rsp[:error] + end + end end