Allow proxy to pass NBD protocol errors downstream; server returns EINVAL/ENOSPC appropriately
Previously the proxy would just disconnect when it saw an NBD protocol error, and retry the operation it was in the middle of. Additionally, the server needs to return the correct error types when this happens.
This commit is contained in:
@@ -72,6 +72,20 @@ module ProxyTests
|
||||
end
|
||||
end
|
||||
|
||||
def test_write_request_past_end_of_disc_returns_to_client
|
||||
with_proxied_client do |client|
|
||||
n = 1000
|
||||
offset = n * 4096
|
||||
client.write(offset, b * 4096)
|
||||
rsp = client.read_response
|
||||
|
||||
assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic]
|
||||
assert_equal 'myhandle', rsp[:handle]
|
||||
# NBD protocol say ENOSPC (28) in this situation
|
||||
assert_equal 28, rsp[:error]
|
||||
end
|
||||
end
|
||||
|
||||
def make_fake_server
|
||||
server = FlexNBD::FakeDest.new(@env.ip, @env.port1)
|
||||
@server_up = true
|
||||
|
@@ -112,7 +112,8 @@ class TestServeMode < Test::Unit::TestCase
|
||||
|
||||
assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic]
|
||||
assert_equal 'myhandle', rsp[:handle]
|
||||
assert rsp[:error] != 0, "Server sent success reply back: #{rsp[:error]}"
|
||||
# NBD protocol suggests ENOSPC (28) is returned
|
||||
assert_equal 28, rsp[:error], 'Server sent incorrect response'
|
||||
|
||||
# Ensure we're not disconnected by sending a request. We don't care about
|
||||
# whether the reply is good or not, here.
|
||||
@@ -129,7 +130,26 @@ class TestServeMode < Test::Unit::TestCase
|
||||
|
||||
assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic]
|
||||
assert_equal 'myhandle', rsp[:handle]
|
||||
assert rsp[:error] != 0, "Server sent success reply back: #{rsp[:error]}"
|
||||
# NBD protocol suggests ENOSPC (28) is returned
|
||||
assert_equal 28, rsp[:error], 'Server sent incorrect response'
|
||||
|
||||
# Ensure we're not disconnected by sending a request. We don't care about
|
||||
# whether the reply is good or not, here.
|
||||
client.write(0, "\x00" * @env.file1.size)
|
||||
rsp = client.read_response
|
||||
assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic]
|
||||
end
|
||||
end
|
||||
|
||||
def test_unknown_command_receives_error_response
|
||||
connect_to_server do |client|
|
||||
client.send_request(123)
|
||||
rsp = client.read_response
|
||||
|
||||
assert_equal FlexNBD::REPLY_MAGIC, rsp[:magic]
|
||||
assert_equal 'myhandle', rsp[:handle]
|
||||
# NBD protocol suggests EINVAL (22) is returned
|
||||
assert_equal 22, rsp[:error], 'Server sent incorrect response'
|
||||
|
||||
# Ensure we're not disconnected by sending a request. We don't care about
|
||||
# whether the reply is good or not, here.
|
||||
|
Reference in New Issue
Block a user