mirror of https://github.com/ceph/go-ceph
cephfs: clarify the behavior of the EOF case and short read in Preadv
Extend the Preadv/Pwritev test cases by adding assertions for the behavior of the call in the end-of-file condition, and add another test case to clarify the behavior in an explicit short-read test. Signed-off-by: John Mulligan <jmulligan@redhat.com>
This commit is contained in:
parent
f3d14f90b3
commit
b24fa281df
|
@ -839,9 +839,40 @@ func TestFilePreadvPwritev(t *testing.T) {
|
||||||
for i := range x {
|
for i := range x {
|
||||||
x[i] = make([]byte, 6)
|
x[i] = make([]byte, 6)
|
||||||
}
|
}
|
||||||
_, err = f.Preadv(x, 16)
|
n, err := f.Preadv(x, 16)
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
assert.Equal(t, io.EOF, err)
|
assert.Equal(t, io.EOF, err)
|
||||||
|
assert.Equal(t, 0, n)
|
||||||
|
assert.Equal(t, make([]byte, 6), x[0])
|
||||||
|
})
|
||||||
|
|
||||||
|
t.Run("shortRead", func(t *testing.T) {
|
||||||
|
f, err := mount.Open(fname, os.O_RDWR|os.O_CREATE|os.O_TRUNC, 0644)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
defer func() { assert.NoError(t, f.Close()) }()
|
||||||
|
|
||||||
|
b := []byte("Antidisestablishmentarianism\n")
|
||||||
|
n, err := f.Pwritev([][]byte{b}, 0)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 29, n)
|
||||||
|
|
||||||
|
// this is an explicit short read test.
|
||||||
|
// some of the buffers in the vector will be left unfilled.
|
||||||
|
x := make([][]byte, 8)
|
||||||
|
for i := range x {
|
||||||
|
x[i] = make([]byte, 6)
|
||||||
|
}
|
||||||
|
n, err = f.Preadv(x, 0)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Equal(t, 29, n)
|
||||||
|
assert.Equal(t, "Antidi", string(x[0]))
|
||||||
|
assert.Equal(t, "sestab", string(x[1]))
|
||||||
|
assert.Equal(t, "lishme", string(x[2]))
|
||||||
|
assert.Equal(t, "ntaria", string(x[3]))
|
||||||
|
assert.Equal(t, "nism\n\x00", string(x[4]))
|
||||||
|
assert.Equal(t, make([]byte, 6), x[5])
|
||||||
|
assert.Equal(t, make([]byte, 6), x[6])
|
||||||
|
assert.Equal(t, make([]byte, 6), x[7])
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("openForWriteOnly", func(t *testing.T) {
|
t.Run("openForWriteOnly", func(t *testing.T) {
|
||||||
|
|
Loading…
Reference in New Issue