mirror of
https://github.com/ceph/go-ceph
synced 2025-02-03 03:52:15 +00:00
test/rbd: Add tests for Image.Seek()
Signed-off-by: Niels de Vos <ndevos@redhat.com>
This commit is contained in:
parent
2faaf93287
commit
9381485fac
11
rbd/rbd.go
11
rbd/rbd.go
@ -47,6 +47,11 @@ const (
|
||||
|
||||
// Features that only work when used with a single client using the image for writes.
|
||||
RbdFeaturesSingleClient = uint64(C.RBD_FEATURES_SINGLE_CLIENT)
|
||||
|
||||
// Image.Seek() constants
|
||||
SeekSet = int(C.SEEK_SET)
|
||||
SeekCur = int(C.SEEK_CUR)
|
||||
SeekEnd = int(C.SEEK_END)
|
||||
)
|
||||
|
||||
// bits for Image.validate() and Snapshot.validate()
|
||||
@ -863,11 +868,11 @@ func (image *Image) Write(data []byte) (n int, err error) {
|
||||
|
||||
func (image *Image) Seek(offset int64, whence int) (int64, error) {
|
||||
switch whence {
|
||||
case 0:
|
||||
case SeekSet:
|
||||
image.offset = offset
|
||||
case 1:
|
||||
case SeekCur:
|
||||
image.offset += offset
|
||||
case 2:
|
||||
case SeekEnd:
|
||||
stats, err := image.Stat()
|
||||
if err != nil {
|
||||
return 0, err
|
||||
|
@ -392,6 +392,76 @@ func TestImageRename(t *testing.T) {
|
||||
conn.Shutdown()
|
||||
}
|
||||
|
||||
func TestImageSeek(t *testing.T) {
|
||||
conn, _ := rados.NewConn()
|
||||
conn.ReadDefaultConfigFile()
|
||||
conn.Connect()
|
||||
|
||||
poolname := GetUUID()
|
||||
err := conn.MakePool(poolname)
|
||||
assert.NoError(t, err)
|
||||
|
||||
ioctx, err := conn.OpenIOContext(poolname)
|
||||
require.NoError(t, err)
|
||||
|
||||
name := GetUUID()
|
||||
img, err := Create(ioctx, name, 1<<22, 22)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = img.Open()
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = img.Seek(0, SeekSet)
|
||||
assert.NoError(t, err)
|
||||
|
||||
bytes_in := []byte("input data")
|
||||
n_in, err := img.Write(bytes_in)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, n_in, len(bytes_in))
|
||||
|
||||
pos, err := img.Seek(0, SeekCur)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, pos, int64(n_in))
|
||||
|
||||
pos, err = img.Seek(0, SeekSet)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, pos, int64(0))
|
||||
|
||||
bytes_out := make([]byte, len(bytes_in))
|
||||
n_out, err := img.Read(bytes_out)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, n_out, len(bytes_out))
|
||||
assert.Equal(t, bytes_in, bytes_out)
|
||||
|
||||
pos, err = img.Seek(0, SeekCur)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, pos, int64(n_out))
|
||||
|
||||
pos, err = img.Seek(0, SeekSet)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, pos, int64(0))
|
||||
|
||||
pos, err = img.Seek(0, SeekEnd)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, pos, int64(1<<22))
|
||||
|
||||
_, err = img.Seek(0, -1)
|
||||
assert.Error(t, err)
|
||||
|
||||
err = img.Close()
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = img.Seek(0, SeekEnd)
|
||||
assert.Equal(t, err, ErrImageNotOpen)
|
||||
|
||||
err = img.Remove()
|
||||
assert.NoError(t, err)
|
||||
|
||||
ioctx.Destroy()
|
||||
conn.DeletePool(poolname)
|
||||
conn.Shutdown()
|
||||
}
|
||||
|
||||
func TestIOReaderWriter(t *testing.T) {
|
||||
conn, _ := rados.NewConn()
|
||||
conn.ReadDefaultConfigFile()
|
||||
@ -420,7 +490,7 @@ func TestIOReaderWriter(t *testing.T) {
|
||||
err = img.Flush()
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = img.Seek(0, 0)
|
||||
_, err = img.Seek(0, SeekSet)
|
||||
assert.NoError(t, err)
|
||||
|
||||
var stats2 *ImageInfo
|
||||
@ -429,12 +499,12 @@ func TestIOReaderWriter(t *testing.T) {
|
||||
|
||||
assert.Equal(t, &stats, &stats2)
|
||||
|
||||
_, err = img.Seek(0, 0)
|
||||
_, err = img.Seek(0, SeekSet)
|
||||
bytes_in := []byte("input data")
|
||||
_, err = img.Write(bytes_in)
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = img.Seek(0, 0)
|
||||
_, err = img.Seek(0, SeekSet)
|
||||
assert.NoError(t, err)
|
||||
|
||||
bytes_out := make([]byte, len(bytes_in))
|
||||
|
Loading…
Reference in New Issue
Block a user